Criar uma Atividade em tempo real create-mobile-live

Nesta página: crie uma campanha acionada por API no Journey Optimizer para que você possa iniciar, atualizar e encerrar atividades online remotamente para usuários individuais ou públicos.

Após definir a configuração móvel e implementar o Adobe Experience Platform mobile SDK, você pode começar a criar sua atividade Live no Journey Optimizer:

  1. Acesse o menu Campanhas e clique em Criar campanha.

  2. Selecione o tipo de campanha API acionada.

    • Selecione Marketing acionado por API para campanhas baseadas em público-alvo

    • Selecione Transacional acionado por API para campanhas individuais.

    note important
    IMPORTANT
    Observe que para a Transacional acionada por API, a opção Alta Taxa de Transferência não deve estar habilitada.

  3. Na seção Propriedades, edite o Título e a Descrição da sua campanha.

  4. Na seção Actions, escolha Atividade online e selecione ou crie uma nova configuração.

    Saiba mais sobre a configuração de atividade do Live em esta página.

  5. Clique em Criar experimento para começar a configurar seu experimento de conteúdo e criar tratamentos para medir seu desempenho e identificar a melhor opção para seu público-alvo. Saiba mais

  6. Na guia Público, escolha seu Tipo de identidade Saiba mais.

    note
    NOTE
    Para campanhas de Marketing acionado por API, você pode selecionar um público existente que atue como a primeira segmentação antes de verificar a assinatura de channelID APNs da carga da API.
  7. As campanhas são projetadas para serem executadas em uma data específica ou em uma frequência recorrente. Saiba como configurar o Cronograma da sua campanha no nesta seção.

  8. Após a configuração, clique em Revisar para ativar e em Ativar.

  9. Depois que a campanha for ativada, use a cURL request fornecida como um modelo para acionar os eventos de início, atualização ou término da atividade do Live. Atualize o payload de amostra com seus dados específicos antes da execução.

    Copie também os identificadores da ID da campanha para incluir em sua carga.

    ➡️ Consulte a Documentação de Campanhas acionadas por API para obter os requisitos de autenticação, incluindo tokens OAuth e chaves de API.

Depois de projetar sua atividade Live, você pode acompanhar a medição do impacto da atividade Live com relatórios internos.

TIP
Se a sua atividade do Live não estiver aparecendo ou sendo atualizada conforme esperado, consulte Solucionar problemas de atividades do Live para obter uma orientação passo a passo sobre depuração.

Exemplos de carga útil payload

A estrutura de conteúdo depende da plataforma que o iOS usa o objeto aps do serviço de notificação por push da Apple (APNs), enquanto o Android usa o objeto fcm do Firebase Cloud Messaging (FCM). Use os exemplos abaixo para sua plataforma e tipo de campanha.

Carga do iOS

Para o iOS, coloque os campos de personalização e ciclo de vida no objeto APNs aps. Verifique se attributes-type corresponde ao nome da estrutura LiveActivityAttributes do seu aplicativo e se attributes corresponde aos campos definidos nessa estrutura.

Casos de uso unitários (campanha transacional acionada por API)

Este exemplo de conteúdo é para campanhas individuais que usam o tipo de campanha Transacional acionado por API. Observe que a maioria dos campos do exemplo de carga a seguir são obrigatórios, somente requestId, dismissal-date e alert são opcionais.

Exibir carga de amostra
code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "testemail@gmail.com",
            "namespace": "email",
            "context": {
                "requestPayload": {
                    "aps": {
                        "content-available": 1,
                        "timestamp": 1756984054,              // current epoch time
                        "dismissal-date": 1756984084,         // optional – auto remove when event="end"
                        "event": "update",                    // start | update | end

                        // Fields from FoodDeliveryLiveActivityAttributes
                        "content-state": {
                            "orderStatus": "Delivered"
                        },

                        "attributes-type": "FoodDeliveryLiveActivityAttributes",
                        "attributes": {
                            "restaurantName": "Pizza",
                            "liveActivityData": {
                                "liveActivityID": "orderId1"       // customer reference ID
                            }
                        },

                        "alert": {
                            "title": "Order Delivered!",
                            "body": "Your pizza has arrived."
                        }
                    }
                }
            }
        }
    ]
}

Casos de uso de transmissão (campanha de marketing acionada por API)

Este exemplo de conteúdo é para campanhas baseadas em público usando o tipo de campanha Marketing acionado por API.

Exibir carga de amostra
code language-json
{
    "requestId": "123400000",
    "campaignId": "d32e6f6c-56df-4a98-a2c0-6db6008f8f32",
    "audience": {
        "id": "508f9416-52d0-4898-ba47-08baaa22e9c7"
    },
    "context": {
        "requestPayload": {
            "aps": {
                "input-push-channel": "V+8UslywEfAAAOq9SbTrLg==",  //apns-channel-id
                "content-available": 1,
                "timestamp": 1770808339,
                "event": "update",   // start | update | end

                // Fields from GameScoreLiveActivityAttributes
                "content-state": {
                    "homeTeamScore": 33,
                    "awayTeamScore": 49,
                    "statusText": "Wingdom keeps scoring!"
                },
                "attributes-type": "GameScoreLiveActivityAttributes",
                "attributes": {
                    "liveActivityData": {
                        "channelID": "V+8UslywEfAAAOq9SbTrLg=="   //apns-channel-id, must match the "input-push-channel" value
                    }
                },
                "alert": {
                    "title": "This is the title for game",
                    "body": "This is the body for body"
                }
            }
        }
    }
}

Carga do Android

Para o Android, coloque os campos de atividade Live no objeto fcm do Firebase Cloud Messaging (FCM). Defina valores dinâmicos em content_state usando custom_key_* chaves com as quais o provedor de estilos do seu aplicativo está configurado para lidar.

Casos de uso unitários (campanha transacional acionada por API)

IMPORTANT
O objeto fcm contém dois campos de tempo, ambos expressos em segundos da época:
  • timestampcontrola a ordenação de mensagens. Cada evento de início, atualização e término deve usar um valor maior que o evento anterior para o mesmo notification_id (ou topic_name para transmissões). As atualizações são exibidas somente se o carimbo de data e hora for mais recente que o último valor processado. Carimbos de data e hora mais antigos ou iguais são ignorados.
  • whencontrola o tempo de exibição da notificação. Esse campo opcional corresponde ao método setWhen do Android e não afeta a ordenação de mensagens. Mantenha seu valor razoavelmente atualizado, pois um valor desatualizado pode causar problemas de exibição.
Consulte Solução de problemas de atividades online para obter detalhes.

Use essas cargas para campanhas individuais do tipo Transacional disparado por API.

Use o mesmo notification_id para todos os eventos de início, atualização e término para garantir que eles direcionem a mesma instância de atividade Live.

Iniciar carga de amostra do evento
code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "your-device-ECID",
            "namespace": "ECID",
            "context": {
                "requestPayload": {
                    "fcm": {
                        "notification_id": "flight-DL-321",
                        "timestamp": 1756984054,           // required - ordering key; must strictly increase on every event
                        "notification_channel_id": "live_updates_channel",
                        "priority": "PRIORITY_HIGH",
                        "when": 1756984054,              // optional - time shown on the notification (seconds)
                        "event_type": "start",             // start | update | end
                        "title": "Flight DL-321",
                        "body": "Boarding starts shortly",
                        "critical_text": "25 min",
                        "action_type": "DEEPLINK",
                        "action_uri": "myapp://flight/DL241",
                        "content_state": {                 // custom updating values specific to keys defined in every Live activity on the app
                            "custom_key_template_type": "progress",
                            "custom_key_journey_start": "DEL",
                            "custom_key_journey_progress": 10,
                            "custom_key_journey_end": "MUM"
                        }
                    }
                }
            }
        }
    ]
}
Atualizar carga de amostra do evento

Para atualizar uma atividade Live, defina event_type como update e mantenha notification_id inalterado. Atualize body, critical_text e os valores em content_state conforme necessário para refletir o status mais recente.

code language-json
"fcm": {
    "notification_id": "flight-DL-321",
    "timestamp": 1756984114,           // increased from the start event
    "notification_channel_id": "live_updates_channel",
    "priority": "PRIORITY_HIGH",
    "when": 1756984054,
    "event_type": "update",
    "title": "Flight DL-321",
    "body": "Boarding at Gate-D23",
    "critical_text": "Now",
    "action_type": "DEEPLINK",
    "action_uri": "myapp://flight/DL241",
    "content_state": {
        "custom_key_template_type": "progress",
        "custom_key_journey_start": "DEL",
        "custom_key_journey_progress": 50,
        "custom_key_journey_end": "MUM"
    }
}
Carga de amostra do evento final

Para encerrar uma atividade Live, defina event_type como end. Opcionalmente, inclua dismiss_after para especificar o atraso, em segundos, antes que a atividade concluída em tempo real seja dispensada.

code language-json
"fcm": {
    "notification_id": "flight-DL-321",
    "timestamp": 1756984174,           // increased again
    "notification_channel_id": "live_updates_channel",
    "priority": "PRIORITY_HIGH",
    "when": 1756984054,
    "event_type": "end",
    "title": "Flight DL-321",
    "body": "Welcome to Mumbai",
    "critical_text": "Landed",
    "action_type": "DEEPLINK",
    "action_uri": "myapp://flight/DL241",
    "content_state": {
        "custom_key_template_type": "progress",
        "custom_key_journey_start": "DEL",
        "custom_key_journey_progress": 100,
        "custom_key_journey_end": "MUM"
    },
    "dismiss_after": 10
}

Casos de uso de transmissão (campanha de marketing acionada por API)

Use esta carga para campanhas baseadas em público do Marketing acionado por API.

Defina topic_name para o tópico FCM que os dispositivos dos usuários assinam. Envie todas as atualizações e eventos finais para o mesmo tópico e mantenha notification_id inalterado para direcionar a mesma notificação de atividade ao vivo.

Exibir carga de amostra
code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-marketing-campaign-id",
    "audience": {
        "id": "your-audience-id"
    },
    "context": {
        "requestPayload": {
            "fcm": {
                "topic_name":"flight_DL321",        // fcm topic name
                "notification_id": "flight-DL-321",
                "timestamp": 1756984054,           // required - ordering key; must strictly increase on every event
                "notification_channel_id": "live_updates_channel",
                "priority": "PRIORITY_HIGH",
                "when": 1756984054,              // optional - time shown on the notification (seconds)
                "event_type": "start",             // start | update | end
                "title": "Flight DL-321",
                "body": "Boarding starts shortly",
                "critical_text": "25 min",
                "action_type": "DEEPLINK",
                "action_uri": "myapp://flight/DL241",
                "content_state": {                 // custom updating values specific to keys defined in every Live activity on the app
                    "custom_key_template_type": "progress",
                    "custom_key_journey_start": "DEL",
                    "custom_key_journey_progress": 10,
                    "custom_key_journey_end": "MUM"
                }
            }
        }
    }
}

Adicionar dados personalizados com metadados de execução metadata

AVAILABILITY
executionMetadata está disponível somente para campanhas Transacionais acionadas por API.

Anexe seus próprios dados personalizados a um perfil, como uma ID de pedido, uma camada de fidelidade ou um código de região, usando o campo executionMetadata opcional. A Journey Optimizer armazena esses dados junto com a execução para que você possa recuperá-los posteriormente do seu conjunto de dados de comentários de atividades em tempo real e fazer a correspondência dos resultados da entrega com seus próprios registros comerciais.

Para enviar esses dados por meio da API, consulte a Referência da API de mensagens para o campo executionMetadata. Para ler os valores novamente no dispositivo, consulte o guia do Mobile SDK sobre como receber metadados de execução do acionador de API.

Para adicionar dados personalizados com metadados de execução:

  • Adicionar executionMetadata a um perfil, próximo a userId e namespace. Somente chaves de sequência de caracteres e valores de sequência de caracteres são aceitos. Converta qualquer valor que não seja de sequência de caracteres em uma sequência de caracteres antes de enviá-lo.

  • Os valores são registrados exatamente como enviados. executionMetadata não oferece suporte a expressões de personalização, portanto, qualquer expressão {{...}} é tratada como texto literal em vez de resolvida. Você sempre deve enviar valores finais e literais.

  • Cada perfil pode carregar até 50 pares de chave/valor, com um limite de tamanho combinado de 2 KB para todas as chaves e valores. Os metadados que excedem esse limite são descartados, mas a atividade Live ainda é entregue. Limite o conteúdo às informações necessárias para fins de relatório.

Exemplo de JSON do iOS

Neste exemplo, orderId, tier, restaurant e region são seus próprios valores. Depois que a atividade Live for acionada, você poderá lê-las no conjunto de dados de feedback para vincular o delivery ao registro do seu pedido.

code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "testemail@gmail.com",
            "namespace": "email",
            "executionMetadata": {
                "orderId": "A-123",
                "tier": "gold",
                "restaurant": "PizzaPlace",
                "region": "EU"
            },
            "context": {
                "requestPayload": {
                    "aps": {
                        "content-available": 1,
                        "timestamp": 1756984054,
                        "dismissal-date": 1756984084,
                        "event": "update",
                        "content-state": {
                            "orderStatus": "Delivered"
                        },
                        "attributes-type": "FoodDeliveryLiveActivityAttributes",
                        "attributes": {
                            "restaurantName": "PizzaPlace",
                            "liveActivityData": {
                                "liveActivityID": "orderId1"
                            }
                        },
                        "alert": {
                            "title": "Order Delivered!",
                            "body": "Your pizza has arrived."
                        }
                    }
                }
            }
        }
    ]
}
Exemplo de JSON do Android
note
NOTE
Recupere metadados de execução no Android da mesma forma que no iOS: de message.feedback eventos no conjunto de dados de Feedback de mensagens do AJO. Para obter exemplos de consulta, consulte a seção Avançado: depuração via consultas do conjunto de dados.
O Android usa a extensão de mensagens do Adobe Experience Platform (AEP) de código aberto para SDK móvel.

Neste exemplo, seat e type são campos de metadados personalizados que contêm seus detalhes de reserva. Depois de acionar a atividade Live, recupere esses valores do conjunto de dados de feedback da atividade Live para associar os resultados da entrega ao seu registro de reserva.

code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "your-device-ECID",
            "namespace": "ECID",
            "executionMetadata": {
                "seat": "A-3",
                "type": "economy"
            },
            "context": {
                "requestPayload": {
                    "fcm": {
                        "notification_id": "flight-DL-321",
                        "timestamp": 1756984054,           // required - ordering key; must strictly increase on every event
                        "notification_channel_id": "live_updates_channel",
                        "priority": "PRIORITY_HIGH",
                        "when": 1756984054,              // optional - time shown on the notification (seconds)
                        "event_type": "start",             // start | update | end
                        "title": "Flight DL-321",
                        "body": "Boarding starts shortly",
                        "critical_text": "25 min",
                        "action_type": "DEEPLINK",
                        "action_uri": "myapp://flight/DL241",
                        "content_state": {                 // custom updating values specific to keys defined in every Live activity on the app
                            "custom_key_template_type": "progress",
                            "custom_key_journey_start": "DEL",
                            "custom_key_journey_progress": 10,
                            "custom_key_journey_end": "MUM"
                        }
                    }
                }
            }
        }
    ]
}

Vídeo tutorial

Descubra como configurar as atividades em tempo real do iOS com o Adobe Journey Optimizer para fornecer atualizações avançadas em tempo real na Tela de bloqueio do iPhone e no Dynamic Island.

AI Knowledge Reference

This section contains structured knowledge intended to support interpretation, retrieval, and question answering related to this topic.

For complete understanding, this information should be combined with the documentation on this page. Neither source is intended to stand alone; the page describes the feature, while this section provides additional context that helps disambiguate terminology, intent, applicability, and constraints.

  • TL;DR: This page explains how to build an API-triggered campaign in Journey Optimizer to remotely start, update, and end Live activities for individual users or audiences, and how to attach custom data to a profile using the optional executionMetadata field.

Intents:

  • Create an API-triggered campaign for Live activities, selecting API-triggered Marketing for audience-based campaigns or API-triggered Transactional for individual campaigns
  • Choose Live activity in the Actions section and select or create a configuration
  • Create a content experiment with treatments to measure performance
  • Activate the campaign and use the provided cURL request to trigger start, update, or end events
  • Attach custom data to a profile using the optional executionMetadata field for later retrieval from the Live activity feedback dataset

Glossary:

  • API-triggered Marketing: The campaign type used for audience-based campaigns (product-specific)
  • API-triggered Transactional: The campaign type used for individual campaigns (product-specific)
  • High Throughput: An option that should not be enabled for API-triggered Transactional Live activity campaigns (product-specific)
  • Live activity: The action chosen in the Actions section, tied to a selected or newly created configuration (product-specific)
  • executionMetadata: An optional field that attaches custom data to a profile, stored alongside the execution and retrievable from the Live activity feedback dataset (product-specific)
  • Live activity feedback dataset: The dataset from which stored executionMetadata values can be retrieved to match delivery results to your own records (product-specific)
  • event (iOS) / event_type (Android): The payload field whose values are start, update, or end

Guardrails:

  • For API-triggered Transactional campaigns, the High Throughput option should not be enabled.
  • executionMetadata is only available for API-triggered Transactional campaigns.
  • executionMetadata accepts only string keys and string values; convert any non-string value to a string before sending.
  • executionMetadata does not support personalization expressions, so any {{...}} expression is treated as literal text rather than resolved.
  • Each profile can carry up to 50 key/value pairs in executionMetadata (hard limit), with a combined size limit of 2 KB for all keys and values (hard limit). Metadata exceeding this limit is discarded, but the Live activity is still delivered.
  • In the iOS unitary payload example, most fields are mandatory; only requestId, dismissal-date, and alert are optional.

Terminology:

  • Canonical name: Live activity — Acronym: n/a — variants: Live activities
  • Synonyms: “Unitary use cases” = “individual campaigns (API-triggered Transactional)”
  • Synonyms: “Broadcast use cases” = “audience-based campaigns (API-triggered Marketing)”
  • Do not confuse: “API-triggered Marketing” (audience-based campaigns) ≠ “API-triggered Transactional” (individual campaigns)
  • Do not confuse: “start” ≠ “update” ≠ “end” (the values of the event field in iOS payloads and the event_type field in Android payloads)
  • Do not confuse: “dismissal-date” (optional; auto-removes the activity when event is end) ≠ “timestamp” (current epoch time)

FAQ:

  • Q: Which campaign type do I use for Live activities? — API-triggered Marketing for audience-based campaigns; API-triggered Transactional for individual campaigns.
  • Q: Should High Throughput be enabled for API-triggered Transactional? — No; for API-triggered Transactional, the High Throughput option should not be enabled.
  • Q: How do I trigger start, update, or end events after activation? — Use the provided cURL request as a template, update the sample payload with your specific data, and copy the Campaign ID into your payload.
  • Q: What is executionMetadata for? — Attaching your own custom data, such as an order ID, loyalty tier, or region code, to a profile; it is stored alongside the execution and retrievable from the Live activity feedback dataset. It is only available for API-triggered Transactional campaigns.
  • Q: What are the executionMetadata limits? — Up to 50 key/value pairs per profile with a combined 2 KB size limit; only string keys and values are accepted, and personalization expressions are not resolved. Metadata exceeding the limit is discarded, but the Live activity is still delivered.
recommendation-more-help
journey-optimizer-help