Encontros do SDK Engage: instruções técnicas de integração de terceiros

O Google está criando uma plataforma no dispositivo que organiza os apps dos usuários por categoria e possibilita uma nova experiência imersiva para consumo e descoberta de conteúdo personalizado de apps. Essa experiência em tela cheia oferece aos parceiros de desenvolvimento a oportunidade de mostrar os melhores conteúdos em um canal dedicado fora do app.Este guia contém instruções para os parceiros desenvolvedores integrar o conteúdo de namoro usando o SDK Engage para preencher esse novo área de superfície.

Detalhe de integração

Terminologia

Essa integração inclui os três tipos de cluster a seguir: recomendação, Destaque e Continuação.

  • Os clusters de recomendação mostram sugestões de encontros personalizados de um parceiro desenvolvedor individual. Essas recomendações podem ser personalizado para o usuário.

    • Um cluster de recomendação pode ser composto de ArticleEntity, PersonEntity, ou EventEntity, mas não é uma combinação de diferentes tipos de entidade.

    As recomendações têm a seguinte estrutura:

    • Cluster de recomendação: uma visualização de interface que contém um grupo de recomendações do mesmo parceiro do desenvolvedor.

    • Entidade: um objeto que representa um único item em um cluster. Isso oferece algumas entidades que seriam exibidas usando o Cluster de recomendação:

      • ArticleEntity: ArticleEntity representa uma recomendação de conteúdo baseado em texto relacionado a encontros. Item de ArticleEntity permite que os desenvolvedores forneçam vários tipos de conteúdo de texto e imagem com mais metadados para articular as informações aos usuários.

        Figura 1:interface mostrando uma única ArticleEntity no cluster de recomendações.
      • PersonEntity: PersonEntity representa uma pessoa. A pode ser destacar uma pessoa no anúncio de namoro clientes em potencial.

        Figura 2:interface mostrando uma única PersonEntity em Cluster de recomendações.
      • EventEntity: EventEntity representa um evento que acontece na futuro. A hora de início do evento é uma informação essencial precisa ser comunicada aos usuários.

        Figura 3:interface mostrando uma única EventEntity no cluster de recomendações.
  • O cluster de continuação mostra o conteúdo que os usuários interagiram recentemente com vários parceiros de desenvolvimento em um único grupo de interfaces. Cada parceiro de desenvolvimento poderão transmitir no máximo 10 entidades na continuação cluster.

    Seu conteúdo de continuação pode ter a seguinte estrutura:

    • ArticleEntity: ArticleEntity representa uma recomendação de conteúdo baseado em texto relacionado a encontros. Essa entidade pode ser usada para representam artigos de notícias inacabados ou outro conteúdo que o usuário continuar consumindo de onde pararam.

      Figura 6. Interface mostrando uma única ArticleEntity em um cluster de continuação.
    • EventReservaEntity: a EventReservaEntity representa reserva para um evento e ajuda os usuários a monitorar eventos reservas para eventos de encontros e encontros.

      Figura 8. Interface mostrando um único EventReservaEntity em um cluster de continuação.
  • O cluster de destaque é uma visualização de interface que mostra o herói escolhido. GenericFeaturedEntity de vários parceiros de desenvolvedores em um único grupo de interfaces. Há um único cluster "Destaques", que aparece perto do topo IU, com um posicionamento prioritário acima de todos os clusters de recomendação. Cada o parceiro do desenvolvedor pode transmitir uma única entidade de um digitar em destaque, com muitas entidades (possivelmente de tipos diferentes) de vários desenvolvedores de apps no cluster "Em destaque".

    • GenericFeaturedEntity: a GenericFeaturedEntity é diferente da O item de recomendação nesse item em destaque precisa ser usado para um único principal conteúdo de desenvolvedores e deve representar o conteúdo conteúdo importante que será interessante e relevante para os usuários.

      Figura 12:interface mostrando um FeaturedCluster com um lista de GenericFeaturedEntity

Pré-trabalho

Nível mínimo da API: 19

Adicione a biblioteca com.google.android.engage:engage-core ao app:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.2'
}

Resumo

O design é baseado na implementação de uma serviço vinculado.

Os dados que um cliente pode publicar estão sujeitos aos seguintes limites para diferentes tipos de clusters:

Tipo de cluster Limites de cluster Limites mínimos de entidades em um cluster Limites máximos de entidades em um cluster
Clusters de recomendação No máximo 5 Pelo menos 5 No máximo 25 (ArticleEntity, PersonEntity ou EventEntity)
Cluster de continuação No máximo 1 Pelo menos 1 No máximo 10 (ArticleEntity ou EventReservationEntity).
Cluster de destaque No máximo 1 Pelo menos 1 No máximo 10 (GenericFeaturedEntity)

Etapa 1: fornecer dados da entidade

O SDK definiu entidades diferentes para representar cada tipo de item. Apoiamos as seguintes entidades para a categoria Encontros:

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

As tabelas abaixo descrevem os atributos e os requisitos disponíveis para cada tipo.

GenericFeaturedEntity

Atributo Requisito Descrição Formato
Action Uri Obrigatório

Link direto para a entidade no app do provedor.

Observação: é possível usar links diretos para atribuição. Consulte estas perguntas frequentes

URI
Poster images Obrigatório

Mostraremos apenas uma imagem quando várias imagens forem fornecidas. A proporção recomendada é de 16:9

Observação:caso seja fornecido um crachá, deixe um espaço seguro de 24 dps nas partes de cima e de baixo da imagem.

Consulte as orientações em Especificações de imagem.
Título Opcional Título da entidade.

Texto livre

Tamanho de texto recomendado: 50 caracteres

Descrição Opcional

Um único parágrafo de texto para descrever a entidade.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado: 180 caracteres

Lista de legendas Opcional

Até três legendas, cada uma sendo uma linha de texto.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado para cada subtítulo: máximo 50 caracteres

Selos Opcional

Cada selo é um texto livre (máximo de 15 caracteres) ou uma imagem pequena.

Tratamento especial de UX na parte superior da imagem/vídeo, por exemplo, como selo sobrepor na imagem

  • "Atualização em tempo real"
  • Duração da leitura do artigo
Selo - Texto Opcional

Título do selo

Observação:é preciso enviar um texto ou uma imagem para o selo.

Texto livre

Tamanho de texto recomendado: no máximo 15 caracteres

Selo - Imagem Opcional

Imagem pequena

Tratamento especial de UX, por exemplo, como sobreposição de selo na imagem/vídeo miniatura.

Observação:é necessário usar texto ou imagem para receber o selo.

Consulte as orientações em Especificações de imagem.
Categorias de Conteúdo Opcional Descreva a categoria do conteúdo da entidade.

Lista de tipos enumerados

Consulte a seção Categoria de conteúdo. para orientação.

ArticleEntity

Atributo Requisito Descrição Formato
Action Uri Obrigatório

Link direto para a entidade no app do provedor.

Observação: é possível usar links diretos para atribuição. Consulte estas perguntas frequentes

URI
Título Obrigatório Título da entidade.

Texto livre

Tamanho de texto recomendado: máximo de 50 caracteres

Poster images Opcional

Mostraremos apenas uma imagem quando várias imagens forem fornecidas. A proporção recomendada é de 16:9

Observação:a imagem é altamente recomendada. Se um selo for fornecido, garanta um espaço seguro de 24 dps nas partes superior e inferior do imagem

Consulte as orientações em Especificações de imagem.
Fonte: título Opcional O nome do autor, organização ou informante

Texto livre

Tamanho de texto recomendado: menos de 25 caracteres

Origem: imagem Opcional Uma imagem da fonte, como o autor, a organização, o repórter Consulte as orientações em Especificações de imagem.
Descrição Opcional

Um único parágrafo de texto para descrever a entidade.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado: 180 caracteres

Lista de legendas Opcional

Até três legendas, cada uma sendo uma linha de texto.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado para cada subtítulo: máximo 50 caracteres

Selos Opcional

Cada selo é um texto livre (máximo de 15 caracteres) ou uma imagem pequena.

Tratamento especial de UX na parte superior da imagem/vídeo, por exemplo, como selo sobrepor na imagem

  • Por exemplo, "Atualização em tempo real"
  • Por exemplo, a duração da leitura do artigo
Selo - Texto Opcional

Título do selo

Observação:é preciso enviar um texto ou uma imagem para o selo.

Texto livre

Tamanho de texto recomendado: no máximo 15 caracteres

Selo - Imagem Opcional

Imagem pequena

Tratamento especial de UX, por exemplo, como sobreposição de selo na imagem/vídeo miniatura.

Observação:é necessário usar texto ou imagem para receber o selo.

Consulte as orientações em Especificações de imagem.
Horário de publicação do conteúdo Opcional Carimbo de data/hora da época em milissegundos em que o conteúdo foi publicados / atualizados no app. Carimbo de data/hora da época em milissegundos
Last Engagement Time Obrigatório sob certas condições

Carimbo de data/hora da época em milissegundos em que o usuário interagiu dessa entidade da última vez.

Observação: este campo será obrigatório se esta entidade fizer parte de o cluster de continuação.

Carimbo de data/hora da época em milissegundos
Porcentagem de progresso Obrigatório sob certas condições

A porcentagem do conteúdo total consumido pelo usuário até o momento.

Observação: este campo será obrigatório se esta entidade fizer parte de o cluster de continuação.

Um valor inteiro entre 0 e 100.
Categorias de Conteúdo Opcional Descreva a categoria do conteúdo da entidade.

Lista de tipos enumerados

Consulte a seção Categoria de conteúdo. para orientação.

PersonEntity

Atributo Requisito Descrição Formato
Action Uri Obrigatório

Link direto para a entidade no app do provedor.

Observação: é possível usar links diretos para atribuição. Consulte estas perguntas frequentes

URI
Perfil - Nome Obrigatório Nome, ID ou identificador do perfil, por exemplo, "João Silva", "@EquipePixel" etc.

String

Tamanho de texto recomendado: máximo de 50 caracteres

Perfil: avatar Obrigatório

Foto do perfil ou imagem do avatar do usuário.

Observação:precisa ser uma imagem quadrada de 1:1.

Consulte as orientações em Especificações de imagem.
Perfil - Texto adicional Opcional Texto livre, como o identificador do perfil.

Texto livre

Tamanho de texto recomendado: máximo de 15 caracteres

Perfil - Imagem adicional Opcional Imagem pequena como um selo de autenticidade. Consulte as orientações em Especificações de imagem.
Imagem de cabeçalho Opcional

Representa a imagem do cabeçalho. Precisa ser diferente da imagem do perfil. Pode ser usado se houver uma imagem adicional para ajudar a destacar o pessoa gosta do trabalho dela.

Observação:a imagem precisa ter a proporção 16:9. Se um selo for fornecido, garantir um espaço seguro de 24 dps nas partes de cima e de baixo da imagem.

Consulte as orientações em Especificações de imagem.
Popularidade - Contagem Opcional

Indique o número de seguidores ou o valor da popularidade, por exemplo: "3,7 M.".

Observação:se os valores "Contagem" e "Valor de contagem" forem informados, A contagem será usada

String

Tamanho de texto recomendado: máximo de 20 caracteres por contagem + rótulo combinado

Popularidade: valor de contagem Opcional

O número de seguidores ou o valor de popularidade.

Observação:forneça o valor de contagem se o app não quiser para lidar com a lógica sobre como um número grande precisa ser otimizado tamanhos de exibição diferentes. Se os campos "Contagem" e "Valor de contagem" forem informados, A contagem é exibida para os usuários.

Longo
Popularidade: marcador Opcional Indicação do rótulo de popularidade. Por exemplo, "Curtidas".

String

Tamanho de texto recomendado: máximo de 20 caracteres por contagem + rótulo combinado

Popularidade (visual) Opcional

Indicação do motivo da interação. Por exemplo, uma imagem mostrando Ícone de curtidas, emoji.

É possível fornecer mais de uma imagem, mas talvez nem todas apareçam em todas formatos.

Observação:a imagem precisa ser quadrada (1:1)

Consulte as orientações em Especificações de imagem.
Classificação - Valor máximo Obrigatório

O valor máximo da escala de avaliação.

Precisa ser fornecido se o valor atual da classificação também for informado.

Número maior ou igual a 0,0
Classificação - Valor atual Obrigatório

O valor atual da escala de avaliação.

Precisa ser fornecido se o valor máximo de avaliação também for fornecido.

Número maior ou igual a 0,0
Classificação - Contagem Opcional

A contagem das classificações da entidade.

Observação:insira esse campo se o app quiser controlar como isso é exibido para os usuários. Forneça a string concisa que podem ser exibidas ao usuário. Por exemplo, se a contagem for 1.000.000, use abreviações como 1 milhão, para que não seja truncados em tamanhos de exibição menores.

String
Classificação - Valor da contagem Opcional

A contagem das classificações da entidade.

Observação: insira este campo se você não quiser processar a lógica de abreviação de exibição. Se "Contagem" e "Valor de contagem" estiverem presentes, usaremos "Contagem" para exibir aos usuários

Longo
Local: país Opcional O país onde a pessoa está localizada ou atendendo.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: cidade Opcional A cidade onde a pessoa está localizada ou atendendo.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local – Endereço de exibição Opcional O endereço onde a pessoa está ou está atendendo será exibido para o usuário.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: endereço Opcional O endereço (se aplicável) onde a pessoa está localizada ou disponibilização.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local – Estado Opcional O estado (se aplicável) em que a pessoa está localizada ou atendendo.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: CEP Opcional O CEP (se aplicável) onde a pessoa está localizada ou atendendo o local.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: bairro Opcional O bairro (se aplicável) onde a pessoa está localizada ou atendendo.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Selos Opcional

Cada selo é um texto livre (máximo de 15 caracteres) ou uma imagem pequena.

Selo - Texto Opcional

Título do selo

Observação:é preciso enviar um texto ou uma imagem para o selo.

Texto livre

Tamanho de texto recomendado: no máximo 15 caracteres

Selo - Imagem Opcional

Imagem pequena

Tratamento especial de UX, por exemplo, como sobreposição de selo na imagem/vídeo miniatura.

Observação:é necessário usar texto ou imagem para receber o selo.

Consulte as orientações em Especificações de imagem.
Descrição Opcional

Um único parágrafo de texto para descrever a entidade.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado: 180 caracteres

Lista de legendas Opcional

Até três legendas, cada uma sendo uma linha de texto.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado para cada subtítulo: máximo 50 caracteres

Categorias de Conteúdo Opcional Descreva a categoria do conteúdo da entidade.

Lista de tipos enumerados qualificados

  • TYPE_HEALTH_AND_FITENESS (Exemplo: ioga/instrutor de condicionamento físico)
  • TYPE_HOME_AND_AUTO (Exemplo: encanador)
  • TYPE_SPORTS (exemplo: jogador)
  • TYPE_DATING

Consulte a seção Categoria de conteúdo. para orientação.

EventEntity

Atributo Requisito Descrição Formato
Action Uri Obrigatório

Link direto para a entidade no app do provedor.

Observação: é possível usar links diretos para atribuição. Consulte estas perguntas frequentes

URI
Título Obrigatório Título da entidade.

String

Tamanho de texto recomendado: máximo de 50 caracteres

Horário de início Obrigatório

O carimbo de data/hora da época em que o evento deve começar.

Observação: esse valor será representado em milissegundos.

Carimbo de data/hora da época em milissegundos
Modo de evento Obrigatório

Um campo para indicar se o evento será virtual, presencial ou os dois.

Enumeração: VIRTUAL, IN_PERSON ou HYBRID
Poster images Obrigatório

Mostraremos apenas uma imagem quando várias imagens forem fornecidas. A proporção recomendada é de 16:9

Observação:a imagem é altamente recomendada. Se um selo for fornecido, garanta um espaço seguro de 24 dps nas partes superior e inferior do imagem

Consulte as orientações em Especificações de imagem.
Local: país Obrigatório sob certas condições

O país onde o evento vai acontecer.

Observação: isto é necessário para eventos que sejam IN_PERSON ou HÍBRIDO

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: cidade Obrigatório sob certas condições

A cidade onde o evento está acontecendo.

Observação: isto é necessário para eventos que sejam IN_PERSON ou HÍBRIDO

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local – Endereço de exibição Obrigatório sob certas condições

O endereço ou nome do local onde o evento ocorrerá, que deveria ser exibido ao usuário.

Observação: isto é necessário para eventos que sejam IN_PERSON ou HÍBRIDO

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: endereço Opcional O endereço (se aplicável) do local onde o evento será que está sendo hospedado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local – Estado Opcional O estado ou a província (se aplicável) onde o evento está sendo hospedado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: CEP Opcional O CEP (se aplicável) do local onde o evento está sendo hospedado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: bairro Opcional A vizinhança (se aplicável) onde o evento será realizado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Horário de término Opcional

O carimbo de data/hora da época em que o evento deve terminar.

Observação: esse valor será representado em milissegundos.

Carimbo de data/hora da época em milissegundos
Descrição Opcional

Um único parágrafo de texto para descrever a entidade.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado: 180 caracteres

Lista de legendas Opcional

Até três legendas, cada uma sendo uma linha de texto.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado para cada subtítulo: máximo 50 caracteres

Selos Opcional

Cada selo é um texto livre (máximo de 15 caracteres) ou uma imagem pequena.

Selo - Texto Opcional

Título do selo

Observação:é preciso enviar um texto ou uma imagem para o selo.

Texto livre

Tamanho de texto recomendado: no máximo 15 caracteres

Selo - Imagem Opcional

Imagem pequena

Tratamento especial de UX, por exemplo, como sobreposição de selo na imagem/vídeo miniatura.

Observação:é preciso enviar um texto ou uma imagem para o selo.

Consulte as orientações em Especificações de imagem.
Preço - CurrentPrice Obrigatório sob certas condições

O preço atual do ingresso/passe para o evento.

Precisa ser fornecido se o preço tachado for informado.

Texto livre
Preço — StrikethroughPrice Opcional O preço original do ingresso/passe para o evento. Texto livre
Frase de destaque de preço Opcional Frase de destaque de preço para apresentar uma promoção, evento ou desconto para membros, se disponível.

Texto livre

Tamanho de texto recomendado: menos de 45 caracteres (texto muito longo) pode mostrar reticências)

Categorias de Conteúdo Opcional Descreva a categoria do conteúdo da entidade.

Lista de tipos enumerados qualificados

  • TYPE_MovieS_AND_TV_SHOWS (Exemplo - Cinema)
  • TYPE_DIGITAL_GAMES (exemplo: eSports)
  • TYPE_MUSIC (exemplo: show)
  • TYPE_TRAVEL_AND_LOCAL (Exemplo: tour, festival)
  • TYPE_HEALTH_AND_FITENESS (Exemplo: aula de ioga)
  • TYPE_EDUCATION (exemplo: classe)
  • TYPE_SPORTS (exemplo: jogo de futebol americano)
  • TYPE_DATING (Exemplo: encontro)

Consulte a seção Categoria de conteúdo. para orientação.

EventReservationEntity

Atributo Requisito Descrição Formato
Action Uri Obrigatório

Link direto para a entidade no app do provedor.

Observação: é possível usar links diretos para atribuição. Consulte estas perguntas frequentes

URI
Título Obrigatório Título da entidade.

String

Tamanho de texto recomendado: máximo de 50 caracteres

Horário de início Obrigatório

O carimbo de data/hora da época em que o evento deve começar.

Observação: esse valor será representado em milissegundos.

Carimbo de data/hora da época em milissegundos
Modo de evento Obrigatório

Um campo para indicar se o evento será virtual, presencial ou os dois.

Enumeração: VIRTUAL, IN_PERSON ou HYBRID
Local: país Obrigatório sob certas condições

O país onde o evento vai acontecer.

Observação: isto é necessário para eventos que sejam IN_PERSON ou HÍBRIDO

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: cidade Obrigatório sob certas condições

A cidade onde o evento está acontecendo.

Observação: isto é necessário para eventos que sejam IN_PERSON ou HÍBRIDO

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local – Endereço de exibição Obrigatório sob certas condições

O endereço ou nome do local onde o evento ocorrerá, que deveria ser exibido ao usuário.

Observação: isto é necessário para eventos que sejam IN_PERSON ou HÍBRIDO

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: endereço Opcional O endereço (se aplicável) do local onde o evento será que está sendo hospedado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local – Estado Opcional O estado ou a província (se aplicável) onde o evento está sendo hospedado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: CEP Opcional O CEP (se aplicável) do local onde o evento está sendo hospedado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Local: bairro Opcional A vizinhança (se aplicável) onde o evento será realizado.

Texto livre

Tamanho de texto recomendado: no máximo 20 caracteres

Poster images Opcional

Mostraremos apenas uma imagem quando várias imagens forem fornecidas. A proporção recomendada é de 16:9

Observação:a imagem é altamente recomendada. Se um selo for fornecido, garanta um espaço seguro de 24 dps nas partes superior e inferior do imagem

Consulte as orientações em Especificações de imagem.
Horário de término Opcional

O carimbo de data/hora da época em que o evento deve terminar.

Observação: esse valor será representado em milissegundos.

Carimbo de data/hora da época em milissegundos
Provedor de serviços – Nome Opcional

O nome do provedor de serviços.

Observação: é necessário texto ou imagem para o serviço de nuvem.

Texto livre. Por exemplo, nome do organizador do evento/tour
Provedor de serviços: imagem Opcional

O logotipo/imagem do provedor de serviços.

Observação: é necessário texto ou imagem para o serviço de nuvem.

Consulte as orientações em Especificações de imagem.
Descrição Opcional

Um único parágrafo de texto para descrever a entidade.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado: 180 caracteres

Lista de legendas Opcional

Até três legendas, cada uma sendo uma linha de texto.

Observação: a descrição ou a lista de legendas serão exibidos ao usuário, não ambos.

Texto livre

Tamanho de texto recomendado para cada subtítulo: máximo 50 caracteres

Selos Opcional

Cada selo é um texto livre (máximo de 15 caracteres) ou uma imagem pequena.

Selo - Texto Opcional

Título do selo

Observação:é preciso enviar um texto ou uma imagem para o selo.

Texto livre

Tamanho de texto recomendado: no máximo 15 caracteres

Selo - Imagem Opcional

Imagem pequena

Tratamento especial de UX, por exemplo, como sobreposição de selo na imagem/vídeo miniatura.

Observação:é preciso enviar um texto ou uma imagem para o selo.

Consulte as orientações em Especificações de imagem.
ID da reserva Opcional O ID da reserva do evento. Texto livre
Preço - CurrentPrice Obrigatório sob certas condições

O preço atual do ingresso/passe para o evento.

Precisa ser fornecido se o preço tachado for informado.

Texto livre
Preço — StrikethroughPrice Opcional O preço original do ingresso/passe para o evento. Texto livre
Frase de destaque de preço Opcional Frase de destaque de preço para apresentar uma promoção, evento ou desconto para membros, se disponível.

Texto livre

Tamanho de texto recomendado: menos de 45 caracteres (texto muito longo) pode mostrar reticências)

Classificação - Valor máximo Opcional

O valor máximo da escala de avaliação.

Precisa ser fornecido se o valor atual da classificação também for informado.

Número maior ou igual a 0,0
Classificação - Valor atual Opcional

O valor atual da escala de avaliação.

Precisa ser fornecido se o valor máximo de avaliação também for fornecido.

Número maior ou igual a 0,0
Classificação - Contagem Opcional

A contagem das classificações do evento.

Observação:insira esse campo se o app quiser controlar como isso é exibido para os usuários. Forneça a string concisa que podem ser exibidas ao usuário. Por exemplo, se a contagem for 1.000.000, use abreviações como 1 milhão, para que não seja truncados em tamanhos de exibição menores.

String
Classificação - Valor da contagem Opcional

A contagem das classificações do evento.

Observação: insira este campo se você não quiser processar a lógica de abreviação de exibição. Se "Contagem" e "Valor de contagem" estiverem presentes, usaremos "Contagem" para exibir aos usuários

Longo
Categorias de Conteúdo Opcional Descreva a categoria do conteúdo da entidade.

Lista de tipos enumerados qualificados

  • TYPE_MovieS_AND_TV_SHOWS (Exemplo - Cinema)
  • TYPE_DIGITAL_GAMES (exemplo: eSports)
  • TYPE_MUSIC (exemplo: show)
  • TYPE_TRAVEL_AND_LOCAL (Exemplo: tour, festival)
  • TYPE_HEALTH_AND_FITENESS (Exemplo: aula de ioga)
  • TYPE_EDUCATION (exemplo: classe)
  • TYPE_SPORTS (exemplo: jogo de futebol americano)
  • TYPE_DATING (Exemplo: encontro)

Consulte a seção Categoria de conteúdo. para orientação.

Especificações da imagem

Confira nesta tabela as especificações necessárias para recursos de imagem:

Proporção Mínimo de pixels Pixels recomendados

Quadrada (1 x 1)

Preferida

300 x 300 1.200 x 1.200
Paisagem (1,91 x 1) 600 x 314 1.200 x 628
Retrato (4 x 5) 480 x 600 960 x 1.200

As imagens precisam ser hospedadas em CDNs públicas para que possam ser acessadas pelo Google.

Formatos de arquivo

PNG, JPG, GIF estático, WebP

Tamanho máximo do arquivo

5.120 KB

Recomendações adicionais

  • Área de segurança da imagem: posicione o conteúdo importante no centro da imagem, ocupando 80% do espaço.
  • Use um plano de fundo transparente para que a imagem possa ser exibida corretamente nas configurações do tema claro e escuro.

Categoria do conteúdo

A categoria de conteúdo permite que os apps publiquem conteúdo pertencente a vários categorias. Isso mapeia o conteúdo com algumas das categorias predefinidas:

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

As imagens precisam ser hospedadas em CDNs públicas para que possam ser acessadas pelo Google.

Diretrizes para usar as categorias de conteúdo

  1. Algumas entidades, como ArticleEntity e GenericFeaturedEntity, estão qualificado para usar qualquer uma das categorias de conteúdo. Para outras entidades, como EventEntity, EventReservaEntity, PersonEntity, apenas um subconjunto dessas categorias estão qualificadas. Confira a lista de categorias qualificadas para um tipo de entidade antes de preencher a lista.
  2. Usar o tipo específico de entidade para algumas categorias de conteúdo em vez de uma combinação das entidades genéricas e a ContentCategory:

  3. O campo "ContentCategory" é opcional e deve ser deixado em branco se o o conteúdo não pertence a nenhuma das categorias mencionadas anteriormente.

  4. Caso várias categorias de conteúdo sejam fornecidas, forneça-as na ordem de relevância para o conteúdo com a categoria de conteúdo mais relevante o primeiro da lista.

Etapa 2: fornecer dados do cluster

É recomendável executar o job de publicação de conteúdo em segundo plano (por exemplo, usando o WorkManager) e o programar com frequência ou por evento (por exemplo, toda vez que o usuário abrir o app ou adicionar algo ao carrinho).

AppEngagePublishClient é responsável pela publicação de clusters.

Estas são as APIs para publicar clusters no cliente:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

Essa API é usada para conferir se o serviço está disponível para integração e se o conteúdo pode ser apresentado no dispositivo.

Kotlin


client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java


client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

Essa API é usada para publicar uma lista de objetos RecommendationCluster.

Kotlin


client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

Quando o serviço recebe a solicitação, as ações abaixo ocorrem em uma transação:

  • Os dados do RecommendationCluster do parceiro do desenvolvedor são removidos.
  • Os dados da solicitação são analisados e armazenados no cluster de recomendação atualizado.

Em caso de erro, o pedido inteiro é rejeitado e o estado atual é mantido.

publishFeaturedCluster

Essa API é usada para publicar uma lista de objetos FeaturedCluster.

Kotlin


client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java


client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

Quando o serviço recebe a solicitação, as ações abaixo ocorrem em uma transação:

  • Os dados do FeaturedCluster do parceiro do desenvolvedor são removidos.
  • Os dados da solicitação são analisados e armazenados no cluster de destaque atualizado.

Em caso de erro, a solicitação inteira é rejeitada e o estado atual é mantido.

publishContinuationCluster

Essa API é usada para publicar um objeto ContinuationCluster.

Kotlin


client.publishContinuationCluster(
    PublishContinuationClusterRequest.Builder()
      .setContinuationCluster(
        ContinuationCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java


client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

Quando o serviço recebe a solicitação, as ações abaixo ocorrem em uma transação:

  • Os dados do ContinuationCluster do parceiro do desenvolvedor são removidos.
  • Os dados da solicitação são analisados e armazenados no cluster de continuação atualizado.

Em caso de erro, a solicitação inteira é rejeitada e o estado atual é mantido.

publishUserAccountManagementRequest

Essa API é usada para publicar um card de login. A ação de login direciona os usuários à página de login do app para que ele possa publicar ou oferecer conteúdo mais personalizado.

Os metadados abaixo fazem parte do card de login:

Atributo Requisito Descrição
Action Uri Obrigatório Link direto para a ação (ou seja, leva à página de login do app)
Image Opcional: se não for fornecido, o título precisa ser fornecido

Imagem mostrada no card

Imagens com proporção de 16 x 9 e resolução de 1.264 x 712

Title Opcional: se não for fornecido, a imagem precisará ser fornecida Título do card
Action Text Opcional Texto mostrado no CTA (por exemplo, "Fazer login")
Subtitle Opcional Subtítulo opcional do card

Kotlin


var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java


SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Quando o serviço recebe o pedido, as seguintes ações ocorrem em uma transação:

  • Os dados do UserAccountManagementCluster do parceiro do desenvolvedor são removidos.
  • Os dados do pedido são analisados e armazenados no cluster UserAccountManagementCluster atualizado.

Em caso de erro, a solicitação inteira é rejeitada e o estado atual é mantido.

updatePublishStatus

Se, por motivos comerciais internos, nenhum dos clusters for publicado, recomendamos fortemente a atualização do status de publicação usando updatePublishStatus. Isso é importante pelos seguintes motivos:

  • Informar o status em todos os casos possíveis, mesmo quando o conteúdo é publicado (STATUS == PUBLISHED), é fundamental para preencher painéis que usam o status explícito para transmitir informações de integridade e outras métricas da integração.
  • Se nenhum conteúdo for publicado, mas o status da integração não estiver corrompido (STATUS == NOT_PUBLISHED), o Google poderá evitar o acionamento de alertas nos painéis de integridade do app. Isso confirma que o conteúdo não foi publicado devido a uma situação esperada pelo provedor.
  • Ajuda os desenvolvedores a fornecer insights sobre quando os dados são publicados em comparação com não.
  • O Google pode usar os códigos de status para incentivar o usuário a realizar determinadas ações do aplicativo para que possam ver ou superar o conteúdo do aplicativo.

Lista de códigos de status de publicação que podem ser usados:

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

Se o conteúdo não for publicado porque o usuário não está conectado, o Google recomendamos publicar o card de login. Se, por algum motivo, não for possível para publicar o card de login, recomendamos chamar API updatePublishStatus com o código de status NOT_PUBLISHED_REQUIRES_SIGN_IN (em inglês)

Kotlin


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

Essa API é usada para excluir o conteúdo dos clusters de recomendação.

Kotlin


client.deleteRecommendationClusters()

Java


client.deleteRecommendationClusters();

Quando o serviço recebe o pedido, ele remove os dados atuais dos clusters de recomendação. Em caso de erro, toda a solicitação é rejeitada e o estado atual é mantido.

deleteFeaturedCluster

Essa API é usada para excluir o conteúdo do cluster de destaque.

Kotlin


client.deleteFeaturedCluster()

Java


client.deleteFeaturedCluster();

Quando o serviço recebe o pedido, ele remove os dados atuais do cluster de destaque. Em caso de erro, a solicitação inteira é rejeitada e o estado existente é mantido.

deleteContinuationCluster

Essa API é usada para excluir o conteúdo do cluster de continuação.

Kotlin


client.deleteContinuationCluster()

Java


client.deleteContinuationCluster();

Quando o serviço recebe o pedido, ele remove os dados atuais do cluster de continuação. Em caso de erro, toda a solicitação é rejeitada e o estado atual é mantido.

deleteUserManagementCluster

Essa API é usada para excluir o conteúdo do cluster UserAccountManagement.

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

Quando o serviço recebe o pedido, ele remove os dados atuais do cluster UserAccountManagement. Em caso de erro, a solicitação inteira é rejeitada e o estado atual é mantido.

deleteClusters

Essa API é usada para excluir o conteúdo de determinado tipo de cluster.

Kotlin


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_CONTINUATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .build())

Java


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_CONTINUATION)
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                .build());

Quando o serviço recebe a solicitação, ele remove os dados de todos os clusters que correspondem aos tipos especificados. Os clientes podem transmitir um ou vários tipos de clusters. Em caso de erro, a solicitação inteira é rejeitada e o estado existente é mantido.

Tratamento de erros

É recomendável detectar o resultado da tarefa nas APIs de publicação. Com isso, uma ação de acompanhamento pode ser realizada para extrair e reenviar uma tarefa bem-sucedida.

Kotlin


client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

Java


client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

O erro é retornado como AppEngageException e a causa é incluída como um código de erro.

Código do erro Observação
SERVICE_NOT_FOUND O serviço não está disponível no dispositivo.
SERVICE_NOT_AVAILABLE O serviço está disponível no dispositivo em questão, mas não no momento da chamada (por exemplo, está desativado).
SERVICE_CALL_EXECUTION_FAILURE A execução da tarefa falhou devido a problemas de linha de execução. Nesse caso, ela pode ser repetida.
SERVICE_CALL_PERMISSION_DENIED O autor da chamada não tem permissão para fazer a chamada de serviço.
SERVICE_CALL_INVALID_ARGUMENT A solicitação contém dados inválidos (por exemplo, tem um número de clusters maior do que o permitido).
SERVICE_CALL_INTERNAL Há um erro no serviço.
SERVICE_CALL_RESOURCE_EXHAUSTED A chamada de serviço é feita com muita frequência.

Etapa 3: processar intents de transmissão

Além de fazer chamadas de API de conteúdo de publicação usando um job, também é necessário configurar um BroadcastReceiver para receber a solicitação de publicação de conteúdo.

O objetivo principal das intents de transmissão é reativar o app e forçar a sincronização de dados. As intents de transmissão não são projetadas para envio muito frequente. Elas só são acionadas quando o serviço do Engage determina que o conteúdo pode estar desatualizado (por exemplo, é de uma semana atrás). Dessa forma, há mais confiança de que o usuário poderá ter uma nova experiência de conteúdo, mesmo que o aplicativo não tenha sido executado por um longo período.

O BroadcastReceiver precisa ser configurado de duas maneiras:

  • Registre dinamicamente uma instância da classe BroadcastReceiver usando Context.registerReceiver(). Isso permite a comunicação de aplicativos que ainda estão ativos na memória.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

Java

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • Declare estaticamente uma implementação com a tag <receiver> no arquivo AndroidManifest.xml. Isso permite que o aplicativo receba intents de transmissão quando não está em execução e também permite que ele publique o conteúdo.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

As intents abaixo são enviadas pelo serviço:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION É recomendado para iniciar uma chamada publishRecommendationClusters ao receber essa intent.
  • com.google.android.engage.action.PUBLISH_FEATURED É recomendado inicie uma chamada publishFeaturedCluster ao receber essa intent.
  • com.google.android.engage.action.PUBLISH_CONTINUATION É recomendado inicie uma chamada publishContinuationCluster ao receber essa intent.

Fluxo de trabalho de integração

Para acessar um guia explicativo sobre como verificar a integração após a conclusão, consulte Fluxo de trabalho de integração de desenvolvedor.

Perguntas frequentes

Consulte as Perguntas frequentes sobre o SDK Engage para acessar as perguntas frequentes.

Contato

Contato engage-developers@google.com se houver quaisquer dúvidas durante o processo de integração.

Próximas etapas

Depois de concluir essa integração, as próximas etapas serão as seguintes:

  • Enviar um e-mail para engage-developers@google.com e anexe o APK integrado que está pronto para ser testado pelo Google.
  • O Google realiza uma verificação e revisão interna para garantir que a integração funcione como esperado. Se for necessário fazer mudanças, o Google vai entrar em contato informando todos os detalhes necessários.
  • Quando o teste estiver concluído e nenhuma mudança for necessária, o Google entrará em contato com você para notificar que você pode começar a publicar o APK atualizado e integrado para Play Store.
  • Depois que o Google confirmar a publicação do APK atualizado na Play Store, seus clusters de recomendação, destaque e continuação poderão ser publicados e ficar visíveis aos usuários.