Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
O Visual Studio App Center foi desativado em 31 de março de 2025, exceto para os recursos de Análise e Diagnóstico, que continuarão a ter suporte até 30 de junho de 2026. Mais informações.
A Distribuição do App Center permite que seus usuários/testadores instalem novas versões de um aplicativo depois de distribuí-lo por meio do App Center. Uma vez habilitado, o SDK apresenta uma caixa de diálogo de atualização aos usuários para baixar ou adiar a instalação da atualização mais recente. Assim que eles optarem por atualizar, o SDK começará a atualizar seu aplicativo.
Importante
O SDK de distribuição para Unity não suporta UWP. As instruções nesta página abrangem apenas Android e iOS.
Advertência
O Google Play considera o código de atualização no aplicativo como um comportamento mal-intencionado, mesmo que não seja usado em tempo de execução. Remova esse código conforme indicado nesta seção antes de enviar seu aplicativo para o Google Play. A não remoção do código de atualização no aplicativo pode levar à não conformidade e à remoção do aplicativo do Google Play.
Observação
Se você estiver executando testes automatizados de interface do usuário, as atualizações no aplicativo habilitadas bloquearão seus testes automatizados de interface do usuário, pois eles tentarão se autenticar no back-end do App Center. Recomendamos desativar as atualizações no aplicativo para seus testes de interface do usuário.
Adicionar atualizações na aplicação ao seu aplicativo
Adicionar o módulo Distribuir do App Center
O SDK do App Center foi projetado com uma abordagem modular – um desenvolvedor só precisa integrar os módulos dos serviços em que está interessado.
Siga os documentos de introdução do Unity se você ainda não configurou e iniciou o SDK em seu aplicativo. Certifique-se de importar o pacote App Center Distribute. Seu nome deve estar no formato AppCenterDistribute-v{version}.unitypackage.
Observação
O Android 10 ou superior tem restrições na atividade de inicialização em segundo plano. Por favor, veja o artigo sobre restrições para iniciar atividades em segundo plano.
Observação
As aplicações executadas no Android 10 (edição Go) não podem receber a permissão SYSTEM_ALERT_WINDOW . Consulte o artigo sobre SYSTEM_ALERT_WINDOW em dispositivos Go.
Observação
A partir do Android 11, ACTION_MANAGE_OVERLAY_PERMISSION as intenções sempre levam o usuário para a tela Configurações de nível superior, onde o usuário pode conceder ou revogar as SYSTEM_ALERT_WINDOW permissões para aplicativos. Consulte o artigo sobre atualizações de permissões no Android 11.
Remover atualizações no aplicativo para compilações do Google Play
O Google Play considera o código de atualização no aplicativo como um comportamento mal-intencionado, mesmo que não seja usado em tempo de execução. Remova esse código antes de enviar seu aplicativo para o Google Play. A não remoção do código de atualização no aplicativo pode levar à não conformidade e à remoção do aplicativo do Google Play. Desmarque a caixa de seleção Usar distribuição na seção Distribuir no objeto de jogo com AppCenterBehavior anexado para remover o código nativo das atualizações no aplicativo.
Usar grupo de distribuição privado
Por padrão, Distribuir usa um grupo de distribuição público. Se pretender utilizar um grupo de distribuição privado, terá de mudar UpdateTrack para Privado.
Para fazer isso, escolha Privado no menu Faixa de atualização na seção Distribuir no objeto de jogo com ComportamentoAppCenter anexado.
Ao usar a faixa privada, uma janela do navegador será aberta para autenticar o usuário. Todas as verificações de atualização subsequentes receberão a versão mais recente no canal privado.
Se um usuário estiver no caminho privado, isso significa que, após a autenticação bem-sucedida, ele receberá a versão mais recente de todos os grupos de distribuição privados dos quais é membro. Se um usuário estiver no caminho público, isso significa que ele receberá a versão mais recente de qualquer grupo de distribuição público.
Desativar a verificação automática de atualizações
Por padrão, o SDK verifica automaticamente se há novas versões:
- Quando a aplicação é iniciada.
- Quando o aplicativo entra em segundo plano e depois torna ao primeiro plano novamente.
- Ao ativar o módulo Distribuir, caso esteja desativado anteriormente.
Se você quiser verificar novas versões manualmente, você pode desativar a verificação automática de atualização.
Para fazer isso, desmarque a caixa de seleção Verificação automática de atualizações na seção Distribuir no objeto de jogo ao qual está anexado AppCenterBehavior.
Em seguida, você pode usar a CheckForUpdate API descrita na seção a seguir.
Verificar manualmente se há atualização
Distribute.CheckForUpdate();
Isso envia uma solicitação para o App Center e exibe uma caixa de diálogo de atualização caso haja uma nova versão disponível.
Observação
Uma chamada de verificação manual de atualização funciona mesmo quando as atualizações automáticas estão ativadas. Uma verificação manual de atualização é ignorada se outra verificação já estiver sendo feita. A verificação manual de atualizações não será processada se o usuário tiver adiado atualizações (a menos que a versão mais recente seja uma atualização obrigatória).
Personalizar ou localizar a caixa de diálogo de atualização no aplicativo
1. Personalizar ou localizar texto
Você pode fornecer suas próprias cadeias de caracteres de recursos se quiser localizar o texto exibido na caixa de diálogo de atualização. Observe os arquivos de cadeia de caracteres para iOS neste arquivo de recurso do iOS e para Android neste arquivo de recurso do Android. Use o mesmo nome/chave de cadeia de caracteres e especifique o valor localizado a ser refletido na caixa de diálogo em seus próprios arquivos de recursos do aplicativo.
2. Personalize a caixa de diálogo de atualização
Você pode personalizar a aparência da caixa de diálogo de atualização padrão implementando o "callback" ReleaseAvailable.
Advertência
Você precisa registar o retorno de chamada no método Awake de um MonoBehaviour na primeira cena que a sua aplicação carrega para evitar perder quaisquer invocações de retorno de chamada de liberação.
// In this example, OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;
Aqui está uma implementação de callback que substitui a caixa de diálogo do SDK por uma lógica personalizada:
bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
// Look at releaseDetails public properties to get version information, release notes text or release notes URL
string versionName = releaseDetails.ShortVersion;
string versionCodeOrBuildNumber = releaseDetails.Version;
string releaseNotes = releaseDetails.ReleaseNotes;
Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;
// (Do something with the values if you want)
// On mandatory update, user can't postpone
if (releaseDetails.MandatoryUpdate)
{
// Force user to update (you should probably show some custom UI here)
Distribute.NotifyUpdateAction(UpdateAction.Update);
}
else
{
// Allow user to update or postpone (you should probably show some custom UI here)
// "GetUserUpdateAction()" isn't part of the SDK; it just represents a way of getting user response.
// This blocks the thread while awaiting the user's response! This example shouldn't be used literally
UpdateAction updateAction = GetUserUpdateAction();
Distribute.NotifyUpdateAction(updateAction);
}
// Return true if you're using your own UI to get user response, false otherwise
return true;
}
Notas de implementação para Android:
Como mostrado no exemplo, você deve chamar um dos Distribute.NotifyUpdateAction(UpdateAction.UPDATE); ou Distribute.NotifyUpdateAction(UpdateAction.POSTPONE); se o retorno de chamada retornar true.
Se não chamares NotifyUpdateAction, o retorno de chamada irá repetir-se a cada mudança de atividade.
O callback pode ser chamado novamente com o mesmo lançamento se a atividade mudar antes que a ação do usuário seja notificada ao SDK.
Esse comportamento é necessário para cobrir os seguintes cenários:
- Seu aplicativo é enviado para o plano de fundo (como pressionar HOME) e, em seguida, retomado em uma atividade diferente.
- Sua atividade é coberta por outra sem sair do aplicativo (como clicar em algumas notificações).
- Cenários semelhantes aos acima.
Nesse caso, a atividade que hospeda a caixa de diálogo pode ser substituída sem interação do usuário. Assim, o SDK chama o ouvinte novamente para que você possa restaurar a caixa de diálogo personalizada.
3. Execute o código se nenhuma atualização for encontrada
Nos casos em que o SDK verifica se há atualizações e não encontra nenhuma atualização disponível mais recente do que a usada atualmente, um callback NoReleaseAvailable é invocado. Isso permite que você execute código personalizado em tais cenários.
Você precisa registrar o retorno de chamada antes de ligar AppCenter.Start , conforme mostrado no exemplo a seguir:
// In this example OnNoReleaseAvailable is a method name in same class
Distribute.NoReleaseAvailable = OnNoReleaseAvailable;
AppCenter.Start(...);
void OnNoReleaseAvailable()
{
AppCenterLog.Info(LogTag, "No release available callback invoked.");
}
## Enable or disable App Center Distribute at runtime
You can enable and disable App Center Distribute at runtime. If you disable it, the SDK won't provide any in-app update functionality but you can still use the Distribute service in the App Center portal.
To disable the Distribute service, use the following code:
```csharp
Distribute.SetEnabledAsync(false);
Para habilitar o App Center Distribute novamente, use a mesma API, mas passe true como parâmetro.
Distribute.SetEnabledAsync(true);
Essa API é assíncrona, você pode ler mais sobre em nosso guia de APIs assíncronas do App Center .
Você não precisa esperar essa chamada para tornar outras chamadas de API (como IsEnabledAsync) consistentes.
O estado é persistido no armazenamento do dispositivo em todas as inicializações de aplicativos.
Verifique se o App Center Distribute está ativado
Você também pode verificar se o App Center Distribute está habilitado:
Distribute.IsEnabledAsync();
Essa API é assíncrona, você pode ler mais sobre em nosso guia de APIs assíncronas do App Center .
Habilitar atualizações no aplicativo para compilações de depuração
Por padrão, as atualizações no aplicativo são habilitadas apenas para compilações de versão.
Para habilitar atualizações no aplicativo para compilações de depuração no Android e iOS, marque a caixa de seleção Ativar distribuição na depuração na seção Distribuir no objeto de jogo com AppCenterBehavior anexado.
No Unity, uma compilação depurável é uma compilação com a opção Development build marcada.
Execute a limpeza antes que o aplicativo feche para atualização
Observação
Esta função de callback só funciona no iOS.
Registe o callback como mostrado no exemplo seguinte:
// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
// Perform clean up here
}
Com isso, OnWillExitApp() será invocado quando Distribute estiver prestes a fechar.
Como funcionam as atualizações no aplicativo
Observação
Para que as atualizações no aplicativo funcionem, uma compilação de aplicativo deve ser baixada do link. Ele não funcionará se instalado a partir de um IDE ou manualmente.
O recurso de atualizações no aplicativo funciona da seguinte maneira:
- Esse recurso só funciona com compilações RELEASE (por padrão) que são distribuídas usando o serviço App Center Distribuir . Não funcionará se a funcionalidade de Acesso Guiado do iOS estiver ativada.
- Depois de integrar o SDK, crie uma versão de lançamento do seu aplicativo e carregue-a para o App Center. Os usuários do grupo de distribuição são notificados sobre a nova versão por e-mail.
- Quando cada usuário abre o link em seu e-mail, o aplicativo será instalado em seu dispositivo. É importante que eles usem o link por e-mail para instalar - não damos suporte a carregamento lateral. Quando um aplicativo é baixado do link, o SDK salva informações importantes dos cookies para verificar se há atualizações posteriormente, caso contrário, o SDK não terá essas informações importantes.
- Se o aplicativo definir a faixa como privada, um navegador será aberto para autenticar o usuário e habilitar atualizações no aplicativo. O navegador não voltará a abrir enquanto as informações de autenticação permanecerem válidas, mesmo ao alternar para a faixa pública e voltando novamente para a privada mais tarde. Se a autenticação do navegador for bem-sucedida, o usuário será redirecionado de volta para o aplicativo automaticamente. Se a faixa for pública (que é o padrão), o próximo passo ocorre imediatamente.
- Uma nova versão do aplicativo mostra a caixa de diálogo de atualização no aplicativo solicitando que os usuários atualizem seu aplicativo se for:
- iOS:
- um valor superior a
CFBundleShortVersionStringou - um valor igual de
CFBundleShortVersionStringmas um valor superior deCFBundleVersion. - As versões são as mesmas, mas o identificador exclusivo de compilação é diferente.
- um valor superior a
- Android:
- um valor superior a
versionCodeou - um valor igual de
versionCodemas um valor diferente deversionName.
- um valor superior a
- iOS:
Sugestão
Se você carregar o mesmo .apk/.ipa uma segunda vez, a caixa de diálogo NÃO aparecerá, pois os binários são idênticos. No iOS, se você carregar uma nova compilação com as mesmas propriedades de versão, ela mostrará a caixa de diálogo de atualização. A razão para isso é que é um binário diferente. No Android, os binários são considerados iguais se ambas as propriedades da versão forem as mesmas.
Como faço para testar as atualizações no aplicativo?
Você deve carregar compilações de distribuição (que usam o módulo Distribuir do SDK do App Center) no Portal do App Center para testar as atualizações no aplicativo, aumentando os números de versão a cada vez.
- Crie seu aplicativo no Portal do App Center, se ainda não o fez.
- Crie um novo grupo de distribuição e atribua-lhe um nome.
- Adicione a si mesmo (ou a todas as pessoas que você deseja incluir no teste do recurso de atualização no aplicativo). Use um endereço de e-mail novo ou descartável para esta etapa, um ainda não usado com este aplicativo. Isso garante que sua experiência esteja próxima da experiência de seus testadores reais.
- Crie uma nova compilação do seu aplicativo que inclua o App Center Distribute e contenha a lógica de configuração conforme descrito abaixo. Se o grupo for privado, não se esqueça de definir a faixa de atualização privada no aplicativo antes de começar a usar a
UpdateTrackpropriedade. - Clique no botão Distribuir nova versão no portal e carregue sua compilação do aplicativo.
- Quando o carregamento terminar, clique em Avançar e selecione o grupo de distribuição que você criou anteriormente como o Destino da distribuição desse aplicativo.
- Revise a Distribuição e distribua a compilação para seu grupo de teste no aplicativo.
- As pessoas desse grupo receberão um convite para serem testadores do aplicativo. Assim que aceitarem o convite, podem descarregar a aplicação do Portal do App Center nos seus dispositivos móveis. Depois que eles tiverem as atualizações no aplicativo instaladas, você estará pronto para testar as atualizações no aplicativo.
- Aumente a versão do seu aplicativo (
CFBundleShortVersionStringCFBundleVersionou para iOS,versionCodepara Android). - Crie a versão de lançamento do seu aplicativo e carregue uma nova compilação como fez na etapa anterior. Distribua para o Grupo de Distribuição criado anteriormente. Os membros do Grupo de Distribuição serão solicitados a fornecer uma nova versão na próxima vez que o aplicativo for iniciado.
Sugestão
Dê uma olhada nas informações sobre como utilizar o App Center Distribute para obter informações mais detalhadas sobre Grupos de Distribuição , etc. Embora seja possível usar o App Center Distribute para distribuir uma nova versão do seu aplicativo sem adicionar nenhum código, adicionar o App Center Distribute ao código do seu aplicativo resultará em uma experiência mais perfeita para seus testadores e usuários à medida que eles obtêm a experiência de atualização no aplicativo.