Convite para atualização do Android

O convite de atualização é um fluxo de usuário que mostra os principais novos recursos incluídos na atualização principal do sistema operacional Android disponível no momento.

O fluxo tem como objetivo ajudar a convencer os usuários a atualizar seus dispositivos para a versão mais recente do sistema operacional.

Quando um dispositivo tem uma atualização de sistema operacional pendente de aprovação do usuário, os usuários recebem uma notificação push exibindo os novos recursos e convidando-os a realizar a atualização.

Para ativar o convite de atualização para o seu sistema operacional Android, registre-se usando o formulário Solicitar para ativar o convite de atualização do Android .

Personalize a experiência do convite de upgrade

Você pode personalizar a experiência do convite de upgrade das seguintes maneiras:

  • Remova recursos irrelevantes.
  • Atualize o idioma nos blocos de texto.
  • Modifique as animações, cores e fontes para combinar com sua marca.

Para personalizar o fluxo, revise as diretrizes no Guia de estilo do convite de upgrade e inclua suas informações de personalização no formulário Solicitar para ativar o convite de upgrade do Android .

Guia de estilo de convite de atualização

Use este guia de estilo para modificar a aparência do Convite de atualização para se adequar à sua marca (telas, cores, fontes). É altamente recomendável manter os tamanhos e a estrutura próximos ao projeto original.

O fluxo de convite de atualização apresenta os três componentes a seguir:

  • Tela de introdução
  • Tela de recursos
  • Outra tela
Figura 1. Os três tipos de tela no fluxo de convite de upgrade

Uma animação em cada tela ajuda a explicar cada recurso.

Tela de introdução

A tela de introdução contém uma pequena animação que dá as boas-vindas ao usuário e o incentiva a iniciar o fluxo mostrado na tela de introdução.

Disposição
Figura 2. Layout de wireframe para a tela de introdução do convite de atualização

A animação do dispositivo consiste sempre em:

  • Fundo branco e formas coloridas
  • Quadro do dispositivo
  • Conteúdo da IU
Estilo

Se você optar por adaptar o estilo do Material You , poderá usar as cores e formas padrão mostradas no exemplo.

Figura 3. Esquema de cores padrão para o fluxo de convite de atualização.

Se você usar a cor da sua própria marca, certifique-se de que ela funcione bem com o plano de fundo da IU.

Movimento

Opção 1: com relógio na tela inicial

  1. Os números entram na tela.
  2. Os números se movem para o centro enquanto diminuem de tamanho. A moldura do telemóvel aparece.
  3. O telefone diminui de tamanho. As formas começam a entrar na tela.
  4. A animação está concluída. As formas continuam se movendo suavemente.
Figura 4. Layout de wireframe para a animação da tela de introdução do Upgrade Invitation com um relógio.
Figura 5. Exemplo de animação para tela de introdução com relógio.

Opção 2: Sem relógio na tela inicial

  1. O celular entra na tela.
  2. O telefone se move para o centro enquanto aumenta de tamanho. As formas começam a entrar na tela.
  3. O telefone atinge o tamanho máximo e as formas continuam se movendo.
Figura 6. Layout de wireframe para a animação da tela de introdução do Upgrade Invitation sem relógio.
Figura 7. Exemplo de animação para tela de introdução sem relógio.

Tela de recursos

Cada tela de recursos destaca um recurso do novo sistema operacional.

Disposição
Figura 8. Layout de wireframe para as telas do recurso Upgrade Invitation.

A animação do dispositivo consiste sempre em:

  • Fundo colorido
  • Quadro do dispositivo
  • Conteúdo da IU
Estilo
  • Escolha uma cor de fundo que funcione bem com o conteúdo da IU e com a aparência geral.
  • Dentro das telas, defina tamanhos de fonte que sejam facilmente legíveis. Se necessário, defina tamanhos de fonte maiores.
Movimento

Grave uma animação do fluxo de cada recurso, incluindo interações por toque. Exporte as gravações como arquivos Lottie .

Outra tela

A tela final completa o fluxo. Indica aos usuários que eles passaram por todas as telas.

Disposição
Figura 9. Layout de wireframe para a tela final do convite de atualização.

A animação do dispositivo consiste sempre em:

  • Meio círculo no fundo (mais formas animadas)
  • Quadro do dispositivo
  • Conteúdo da IU
Estilo
  • Selecione uma cor de fundo que funcione bem com o conteúdo da IU e com a aparência geral.
  • Use uma forma de semicírculo.
Movimento

Siga o fluxo padrão de animação da tela final:

  1. O celular sobe um pouco.
  2. Um círculo aparece no fundo.
  3. Formas surgem por trás do celular.
  4. As formas voam para fora do fundo como confetes.
Figura 10. Layout de wireframe para a animação da tela final do Convite de atualização.
Figura 11. Exemplo de animação de tela final.

Teste o fluxo de convite de upgrade

  1. No dispositivo Android, vá para: Configurações > Google > Upgrade Party debug .
  2. Prepare o gatilho para o convite de atualização para o sistema operacional do dispositivo relevante (dependendo da versão atual do sistema operacional e do fluxo específico do convite de atualização a ser testado. Ou:
    1. Clique em Gravar atualização falsa (versão atual) . (por exemplo, se você executar o sistema operacional Android 13, isso acionará o fluxo de teste do Android 13)
    2. Clique em Gravar atualização pendente (versão atual + 1) . (por exemplo, se você executar o sistema operacional Android 12, isso acionará o fluxo de teste do Android 13)
    3. Clique em Reportar atualização do SO
  3. Clique na notificação recebida ou clique em Abrir convite de atualização.

Opções de acionamento para convite de upgrade

Existem três maneiras diferentes de acionar o fluxo de convite de atualização: 1. automático 2. transmissão 3. SDK do Play Services acionado

Automático - notificação acionada pelo Google (somente para dispositivos em execução gOTA)

Para dispositivos OEM que executam gOTA, a integração é automática e nenhuma etapa de integração do Upgrade Invitation é necessária. Assim que uma atualização importante do sistema operacional pendente for detectada, uma notificação push será enviada ao dispositivo a partir do Google Play Services, levando ao fluxo de convite de atualização.

Android Broadcast - notificação acionada pelo Google (recomendado)

Uma transmissão de aplicativo é a maneira mais simples e recomendada de integrar o fluxo de convite de atualização.

Um receptor de transmissão permite acionar o fluxo de convite de atualização do seu aplicativo usando uma mensagem de transmissão. A transmissão envia uma notificação push para o dispositivo do Google Play Services, levando ao fluxo de convite de atualização.

Pré-requisitos de transmissão

Para preparar seu aplicativo, conclua as etapas nas seções a seguir.

Certifique-se de que os arquivos de configuração do seu aplicativo usem os seguintes valores:

  • Uma minSdkVersion de 14 ou superior
  • Uma compileSdkVersion de 28 ou superior
  • Um usosPermission de android.permission.RECOVERY

Envie a transmissão

Veja abaixo as instruções para o aplicativo OEM (ou código) enviar uma transmissão Android para acionar a notificação push:

  1. Envie transmissão com a ação.

    com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE
    
  2. Adicione o pacote com.google.android.gms à transmissão.

    com.google.android.gms
    

Requisitos adicionais

O fluxo de convite de atualização também permite que os usuários executem a atualização do sistema operacional diretamente no fluxo.

Para que isso funcione, exponha uma intenção personalizada que o Google possa chamar a partir do fluxo de convite de atualização que aciona o download da atualização.

Exemplo de uso de transmissão

Veja o seguinte exemplo de transmissão de aplicativo:

Context context = getApplicationContext();
Intent upgradeInviteIntent = new Intent()
  .setAction( "com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE")
  .setPackage("com.google.android.gms");
  .putExtra("com.google.android.gms.growth.upgradeparty.upgradeinvite.EXTRA_PENDING_ANDROID_OS_VERSION_NUMBER", 14);

context.sendBroadcast(updateIntent);

O valor da chave EXTRA_PENDING_ANDROID_OS_VERSION_NUMBER é um número inteiro que indica a versão pendente do sistema operacional (neste exemplo, a versão do Android a ser instalada é 14). Isso é usado para determinar qual fluxo de convite de atualização será acionado.

SDK do Play Services: somente acionamento de fluxo

O SDK de terceiros permite que você acione o fluxo de convite de atualização do seu aplicativo ou de suas próprias notificações OTA. Use uma API externa de terceiros para ativar o próprio fluxo de convite de atualização. Este método é menos recomendado.

Pré-requisitos

Para preparar seu aplicativo, conclua as etapas nas seções a seguir.

Certifique-se de que o arquivo de compilação do seu aplicativo use os seguintes valores:

  • Uma minSdkVersion de 14 ou superior
  • Uma compileSdkVersion de 28 ou superior

Configure seu aplicativo

Para configurar seu aplicativo:

1. Extract the library from the provided .zip file, and place it in your

repositório. 2. Adicione as dependências do Google Growth SDK ao arquivo Gradle no nível do aplicativo do seu módulo, normalmente app/build.gradle :

   dependencies {
    implementation files('<PATH_TO_BINARY>/play-services-growth-16.1.0-eap04.aar')
   }
  1. Para fornecer as dependências do cliente, inclua as seguintes bibliotecas:

    com.google.android.gms:play-services-base:18.0.1
    com.google.android.gms:play-services-basement:18.0.0
    com.google.android.gms:play-services-tasks:18.0.1
    

Inicialização da API

  1. Para inicializar um cliente, use a classe UpgradeParty:

    import com.google.android.gms.growth.UpgradeParty;
    UpgradeParty.getClient(activity);
    
  2. O parâmetro de atividade deve ser o objeto de atividade inicial.

Funções de API

O UpgradePartyClient resultante expõe a funcionalidade a seguir.

isEligibleForUpgradeInvite

import com.google.android.gms.growth.UpgradeInviteEligibilityParams;

Task<Boolean> isEligibleForUpgradeInvite(UpgradeInviteEligibilityParams params);

/** Contains parameters for the eligibility query. */
class UpgradeInviteEligibilityParams {


/** Integer indicating the pending OS version (in this example, the Android version to be installed is 14). This is used to determine which Upgrade Invite flow will be triggered. */
  int pendingAndroidOsVersionNumber;
}

Retorna uma tarefa que verifica de forma assíncrona se o usuário está qualificado para um convite de atualização. O valor booleano resultante indica se o usuário é elegível ou não.

invocarUpgradeInvite

Task<Void> invokeUpgradeInvite();

Invoca a atividade de convite de atualização. O _Task _object resultante indica se ocorreu um erro ao iniciar a atividade.

Códigos de erro

Ambos os métodos de API podem falhar, com exceção do tipo com.google.android.gms.common.api.ApiException . Nesses casos, espera-se que o chamador tente novamente mais tarde. Os códigos de status comuns esperados) incluem:

  • INTERNAL_ERROR – para qualquer erro no fluxo da lógica subjacente
  • TIMEOUT - se a solicitação não puder ser atendida em tempo hábil
  • API_NOT_CONNECTED - quando a API não está disponível (ou seja, o módulo UpgradeParty ainda não está pronto)
  • NETWORK_ERROR - a solicitação não pôde ser processada devido a erros de rede
  • DEVELOPER_ERROR – o pacote de chamada não tem permissão para acessar a API UpgradeParty

Exemplo de uso do SDK

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.google.android.gms.growth.UpgradeParty;
import com.google.android.gms.growth.UpgradePartyClient;

public class SampleActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   final UpgradePartyClient client = UpgradeParty.getClient(this);

   // Hide the invocation button initially
   View startUpgradeInviteButton = findViewById(R.id.__some_button__);
   startUpgradeInviteButton.setVisibility(View.GONE);

   // Register an onClick handler to invoke the Upgrade Party Activity
   startUpgradeInviteButton
       .setOnClickListener(
           view -> {
             client
                 .invokeUpgradeInvite()
                 .addOnCompleteListener(
                     task -> {
                       if (!task.isSuccessful()) {
                         // Do something with error, see task.getException()
                       }
                     });
           });
   }

   // Check if eligible for an Upgrade Party
   client
       .isEligibleForUpgradeInvite()
       .addOnCompleteListener(
           task -> {
             if (!task.isSuccessful()) {
               // Do something with error, see task.getException()
             } else {
                  // Show/Hide invocation button, based on the result
                  int visibility = 
                        task.getResult() ? View.VISIBLE : View.GONE;
                  startUpgradeInviteButton.setVisibility(visibility);
             }
           });
   }