Guia de integração do PBA Web SDK

Resumo: Integre a AppsFlyer a sites usando o Web SDK para registrar e medir visitas, eventos, conversões e receitas.

5107_Infographic_Web_S2S_759x270_option1.jpg

Guia de usuário e integração do web SDK

  • A tag JavaScript do Web SDK:
    • faz parte da solução People-Based Attribution (PBA) para analisar as jornadas dos usuários em multi plataformas.
    • comunica as visitas e ações dos usuários no seu site à plataforma da AppsFlyer.
    • é um módulo de plug-in de site que não precisa de programação. É independente do sistema operativo e do browser do visitante do site. 
    • Tamanho  40-60Kb.
  • Implemente o Web SDK juntamente com o SDK mobile da AppsFlyer para registrar e mapear a atividade do usuário em seu aplicativo móvel e ambientes web.
  • Os eventos que ocorrem fora do site podem ser registados com a Web server-to-server events API (Web S2S)

Selecionar um code snippet

Escolha o snippet que corresponde ao seu tipo de integração e requisitos de segurança. Duas opções estão disponíveis:

  • Web SDK padrão: integração padrão.
  • Verificação avançada de SDK: uma integração aprimorada que inclui segurança da cadeia de suprimentos para o Web SDK. Use-a para adicionar uma camada extra de segurança contra comprometimento de CDN, sequestro de DNS e ataques intermediários (MiTM).

Importante!

Se você estiver fazendo a transição do Web SDK padrão para a verificação avançada do SDK, substitua o snippet existente pelo novo. O novo snippet não deve ser adicionado em conjunto com o snippet existente.

Web SDK padrão

Use esse snippet para implementar a integração do Web SDK padrão. Insira-o perto do topo da tag em todas as páginas onde você deseja que o SDK seja carregado.

Sem Smart Banners

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
  window.AF.plugins = {};

  // Inject SDK
  var o = document.createElement("script"),
      p = document.getElementsByTagName("script")[0];
  o.async = 1;
  o.src = "https://websdk.appsflyersdk.com?" + "st=pba&af_id=WEB_DEV_KEY";
  p.parentNode.insertBefore(o, p);
</script>

Com Smart Banners

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
  window.AF.plugins = {};

  // Inject SDK
  var o = document.createElement("script"),
      p = document.getElementsByTagName("script")[0];
  o.async = 1;
  o.src = "https://websdk.appsflyersdk.com?" + "st=pba,banners&af_id=WEB_DEV_KEY";
  p.parentNode.insertBefore(o, p);
  AF('banners', 'showBanner');
</script>

Verificação avançada de SDK

A verificação avançada de SDK adiciona segurança da cadeia de suprimentos ao Web SDK. Ela garante que o código executado nos navegadores dos seus usuários é exatamente o mesmo que a AppsFlyer publicou. O código-fonte do SDK em si é idêntico à integração padrão; apenas os mecanismos de entrega e verificação diferem.

A verificação avançada de SDK:

  • Adiciona uma camada extra de segurança contra comprometimento de CDN, sequestro de DNS e ataques intermediários (MiTM).
  • Adiciona aproximadamente 250ms ao tempo de carregamento do SDK.

Esse recurso é opcional. A integração padrão permanece totalmente disponível e é o padrão de mercado para analytics pixels de terceiros. A verificação avançada do SDK fornece uma camada adicional de proteção além do padrão.

Se o seu site impõe uma Política de Segurança de Conteúdo (CSP) usando nonce, consulte Política de Segurança de Conteúdo (CSP) em "Gerenciar privacidade" para acessar a variante nonce-extended do snippet.

Sem Smart Banners

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["pba"]
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Com Smart Banners

<script>
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["banners", "pba"]
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Integrar o web SDK no site

Instalação e integração

Considerações e ações necessárias

Checklist da integração
Para garantir o registro das visitas e dos eventos, o web SDK deve ser instalado em todas as páginas do site. 
Coloque o snippet code que você selecionou acima para que ele carregue o mais cedo possível no escopo da página. Para isso, coloque o código perto do topo da tag do cabeçalho.

Se você estiver integrando o SDK usando o Google Tag Manager (GTM):

  • Certifique-se de que o SDK é carregado uma vez por carregamento de página.
  • Configure o SDK para ativar assim que a página carregar usando a priorização GTM.
Você pode implementar o Web SDK com ou sem Smart Banners. Siga as instruções relevantes nas seções a seguir.

Requisitos obrigatórios de integração

  • Gravação de visita
  • Gravação de evento
  • Definir o Customer User ID (CUID) : Se você não tiver um CUID, entre em contato com seu CSM para conversar sobre alternativas. 

Valide a integração usando a ferramenta de teste

Antes de começar:

  • Verifique com o profissional de marketing se o pacote de marca foi criado. 
  • Para obter orientações adicionais, consulte o guia de integração de PBA.
  • Considere: se você já possui o Web SDK específico para Smart Banners, remova-o e substitua-o pelo Web SDK para Smart Banners e PBA. Não adicione somente o Web SDK para PBA. 

Faça o seguinte:

  • Obter a chave de desenvolvimento web do web SDK. Atenção! Esta não é a mesma chave usada pelos aplicativos mobile.
    • Para obter a chave do desenvolvedor web: 
      1. Na AppsFlyer, no menu superior, selecione a aba Meus Aplicativos .
      2. Clique em Visualizar pacotes de marca.
      3. Copie a chave de desenvolvimento web necessária . (WEB_DEV_KEY)
  • Se você implementar Smart Banners, obtenha a chave Smart Banner. 
    • Para obter a chave Smart Banner:
      1. Na AppsFlyer, no menu lateral, vá para Engajamento> Web-to-app > Smart Banners.
      2. Copie a chave do Smart Banner necessária. 
  • Permissões para adicionar scripts a etiquetas de cabeçalho no site.
  • Se você usar o Google Tag Manager, ele deve estar integrado no site.

Proceda à integração do SDK web usando uma das seguintes opções. 

Nativo  Google Tag Manager  Adobe Launch Tag Manager 

Trecho de código JavaScript

Integrar o SDK da web usando um dos seguintes métodos. 

Para instalar o web SDK sem Smart Banners:

  1. Repita o procedimento a seguir em todas as páginas do seu site.
  2. No trecho de código a seguir, substitua o WEB_DEV_KEY usando a chave especificada nos pré-requisitos.
  3. Cole o code snippet que você selecionou acima na head tag do seu site. Cole-o perto do topo da etiqueta de cabeçalho.

Para implementar o Web SDK com Smart Banners:

  1. Repita o procedimento abaixo em todas as páginas do seu site.
  2. No code snippet que você selecionou acima, substitua WEB_DEV_KEY e YOUR_BANNER_KEY usando as chaves especificadas nos pré-requisitos.
  3. Cole esse code snippet na head tag do site. Cole-o perto do topo da etiqueta de cabeçalho.

Certifique-se de que o SDK está funcionando

Depois de instalado, verifique se o Web SDK da AppsFlyer é chamado pelo navegador do visitante e se as mensagens estão sendo enviadas. Isto é feito examinando a conexão de rede de mensagem relatada no navegador.

Para garantir que o SDK é carregado e está funcionando:

  1. Acesse o site.
  2. Abra as ferramentas de desenvolvimento do navegador.

    WebSDK_us-en.jpg

  3. Vá para a aba (A) Network.  
  4. Atualize a página.
  5. Filtre por (B) wa.appflyer.
  6. Selecione a mensagem events (C).
  7. Na aba de cabeçalhos, (D) certifique-se de:
    • O URL de solicitação é wa.appsflyer.com/events.
    • parâmetro de consulta site_id= WEB_DEV_KEY.
    • (E) o código de status é 200.
  8. Verifique se o valor de site_id é igual ao valor de WEB_DEV_KEY nas configurações do pacote de marcas:
    1. Na AppsFlyer, no menu lateral, selecione Configurações > Pacotes de marca.
    2. Clique na chave Web dev, o que permite copiar a chave.
    3. Cole a chave em qualquer local (nova aba do navegador, bloco de notas) para exibir a chave.
    4. Verifique se o site_id e WEB_DEV_KEY correspondem. 
  9. Certifique-se de que o SDK é carregado apenas uma vez. O carregamento múltiplo de SDK pode fazer com que o SDK deixe de funcionar.

Eventos de envio opt-in/opt-out

5578-VistiorPrivacyOptIn_us-en.png

O Web SDK envia dados de eventos do visitante para a AppsFlyer. É possível controlar, parar ou iniciar o envio de eventos, conforme descrito nesta secção. 

Considere:

  • Definição do estado inicial do SDK: Determina se o SDK envia eventos ao carregar inicialmente a página web ou se o SDK tem de esperar até que seja dado um comando explícito para começar a enviar eventos. A definição está contida no trecho da web.
  • Controle explícito: Use para parar ou iniciar o envio de eventos. Por exemplo, se você implementar banners de opt-in/opt-out de dados (também conhecidos como banners de consentimento de cookies), integre os comandos explícitos nos controlos do banner para iniciar e parar o envio de eventos. O controle explícito tem prioridade sobre a definição do estado inicial do SDK e usa cookies primários persistentes com as seguintes características:
    • Definido no domínio do site.
    • Expira após um período definido pelo Web SDK ou conforme determinado pelo navegador. Após a expiração do cookie, o Web SDK reverte para a configuração do estado inicial.
    • O cookie do Web SDK não causa interferência e está sempre sujeito às configurações de cookies específicas do navegador.
       

Definição do estado inicial do SDK

Configuração Trecho necessário
[Padrão] Enviar eventos

Faça a seguinte alteração no trecho do Web SDK. Se necessário, adicione o parâmetro measurementStatus:

Defina measurementStatus=true

{pba: {webAppId: "********-****-****-*****************", measurementStatus:true}

Não envie eventos

 

Faça a seguinte alteração no trecho do Web SDK. Se necessário, adicione o parâmetro measurementStatus:

Defina measurementStatus=false

{pba: {webAppId: "********-****-****-*****************", measurementStatus:false}

Controle explícito:

Opção Comando
Começar a enviar eventos (opt-in) window.AF_SDK.PLUGINS.PBA.enableMeasurement()
Pare de enviar eventos (opt-out) window.AF_SDK.PLUGINS.PBA.disableMeasurement()

Implementar uma política de Política de Segurança de Conteúdo (CSP)

Se o seu site exige protocolos rigorosos de segurança e de privacidade de dados, use os seguintes mecanismos para configurar a maneira como o Web SDK interage com seu ambiente e seus dados.

Política de Segurança de Conteúdo (CSP)

Se o seu site exige que o JavaScript seja protegido por uma CSP, o Web SDK é compatível com duas abordagens diferentes, a depender da configuração da sua CSP.

  • CSP usando self: Adicione https://websdk.appsflyersdk.com à sua lista de permissões script-src. Isso funciona tanto para o Web SDK padrão quanto para a Verificação avançada do SDK.
  • CSP usando nonce: Se sua política usar script-src 'nonce-...', você pode usar a variante nonce-extended da Verificação avançada do SDK. Esse mecanismo encaminha o nonce para todas as três tags de script exigidas pelo processo de verificação. Substitua {{CSP_NONCE}} pelo valor nonce gerado pelo servidor.

A tabela abaixo mostra quais políticas CSP são compatíveis com a variante nonce-extended.

Política Funciona? Observações
script-src 'self' Não Origem de CDN externa não permitida; script inline também é bloqueado.
script-src 'self' https://websdk.appsflyersdk.com Parcial Permite carregador e SDK, mas o script de configuração inline ainda está bloqueado.
script-src 'nonce-...' https://websdk.appsflyersdk.com Sim Nonce cobre script inline e carregador; a tag SDK recebe nonce encaminhado pelo carregador.
script-src 'nonce-...' 'strict-dynamic' Sim (recomendado) Nonce cobre script inline e carregador; strict-dynamic propaga confiança para a tag SDK inserida dinamicamente. Nenhuma origem de CDN necessária na lista de permissões.
Compatibilidade com a política CSP

Verificação avançada de SDK com snippets de nonce CSP

Sem Smart Banners

<script nonce="{{CSP_NONCE}}">
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config — nonce forwarded to the injected SDK <script> tag
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["pba"],
    nonce: "{{CSP_NONCE}}"
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.nonce = "{{CSP_NONCE}}";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Com Smart Banners

<script nonce="{{CSP_NONCE}}">
  // Queue — buffers AF() calls until the SDK is ready
  window.AppsFlyerSdkObject = "AF";
  window.AF = window.AF || function() {
    (window.AF.q = window.AF.q || []).push([Date.now()].concat(Array.prototype.slice.call(arguments)));
  };
  window.AF.id = window.AF.id || { pba: { webAppId: "WEB_DEV_KEY" }, banners: { key: "YOUR_BANNER_KEY" } };
  window.AF.plugins = {};

  // Manifest loader config — nonce forwarded to the injected SDK <script> tag
  window.AF_LOADER_CONFIG = {
    baseUrl: "https://websdk.appsflyersdk.com",
    plugins: ["banners", "pba"],
    nonce: "{{CSP_NONCE}}"
  };

  // Inject manifest loader
  var loaderScript = document.createElement("script");
  loaderScript.src = "https://websdk.appsflyersdk.com/manifestLoader.v1.js";
  loaderScript.integrity = "sha384-Uncl2YwvjFpFz0PwEfl3bL/0JsOQcDFEpwXHzcN0MBavn9vvFEx5pZxADTq8h+CV";
  loaderScript.crossOrigin = "anonymous";
  loaderScript.nonce = "{{CSP_NONCE}}";
  loaderScript.async = true;
  document.head.appendChild(loaderScript);
</script>

Descartar parâmetros de consulta

Se seus parâmetros de consulta contiverem dados que você não deseja que a AppsFlyer registre, você poderá instruir a plataforma AppsFlyer a descartar alguns ou todos os parâmetros de consulta. Ao fazer isso, eles não ficam disponíveis em dados brutos ou relatórios.  

Você pode implementar os métodos descritos em relação a URLs, referenciadores e header_referer.

Consultar opções de descarte

Método Descrição 
Descartar todos os parâmetros de consulta Anexe af_url=true ao url
Descartar parâmetros de consulta especificados

Ao definir uma máscara de parâmetros de consulta, você especifica quais parâmetros serão descartados.  Defina a máscara de descarte usando af_url_mask=param onde param é o nome do parâmetro.

Exemplo: 

URL com máscara:

param1=value1&param2=value2&param3=value3&af_url_mask=param2;param3

URL após descartar:

param1=value1&af_url_mask=param2;param3

Princípios do registro de eventos

Eventos de conversão e padrão

  • Os eventos do usuário são registrados pelo SDK, que envia o evento para a plataforma AppsFlyer.
  • Usando a lista de eventos de conversão, definida pelo profissional de marketing, a AppsFlyer faz uma divisão entre eventos padrão e de conversão.
  • Os dados dos eventos de conversão estão disponíveis nos painéis de controle de PBA.
  • Os dados de conversão e eventos padrão estão disponíveis nos relatórios de dados brutos.

Eventos de conversão

  • Os eventos de conversão fornecem insights sobre os seus esforços comerciais e de marketing. Os eventos de conversão incluem compras, downloads, inscrições e assinaturas.
  • O PBA atribui os eventos de conversão à fonte de media que levou o usuário a visitar o site.
  • Ao identificar o canal de mídia atribuído, é possível medir e diferenciar a qualidade dos usuários trazida por diferentes canais de mídia.
  • Os eventos de conversão são usado para registrar as receitas e calcular o ROI.
  • Use-os para comparar o orçamento de anúncios para canais de mídia específicas com as receitas geradas pelos usuários que provêm desses canais de mídia.

Eventos padrão

  • Os eventos padrão são usados para validar a jornada do usuário e os funis que geram conversões.
  • Use-os para medir a atividade do usuário e destacar os canais de mídia que atraem usuários engajados.
  • Registre a atividade do usuário para marcar os usuários para campanhas de reengajamento.

Eventos de registro

Acione o Web SDK para registrar eventos quando determinadas condições são cumpridas, por exemplo, quando uma página inicial é carregada ou quando os usuários interagem com elementos do site. Ver exemplos de registro de eventos.

Identificação de usuários através do ID de usuário do cliente (CUID)

  • Os usuários da web são identificados na AppsFlyer usando o CUID único que você atribui a eles. Normalmente, o CUID é gerenciado pelos seus servidores backend. 
  • Use o mesmo valor CUID que usa no ambiente móvel. Desta forma, é possível ter uma visão holística da atividade do usuário em multi plataformas. A função no SDK mobile é setCustomerUserId (iOS, Android, Unity).
  • Para definir o CUID no Web SDK:
    • Defina o CUID no primeiro momento em que tiver acesso a ele. Na maioria das vezes, isto significa que é necessário esperar que o usuário se identifique através do login ou da inscrição.
    • Acione a chamada JavaScript para setCustomerUserId() como mostrado no exemplo a seguir.
      Atenção! Envie o CUID como uma string mesmo que seja um número. Não se esqueça das aspas.
  • Se você implementar a Web S2S, talvez precise notificar o PBA quando associar um CUID a um ID de visitante da web no seu backend.
  • Os CUID não devem conter informações pessoais diretamente identificáveis , como um número de telefone ou um endereço de email.

Exemplo: definir o CUID

// Associate all current user web events to distinct ID 663274 
AF('pba', 'setCustomerUserId' , '663274')

Parâmetros de eventos do Web SDK

Nome do parâmetro Obrigatório Descrição
eventType Sim

Tipo de evento

Formato: String

Preencha sempre este parâmetro com EVENT.

Exemplo: eventType: "EVENT"

eventName Sim

Nome do evento

Formato: String

Exemplo: Compra, Assinatura

eventCategory  Não Este parâmetro está descontinuado e será removido do sistema em data a ser anunciada. No lugar dele, use o parâmetro eventValue.

eventLabel 

 

Não Este parâmetro está descontinuado e será removido do sistema em data a ser anunciada. No lugar dele, use o parâmetro eventValue.
eventRevenue Não

Receita atribuída a um evento de conversão

Formato: Número flutuante

eventRevenueCurrency Não

Moeda da receita

  • Código de moeda ISO 4217 de 3 caracteres.
  • Predefinição: USD

Formato: String

eventValue Não
Mapa de parâmetros de eventos que descrevem o evento. Use este parâmetro para enviar eventos avançados in-app como SKU do produto, preço do item de linha. 
Formato: JSON

Exemplo: Para enviar o SKU ABC123, de cor azul e preço unitário de $3,99

{"sku": "ABC123", “color": "blue", "unit_price":3.99,"currency": "USD"} 

Limitação: 1000 caracteres. Não exceda este valor, será truncado. 

Registrar cenários de eventos

Exemplo de evento

// purchase event of shoes with associated revenue
AF('pba', 'event', {eventType: 'EVENT', eventName: 'purchase', eventRevenue: 12, eventValue: {"key1": 123, "key2": "name"}});

Os eventos que você envia dependem da natureza do seu aplicativo web. Por exemplo, um aplicativo de loja online requer um conjunto de eventos diferente do de um canal de notícias. Veja os cenários que a seguir para ter uma noção dos eventos que você deve enviar e quando.

Loja online

Suponha que está gerenciando uma loja online. Alguns eventos padrão que talvez você queira registrar são: 

  • Pesquisa: evento padrão
  • Adicionar ao carrinho: evento padrão
  • Remover do carrinho: evento padrão
  • Compra: evento de conversão

Canal de notícias

Suponhamos que está gerenciando um canal de notícias. Alguns eventos que talvez você queira registrar são:

  • Inscrição: evento de conversão
  • Assinatura de compras: evento de conversão

Garantir o envio de eventos

Esta parte destina-se a desenvolvedores web.

Teste a integração do Web SDK do PBA: visualize eventos de teste em tempo real.

Para garantir que os eventos sejam enviados para a AppsFlyer:

  1. Abra o site.
  2. Abra as ferramentas de desenvolvimento do navegador.
  3. Mude para a aba Network.
  4. Acione o evento.
  5. Filtrar por mensagem.

    pba_af_event.png

  6. Procure uma solicitação de network que comece com o destino wa.appsflyer.com (veja a imagem abaixo).
  7. Certifique-se de que:
    1. O código de status é 200.
    2. A carga útil do pedido está alinhada com os parâmetros do evento.

Exemplos

Eventos de registro

O código fornecido serve apenas para fins ilustrativos. Não use este código tal como está. 

  • Pressupostos: O Web SDK já está carregado pela página no momento em que o evento é enviado.
  • Os cenários de exemplo contêm o código para registrar eventos quando: 
    • uma página inicial é carregada.
    • os usuários interagem com o site.
Registro de eventos nativos Registro de eventos do Tag Manager

Registro de eventos quando uma página inicial é carregada

  • Você tem uma página de assinatura de newsletters e pretende registrar as assinaturas.
  • Você também pode criar uma página de agradecimento e redirecionar os usuários para essa página depois que eles se inscrevem.
<html>
    <head>
        <!-- Assume that the server returns a response with details about the newly subscribed user -->
        <!-- Alternatively, you can extract data from localStorage or cookies,
            in case data was set in either of them during the subscription process
        -->
        <script>window.onload = function(){
            AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category': 'holiday_promotion', eventValue: {'label' : 'newspaper'}, eventName: 'subscription',}); } </script> </head> <body> <h1>Thank You for Subscribing to Our Newsletter</h1> </body> </html>
  • O código anterior contém uma página HTML básica. A página web precisa carregar o Web SDK para que você possa enviar eventos.
  • Depois que a página é carregada, após o usuário ser redirecionado para ela, o método de carregamento da janela chama o método AF() para enviar o evento de assinatura para a AppsFlyer.

Registro de eventos quando os usuários interagem com o site

  • Você tem um site de eCommerce e deseja registrar eventos de checkout.
  • Quando o usuário clica no botão de checkout, o Web SDK envia um evento para a AppsFlyer.
<html>
<head>
    <!-- Assume that data about products in the shopping cart
    is stored in localStorage -->
    <script>
        window.onload = function () {
            document.getElementById('checkout').addEventListener('click', function () {
                AF('pba', 'event', {eventType: 'EVENT', eventValue: {'category' : 'holiday_promotion'}, eventName: 'checkout'});
            });
        }
    </script>
</head>
<body>
    <h1>Shopping Cart</h1>
    <h2>Shirt</h2>
    <p>
        <ul>
            <li>Color: Blue</li>
            <li>Quantity: 2</li>
            <li>Price: $20</li>
        </ul>
    </p>
    <h2>Pants</h2>
    <p>
        <ul>
            <li>Color: Black</li>
            <li>Quantity: 3</li>
            <li>Price: $15</li>
        </ul>
    </p>
    <button id='checkout'>Checkout</button>
</body>
</html>

O código anterior mostra uma página HTML básica. A página web precisa carregar o Web SDK para que você possa enviar eventos.

  • Depois que a página é carregada, ela vincula um ouvinte de clique ao botão Checkout.
  • Quando o usuário clica no botão Checkout, a função de retorno de chamada:
    • busca dados de localStorage.
    • chama o método AF() e passa dados para ele.
  • O método AF() envia o evento para a AppsFlyer.
  • Certifique-se de que a tag das funções do Web SDK seja carregada antes de o evento ser acionado.
  • Não envie caracteres especiais nos valores dos eventos, como símbolos de moeda no valor da receita.
  • As strings de valor devem ter menos de 50 caracteres.

Definir o ID de usuário do cliente após a inscrição

O código fornecido nestes exemplos é apenas para referência. Não use este código tal como está. Se você não tiver certeza de como usar este código, consulte o seu desenvolvedor Web. 

Pressuposto: O Web SDK é carregado pela página antes de o evento ser enviado; não carregue o SDK novamente.

Cenário do usuário:

  • Um usuário inscreve-se no seu site.
  • O código do site recolhe os dados do usuário e envia-os para o seu servidor.
  • O servidor gera um CUID único para o usuário.
  • Na página de agradecimento após o registro, você consulta o servidor para obter o novo CUID.
  • Usando a resposta do servidor, você define o CUID da AppsFlyer usando o método setCustomerUserId() do Web SDK.
Google Tag Manager Nativo

Crie uma página de inscrição:

<html>
<head>
    <!-- The Web SDK script loads first -->
    <script>
!function(t,e,n,s,a,c,i,o,p){t.AppsFlyerSdkObject=a,t.AF=t.AF||function(){
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))},
t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1,
o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""),
p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}})
    </script>
    <script>
        };
    // This function stores the user email sent to the server after the user reaches the thank you page
    // The response from the server is a unique CUID that should be set using the web SDK setCustomerUserId method
        function storeUserEmail (){
            var userEmail = document.getElementById('email').value;
            localStorage.setItem('user_email', userEmail);
        }
    </script>
</head>
<body>
    <h1>Sign Up</h1>
    <form onsubmit="storeUserEmail()" action="/signup" method="post">
        <div><label>Name</label>
            <input type="text" name="name" id="name"></div>
        <br />
        <div> <label>Email</label>
            <input type="email" name="email" id="email"></div>
        <br />
        <input type="submit" id="submit">
    </form>
</body>
</html>

O código anterior acima é um formulário de registro simples. Quando o formulário é enviado, o e-maill é armazenado em localStorage. Quando o usuário chega à página de agradecimento, o endereço de e-mail é enviado para o servidor para gerar o CUID único para o endereço de e-mail.

Configure uma página de agradecimento para os usuários que se inscrevem:

<html>
<head>
    <script>
!function(t,e,n,s,a,c,i,o,p){t.AppsFlyerSdkObject=a,t.AF=t.AF||function(){
(t.AF.q=t.AF.q||[]).push([Date.now()].concat(Array.prototype.slice.call(arguments)))},
t.AF.id=t.AF.id||i,t.AF.plugins={},o=e.createElement(n),p=e.getElementsByTagName(n)[0],o.async=1,
o.src="https://websdk.appsflyersdk.com?"+(c.length>0?"st="+c.split(",").sort().join(",")+"&":"")+(i.length>0?"af_id="+i:""),
p.parentNode.insertBefore(o,p)}(window,document,"script",0,"AF","pba",{pba: {webAppId: "WEB_DEV_KEY"}})
    </script>
    <script>
        // Using the fetch API to send the user email to the server
        // and get the unique user id in return	
        window.onload = function () {
            var userEmail = localStorage.getItem('user_email');
            fetch('users/' + userEmail).then(function (res) {
                   res.text().then(function (id) {
                    console.log(id);
                    AF('pba', 'setCustomerUserId', id);
                });
            });
        }  </script> 
     </head> 
     <body> 
        <h1>Thank You for Signing Up!</h1> 
     </body> 
</html>

O código usa a API fetch. Ele envia ao servidor o endereço de e-mail inserido pelo usuário. Partindo do princípio de que o servidor cria um usuário com um CUID único aquando da inscrição, o envio do endereço de e-mail para o servidor destina-se a receber um CUID único. O servidor responde com um CUID único e este CUID único é o valor que é passado com o método setCustomerUserId.

A função setCustomerUserId pode ser enviada em qualquer fase do fluxo do utilizador, por exemplo, após o início de sessão e a inscrição do usuário. A AppsFlyer usa o CUID mais recente enviado para atualizar o usuário atualmente observado para pontos de contacto e eventos passados ou futuros.

Use o mesmo valor de CUID que você usa na função setCustomerUserId no app mobile (consulte setCustomerUserId mobile para: iOS, Android e Unity)

Informações adicionais

Cookies Web SDK

Os cookies listados na tabela que a seguir são definidos ou usados pelo Web SDK no seu site. 

Na tabela são utilizadas as seguintes abreviaturas:

  • AMP: Páginas AMP (accelerated mobile pages) 
  • CDN: Rede de distribuição de conteúdo
  • 3PC: Cookies de terceiros
Nome do cookie   Domínio Lifespan Quando usado Detalhes
afUserid Domínio do seu site 395 dias não AMP Identifique um usuário no contexto de eventos de carregamento e navegação da web
AF_SYNC Domínio do seu site 1 semana não AMP
  • Sinalizador indicando que um identificador de usuário final está definido
  • Ele é usado para reduzir o tempo de carregamento do site
af_id appsflyer.com 395 dias não AMP quando 3PC permitido Identifique um usuário no contexto de eventos de inicialização de aplicativo e navegação  
af_id onelink.me 395 dias não AMP quando 3PC permitido Vincule compromissos de banner, compromissos de onelink ou ambos a eventos de lançamento de aplicativos.
amp-afUserid AMP CDN ou domínio do seu site 1 ano Para serviço de páginas por AMP  
AF_DEFAULT_MEASUREMENT_STATUS Domínio do seu site 395 dias Armazena o estado de consentimento do PBA. Previne a operação do SDK até que o consentimento do usuário seja concedido. Não definido por padrão — usado apenas quando gating de consentimento configurado. não AMP

Notas de versão do Web SDK

Data  Versão Observações
01/07/2021 1.0 Descartar parâmetros de consulta
01/06/2021 1.0 Implementar uma Política de Segurança de Conteúdo (CSP) 
31/08/2020 1.0 Adicionada funcionalidade de optar por participar e optar por não participar
16/04/2020 1.0 A função customerUserId() substitui o evento IDENTIFY para enviar o CUID exclusivo
30/07/2020 1.0
  • Controle explícito de início/paragem para enviar eventos
  • Alterar o estado inicial predefinido

Descontinuações

  • Um aviso de descontinuação informa sobre a nossa intenção de parar a compatibilidade com um recurso ou método. A caraterística ou método continua a funcionar até à sua data de expiração.
  • Encare os avisos de descontinuação como uma oportunidade para fazer alterações no seu código.
Data da descontinuação Data da desativação Detalhes
16/04/2020 A ser anunciado

Método obsoleto: Envio do ID de usuário do cliente (CUID) no parâmetro do evento customUserId com o eventType definido como "IDENTIFY"  

Método atual: Envie o CUID usando a função setCustomerUserId() .