
Com uma variedade de novas ferramentas e recursos anunciados no
Android Dev Summit , atenção especial deve ser dada à API de atualizações no aplicativo (IAUs), permitindo que os desenvolvedores aumentem a velocidade de entrega de recursos, correções de bugs e melhorias de desempenho para usuários ativos. Como esse recurso foi finalmente
lançado após o Google I / O 2019, neste artigo, vou aprofundar a API da IAUs, descrever detalhadamente os fluxos de usuários recomendados e fornecer algumas amostras de código. Além disso, vou compartilhar algumas experiências de integração de IAUs no aplicativo
Pandao , uma plataforma de mercado para produtos chineses.
A nova API permite que os desenvolvedores iniciem um novo fluxo de solicitação de atualização no aplicativo para pressionar os usuários ativos a atualizar o aplicativo. As IAUs complementam o mecanismo de atualização automática existente do Google Play, mas, infelizmente, não têm impacto nas intenções de alguns usuários de desativar qualquer tipo de atualização. A solicitação de IAUs pode ser implementada de duas maneiras, que fornecem a experiência do usuário completamente diferente.
- O fluxo flexível solicita que os usuários baixem uma atualização em segundo plano e a instale em um momento conveniente. Ele deve ser usado nos casos em que ainda seja apropriado para um usuário usar a versão mais antiga do aplicativo enquanto o novo foi lançado.

- O fluxo imediato requer que os usuários baixem e instalem uma atualização antes de continuar usando o aplicativo. Ele deve ser usado nos casos, enquanto é crucial que os desenvolvedores impeçam o uso do aplicativo antes que a atualização seja aplicada.

Como o último caso de uso é menos importante e apropriado para o aplicativo Pandao, discutiremos em detalhes o primeiro.
Integração de fluxo flexível de IAUs
Caso de uso
O fluxo de IAUs flexíveis consiste nas seguintes etapas.
- O aplicativo solicita ao Google Play que verifique as atualizações disponíveis usando a Biblioteca principal do Play.
- Se houver uma atualização disponível, o aplicativo solicitará que o Google Play mostre a caixa de diálogo IAUs. O Google Play mostra o diálogo de solicitação de atualização para o usuário.
- Se o usuário aceitar uma solicitação de atualização, o Google Play fará o download de uma atualização em segundo plano, fornecendo ao usuário um monitoramento gracioso do estado na barra de status.
- Se o processo de download for concluído enquanto o aplicativo estiver em segundo plano, o Google Play concluirá automaticamente a instalação. Nos casos em que o download é concluído enquanto o aplicativo está em primeiro plano, precisamos definir uma lógica personalizada para a conclusão da atualização. Considere várias práticas recomendadas para a implementação.
- O aplicativo inicia o processo de instalação enquanto exibe uma tela do Google Play com o progresso da instalação para o usuário. Após a conclusão da instalação, o aplicativo é reiniciado e uma versão atualizada é aberta. Nesse caso, é recomendável exibir um diálogo adicional para permitir que o usuário confirme explicitamente que está pronto para reiniciar o aplicativo no momento. Este é um fluxo altamente recomendado .
- O aplicativo aguarda até o segundo plano e conclui a atualização silenciosamente. Por um lado, essa opção é menos invasiva em termos de experiência do usuário. Mas, por outro lado, exige que o desenvolvedor implemente um recurso complicado para detectar sempre que o aplicativo for em segundo plano.
Em situações excepcionais, a conclusão da atualização será adiada automaticamente para a tarefa em segundo plano do Google Play. Esta opção não é recomendada para uso explícito porque não fornece nenhuma garantia sobre a instalação de uma atualização.
Requisitos básicos para testes manuais
Para executar manualmente o fluxo de atualização completo no dispositivo de teste, você deve ter pelo menos duas versões do aplicativo com o número de versão diferente: uma versão de origem e uma versão de destino.
- A versão de origem com o número de versão superior deve ser publicada no Google Play. Essa é a versão que será identificada pelo Google Play como uma atualização disponível. A versão de destino com o número de versão inferior e o recurso IAUs integrado devem ser instalados no seu dispositivo; esta é a versão que será atualizada. O problema é que, quando o aplicativo solicita ao Google Play que verifique as atualizações disponíveis, ele compara o número da versão do aplicativo instalado com o número da versão da última versão disponível no Google Play. Portanto, o recurso IAUs será acionado apenas se o número da versão no Google Play for maior que a versão real do aplicativo no dispositivo.
- As versões de origem e de destino precisam ter o mesmo nome de pacote e devem ser assinadas com o mesmo certificado de liberação .
- Android 5.0 (nível de API 21) ou superior.
- Jogue a biblioteca Core 1.5.0 ou superior.
Código de exemplo
Esta seção contém algum código de amostra para uso de IAUs, que também pode ser encontrado na
documentação oficial . Para começar, é necessário adicionar a biblioteca do Play Core ao arquivo gradle no nível do módulo.
dependencies { ... implementation "com.google.android.play:core:1.5.0" }
Em seguida, vamos criar uma instância do gerenciador de IAUs e adicionar retornos de chamada à tarefa
AppUpdateInfo
. O resultado desta tarefa contém informações sobre a disponibilidade de uma atualização, a intenção de iniciar uma atualização, se estiver disponível, e o progresso atual do download da atualização, se já tiver sido iniciado.
Em termos de como acionar o diálogo de solicitação de atualização do Google Play no código, você recebe um
PendingIntent
no objeto
AppUpdateInfo
, que pode ser iniciado com
startIntentSenderForResult
. Este diálogo solicita que o usuário inicie a atualização.
appUpdateManager.startUpdateFlowForResult(
Para monitorar o estado da atualização, você pode adicionar
InstallStateUpdatedListener
ao gerenciador de IAUs. Verifique se o
InstallStateUpdatedListener
está ciente do ciclo de vida.
Assim que a atualização for baixada (status
DOWNLOADED
), o aplicativo deverá ser reiniciado para concluir a atualização. Pode ser facilmente iniciado chamando
appUpdateManager.completeUpdate()
, mas é recomendável exibir uma lanchonete para permitir que o usuário confirme explicitamente que está pronto para reiniciar o aplicativo agora.
Snackbar.make( rootView, "An update has just been downloaded from Google Play", Snackbar.LENGTH_INDEFINITE ).apply { setAction("RELOAD") { appUpdateManager.completeUpdate() } show() }
Erro "Atualização não disponível"
Antes de tudo, verifique os requisitos mencionados na seção "Requisitos básicos de implementação". Se você concluir com êxito as etapas acima em conformidade com todos os requisitos, embora a atualização, de acordo com o retorno de chamada
onSuccess
, ainda não esteja disponível, preste atenção ao seguinte truque. O motivo mais provável é que o aplicativo Google Play ainda não sabe sobre a atualização devido ao mecanismo de cache interno. Para garantir que você tenha o cache atualizado ao testar manualmente, atualize a versão em cache acessando a tela "Meus aplicativos e jogos" no aplicativo Google Play. Como alternativa, você pode simplesmente limpar o cache do aplicativo Google Play nas configurações. Observe que esse é apenas um problema para teste e não afeta os usuários finais, pois o cache é atualizado diariamente de qualquer maneira.
Fluxo flexível de IAUs no Pandao
Como parte do programa de acesso antecipado, integramos o fluxo flexível de IAUs (implementação recomendada) no aplicativo Pandao, ou seja, um aplicativo de mercado que oferece produtos de fabricantes e fornecedores chineses. O diálogo IAUs foi mostrado na tela principal, para que o número máximo de usuários pudesse interagir com ele. Inicialmente, decidimos mostrar o diálogo das IAUs não mais do que uma vez por dia, a fim de evitar que os usuários de risco ficassem aborrecidos.
Como o teste A / B é uma etapa essencial em todo ciclo de vida de novos recursos, decidimos avaliar o efeito das IAUs no aplicativo Pandao. Dividimos aleatoriamente nossos usuários em dois grupos sem sobreposição. O primeiro é um grupo de controle sem IAUs funcionais que representam a linha de base 'sem alteração', e o segundo é um grupo de teste com o diálogo de IAUs.
Fig. 1. Teste A / B para IAUs (fluxo flexível) no Pandao App.Nas últimas versões, medimos a porcentagem de usuários ativos para cada versão do aplicativo. Verificou-se que entre os usuários ativos com a última versão disponível de cada vez, a maior parte era do grupo B, ou seja, usuários com o recurso IAUS. Como você pode ver nas linhas roxas na fig. 1, nos primeiros dias após a publicação da versão do aplicativo 1.29.1, o número de usuários ativos com o recurso IAUs excedeu o número de usuários sem esse recurso. A situação oposta pode ser observada para as versões anteriores do aplicativo, consulte linhas azuis e vermelhas após a publicação da versão 1.29.1 do aplicativo. Portanto, pode-se afirmar que os usuários com IAUs tendem a atualizar a versão do aplicativo mais rapidamente.
Fig. 2. Taxa de confirmação no diálogo IAUs (fluxo flexível) no Pandao App .
De acordo com os dados analíticos do Pandao (consulte a fig. 2), a conversão para clicar no botão de confirmação na caixa de diálogo IAUs atinge valores de pico nos primeiros dias do lançamento e depois diminui constantemente até a próxima atualização do aplicativo. O mesmo padrão pode ser observado na conversão para clicar no botão de instalação em uma lanchonete, que inicia a instalação da atualização baixada. Conseqüentemente, parece que a taxa de conversão média em ambos os casos é diretamente proporcional à frequência de lançamentos. No Pandao, a taxa média de conversão medida durante um mês excede 35% ao clicar no botão de confirmação e 7% ao clicar no botão de instalação.
Sugerimos que a redução da taxa de confirmação ao longo do tempo é apenas um problema de experiência do usuário, porque as pessoas interessadas na nova versão do aplicativo serão atualizadas rapidamente, e as que não estiverem interessadas em atualizar continuarão desinteressadas. Com base nessas informações, decidimos afastar alguns usuários se eles não estiverem interessados em atualizar, em vez de pedir a eles todos os dias. Parece ser uma boa prática tentar uma lógica de solicitação diferente com base na `` staleness '', ou seja, qual a idade da versão, quantas vezes um usuário já solicitou uma atualização e assim por diante, em vez de arriscar que os usuários sejam incomodados.
Como resultado, as IAUs demonstraram resultados valiosos durante o teste A / B, então implementamos esse recurso para todos os usuários.
Segmentos reconhecidos
Quero agradecer a vários colegas por sua contribuição para este artigo. Agradecimentos a Maryna Pliashkova
Maryna_Pliashkova , Alexander Chernyy
alexchernyy , Ilia Nazarov
RolaRko , Gleb Bodyachevskiy, Daniil Polozov
jokerdab , Anastasia Kulik, Vladislav Breus e Vladislav Goldin
Vladiskus .