Atualizações no aplicativo: Acelerando as atualizações de aplicativos Android



Entre a variedade de ferramentas anunciadas no Android Dev Summit , eu gostaria de prestar atenção especial ao mecanismo de atualização de aplicativos IAUs (In-App Updates), que ajuda os desenvolvedores a acelerar a adição de novos recursos, correções de bugs e melhorias de desempenho. Como essa funcionalidade foi publicada após o Google I / O 2019, neste artigo falarei em detalhes sobre IAUs, descreverei os esquemas de implementação recomendados e darei alguns exemplos de código. Também falarei sobre nossa experiência na integração de IAUs no Pandao , um aplicativo para encomendar mercadorias da China.

A nova API permite que os desenvolvedores iniciem uma atualização de aplicativo para a versão mais recente disponível no Google Play. Dessa forma, as IAUs complementam o mecanismo de atualização automática existente do Google Play. As IAUs contêm vários esquemas de implementação que são fundamentalmente diferentes em termos de interação do usuário.

  1. O Flexible Flow oferece aos usuários o download da atualização em segundo plano e a instalação em um momento conveniente para o usuário. Destina-se a casos em que os usuários ainda podem usar a versão antiga, mas uma nova já está disponível.


  2. O Fluxo imediato exige que os usuários baixem e instalem a atualização antes de continuar usando o aplicativo. Destina-se a casos em que é essencial que os desenvolvedores atualizem o aplicativo.



Como a segunda opção não é tão importante e menos adequada para a aplicação Pandao, analisaremos o cenário de Fluxo Flexível com mais detalhes.

Integração de fluxo flexível de IAUs


Casos de uso


O processo de atualização usando IAUs consiste em várias etapas.

  1. Um aplicativo que usa a biblioteca Play Core, que verifica no Google Play se há atualizações disponíveis.
  2. Se estiverem, o aplicativo solicitará ao Google Play para mostrar o diálogo IAUs. O Google Play mostra ao usuário uma caixa de diálogo com uma proposta para atualização.
  3. Se o usuário concordar, o Google Play em segundo plano baixa a atualização, mostrando ao usuário na barra de status o progresso do download.
  4. Se o download for concluído quando o aplicativo estiver sendo executado em segundo plano, o Google Play concluirá automaticamente a instalação. Se o aplicativo estiver ativo no momento, é necessário, nesses casos, determinar sua própria lógica de conclusão da instalação. Considere os seguintes cenários.
    1. O aplicativo inicia o processo de instalação mostrando ao usuário uma caixa de diálogo do Google Play com um indicador de progresso. Após a conclusão da instalação, uma versão atualizada do aplicativo é iniciada. Nesse caso, é recomendável exibir uma caixa de diálogo adicional que permita ao usuário confirmar que está pronto para reiniciar o aplicativo agora. Este é o esquema de implementação recomendado .
    2. O aplicativo aguarda até ficar em segundo plano e, em seguida, conclui a atualização. Por um lado, esse é um comportamento menos invasivo do ponto de vista do UX, pois a interação do usuário com o aplicativo não é interrompida. Mas, por outro lado, exige que o desenvolvedor implemente a lógica para determinar se o aplicativo está em segundo plano.

Se a instalação da atualização baixada não foi concluída, o Google Play pode concluir a instalação em segundo plano. Essa opção é melhor não usar explicitamente, porque não garante a instalação da atualização.

Requisitos básicos de teste


Para concluir manualmente todo o processo de atualização em um dispositivo de teste, você deve ter pelo menos duas versões do aplicativo com números de montagem diferentes: origem e destino .

  • A versão original com um número maior deve ser publicada no Google Play; será identificada pelo Google Play como uma atualização disponível. A versão de destino com um número de compilação menor e IAUs integradas deve estar instalada no dispositivo; nós a atualizaremos. A linha inferior é que, quando o aplicativo solicitar ao Google Play para verificar se há uma atualização, ele comparará os números de montagem da versão instalada e disponível. Portanto, as IAUs serão lançadas apenas se o número da compilação no Google Play for maior que a versão atual no dispositivo.
  • As versões de origem e de destino devem 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.

Exemplo de código


Aqui, examinamos um código de amostra para o uso do IAUs Flexible Flow, que também pode ser encontrado na documentação oficial . Primeiro, você precisa adicionar a biblioteca Play Core ao arquivo build.gradle no nível do módulo.

dependencies { ... implementation "com.google.android.play:core:1.5.0" } 

Em seguida, crie uma instância do AppUpdateManager e adicione uma função de retorno de chamada ao AppUpdateInfo , que retornará informações sobre a disponibilidade da atualização, o objeto para iniciar a atualização (se disponível) e o andamento atual do download, se já tiver sido iniciado.

 // Create instance of the IAUs manager. val appUpdateManager = AppUpdateManagerFactory.create(context) // Add state listener to app update info task. appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> // If there is an update available, prepare to promote it. if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { // ... } // If the process of downloading is finished, start the completion flow. if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { // ... } } .addOnFailureListener { e -> // Handle the error. } 

Para mostrar a caixa de diálogo para solicitar atualizações do Google Play, você deve passar o objeto AppUpdateInfo recebido para o método AppUpdateInfo .

  appUpdateManager.startUpdateFlowForResult( // Pass the intent that is returned by 'getAppUpdateInfo()'. appUpdateInfo, // Or 'AppUpdateType.IMMEDIATE for immediate updates. AppUpdateType.FLEXIBLE, // The current activity. activity, REQUEST_CODE ) 

Para monitorar o status da atualização, você pode adicionar o ouvinte de evento InstallStateUpdatedListener ao gerenciador de IAUs.

 // Create a listener to track downloading state updates. val listener = InstallStateUpdatedListener { state -> // Update progress indicator, request user to approve app reload, etc. } // At some point before starting an update, register a listener for updates. appUpdateManager.registerListener(listener) // ... // At some point when status updates are no longer needed, unregister the listener. appUpdateManager.unregisterListener(listener) 

Assim que a atualização for baixada (status DOWNLOADED ), você precisará reiniciar o aplicativo para concluir a atualização. A reinicialização pode ser iniciada chamando appUpdateManager.completeUpdate() , mas antes disso é recomendável mostrar uma caixa de diálogo para que o usuário confirme explicitamente sua disponibilidade para reiniciar o aplicativo.

 Snackbar.make( rootView, "An update has just been downloaded from Google Play", Snackbar.LENGTH_INDEFINITE ).apply { setAction("RELOAD") { appUpdateManager.completeUpdate() } show() } 

Erro "A atualização não está disponível"


Primeiro, verifique novamente a conformidade com os requisitos listados na seção Requisitos básicos de implementação. Se você tiver feito tudo, mas a atualização de acordo com a chamada onSuccess ainda estiver indisponível, o problema pode estar no cache. É provável que o aplicativo Google Play não esteja ciente da atualização disponível devido ao mecanismo de cache interno. Para evitar isso durante o teste manual, você pode forçar uma redefinição de cache acessando a página "Meus aplicativos e jogos" no Google Play. Ou você pode simplesmente limpar o cache nas configurações do aplicativo Google Play. Observe que esse problema ocorre apenas durante o teste, não deve afetar os usuários finais, pois o cache ainda é atualizado diariamente.

Fluxo flexível de IAUs no aplicativo Pandao


Participamos de um programa de acesso antecipado e integramos o IAUs Flexible Flow (implementação recomendada) no aplicativo Pandao, uma plataforma na qual fabricantes e fornecedores podem comercializar produtos chineses. A caixa de diálogo IAUs foi exibida na tela principal para que o número máximo de usuários pudesse interagir com ela. Inicialmente, queríamos mostrar o diálogo não mais do que uma vez por dia, para não distrair as pessoas da interação com o aplicativo.

Como o teste A / B desempenha um papel fundamental no ciclo de vida de qualquer novo recurso, decidimos avaliar o efeito das IAUs em nosso aplicativo. Dividimos aleatoriamente os usuários em dois grupos separados. O primeiro foi um controle, sem o uso de IAUs, e o segundo grupo foi um teste, mostramos o diálogo das IAUs para esses usuários.


Teste IAUs de fluxo flexível A / B no aplicativo Pandao.

Nos últimos lançamentos, medimos a porcentagem de usuários ativos de cada versão do aplicativo. Verificou-se que entre os usuários ativos com a versão mais recente disponível na época, a parte principal era composta por participantes do grupo B, ou seja, com a função IAU. A linha roxa no gráfico mostra que, nos primeiros dias após a publicação da versão 1.29.1, o número de usuários ativos com IAUs excedeu o número de usuários sem essa função. Portanto, pode-se argumentar que os usuários com IAUs atualizam o aplicativo mais rapidamente.


A caixa de diálogo IAUs Flexible Flow no aplicativo Pandao.

De acordo com nossos dados (veja o gráfico acima), os usuários costumam clicar no botão de confirmação na caixa de diálogo IAUs nos primeiros dias após o lançamento e, em seguida, a conversão é constantemente reduzida até a publicação da próxima versão do aplicativo. O mesmo ocorre com o botão de instalação na caixa de diálogo, que inicia a instalação da atualização baixada. Portanto, podemos dizer que o valor médio de conversão em ambos os casos é diretamente proporcional à frequência de lançamentos. No Pandao, a conversão média em um mês atinge 35% para um clique no botão de confirmação e 7% para um clique no botão de instalação.

Assumimos que uma diminuição na porcentagem de confirmações ao longo do tempo é apenas um problema de experiência do usuário, porque as pessoas interessadas na nova versão serão atualizadas rapidamente e as que não estiverem interessadas em atualizar não se interessarão. Com base nessa premissa, decidimos não incomodar aqueles que não estão interessados ​​em atualizar, e não perguntar todos os dias. É uma boa prática usar uma lógica de consulta diferente, baseada na "obsolescência", ou seja, para não incomodar os usuários, avaliamos quantas versões antigas eles têm e com que frequência já sugerimos que eles atualizem.

Em geral, as IAUs mostraram bons resultados durante os testes A / B, então lançamos as IAUs para todos os usuários.

Agradecimentos


Obrigado por sua ajuda ao escrever este artigo Marina Pleshkova Maryna_Pliashkova , Alexander Cherny alexchernyy , Ilya Nazarov RolaRko , Gleb Bodyachevsky, Daniil Polozov jokerdab , Anastasia Kulik, Vladislav Breus e Vladislav Goldin Vladiskus .

Source: https://habr.com/ru/post/pt452092/


All Articles