Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
O Visual Studio App Center foi desativado em 31 de março de 2025, com exceção dos recursos de Análise e Diagnóstico, que continuarão com suporte até 30 de junho de 2026. Saiba mais.
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. Depois que eles optarem por atualizar, o SDK começará a atualizar seu aplicativo.
Importante
O SDK de Distribuição para Unity não dá suporte à UWP. As instruções nesta página abrangem apenas Android e iOS.
Aviso
O Google Play considera o código de atualização no aplicativo como um comportamento mal-intencionado, mesmo que ele não seja usado em runtime. Remova esse código conforme indicado nesta seção antes de enviar seu aplicativo para o Google Play. A falha ao não remover o 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 habilitadas no aplicativo bloquearão seus testes automatizados de interface do usuário, pois tentarão se autenticar no back-end do App Center. Recomendamos desabilitar atualizações no aplicativo para seus testes de interface do usuário.
Adicionar atualizações no aplicativo ao seu aplicativo
Adicionar o módulo Distribuição 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 nos quais 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 do App Center Distribute. Seu nome deve estar no formato AppCenterDistribute-v{version}.unitypackage.
Observação
O Android 10 ou superior tem restrições à atividade de inicialização em segundo plano. Consulte o artigo sobre restrições ao iniciar atividades em segundo plano.
Observação
Aplicativos em execução 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 intents sempre levam o usuário à tela principal de Configurações, 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 dentro do aplicativo para builds do Google Play
O Google Play considera o código de atualização no aplicativo como um comportamento mal-intencionado, mesmo que ele não seja usado em runtime. Remova esse código antes de enviar seu aplicativo para o Google Play. A falha ao não remover o código de atualização no aplicativo pode levar à não conformidade e à remoção do aplicativo do Google Play. Para remover o código nativo de atualizações dentro do aplicativo, desmarque a caixa de seleção Usar Distribuir na seção Distribuir no objeto de jogo com AppCenterBehavior anexado.
Usar grupo de distribuição privado
Por padrão, o Distribute usa um grupo de distribuição público. Se você quiser usar um grupo de distribuição privado, precisará mudar UpdateTrack para Private.
Para fazer isso, escolha Privado no menu suspenso Faixa de Atualização na seção Distribuir no objeto de jogo que tenha AppCenterBehavior anexado.
Ao usar a faixa privada, uma janela do navegador será aberta para autenticar o usuário. Todas as verificações de atualizações subsequentes obterão a versão mais recente no canal privado.
Se um usuário estiver na faixa privada, isso significa que, após a autenticação bem-sucedida, ele obterá a versão mais recente de todos os grupos de distribuição privados dos quais ele é membro. Se um usuário estiver na faixa pública, isso significa que ele obterá a versão mais recente de qualquer grupo de distribuição pública.
Desabilitar a Verificação Automática de Atualização
Por padrão, o SDK verifica automaticamente se há novas versões:
- Quando o aplicativo é iniciado.
- Quando o aplicativo entra em segundo plano e, em seguida, entra novamente em primeiro plano.
- Ao habilitar o módulo Distribuir, caso ele tenha sido desabilitado anteriormente.
Se você quiser verificar se há novas versões manualmente, poderá desabilitar a verificação automática de atualização.
Para fazer isso, desmarque a caixa de seleção Verificação Automática de Atualização na seção Distribuir no objeto do jogo com AppCenterBehavior anexado.
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 ao App Center e exibe uma caixa de diálogo de atualização caso haja uma nova versão disponível.
Observação
Uma verificação manual de chamada de atualização funciona mesmo quando as atualizações automáticas estão habilitadas. Uma verificação manual de atualização será ignorada se outra verificação já estiver sendo feita. A verificação manual da atualização não será processada se o usuário tiver adiado as 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 recurso se quiser localizar o texto exibido na caixa de diálogo de atualização. Examine 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 recurso de aplicativo.
2. Personalizar 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 ReleaseAvailable callback.
Aviso
Você precisa registrar o retorno de chamada no método Awake de um MonoBehaviour da primeira cena que seu aplicativo carrega para não perder nenhuma invocação 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 janela 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:
Conforme mostrado no exemplo, você deve chamar Distribute.NotifyUpdateAction(UpdateAction.UPDATE); ou Distribute.NotifyUpdateAction(UpdateAction.POSTPONE); se o seu retorno de chamada retornar true.
Se você não chamar NotifyUpdateAction, o callback será repetido 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 abranger os seguintes cenários:
- Seu aplicativo é enviado para o segundo plano (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. Portanto, o SDK chama o ouvinte novamente para que você possa restaurar a caixa de diálogo personalizada.
3. Executar código se nenhuma atualização for encontrada
Em 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 no momento, um NoReleaseAvailable retorno de chamada é invocado. Isso permite que você execute código personalizado nesses cenários.
Você precisa registrar o retorno de chamada antes de chamar 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 a Distribuição do App Center novamente, use a mesma API, mas transmita true como um parâmetro.
Distribute.SetEnabledAsync(true);
Essa API é assíncrona, você pode ler mais sobre nosso guia de APIs assíncronas do App Center .
Você não precisa aguardar essa chamada para fazer outras chamadas à API (como IsEnabledAsync) consistentes.
O estado é mantido no armazenamento do dispositivo entre as inicializações do aplicativo.
Verificar se a Distribuição do App Center está habilitada
Você também pode verificar se a Distribuição do App Center está habilitada:
Distribute.IsEnabledAsync();
Essa API é assíncrona, você pode ler mais sobre nosso guia de APIs assíncronas do App Center .
Habilitar atualizações para o aplicativo em versões de depuração
Por padrão, as atualizações no aplicativo são habilitadas apenas para builds de versão.
Para habilitar atualizações no aplicativo para builds de depuração no Android e iOS, marque o checkbox Habilitar Distribuir em Depuração na seção Distribuir do objeto de jogo que tem o AppCenterBehavior anexado.
Na Unity, uma compilação depurável é uma compilação com a opção Compilação de Desenvolvimento marcada.
Executar a limpeza antes que o aplicativo seja fechado para atualização
Observação
Esta função de retorno de chamada funciona somente no iOS.
Registre o callback, conforme mostrado no exemplo a seguir.
// 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 o Distribute estiver prestes a fechar.
Como as atualizações no aplicativo funcionam
Observação
Para que as atualizações no aplicativo funcionem, um build de aplicativo deve ser baixado do link. Ele não funcionará se instalado de um IDE ou manualmente.
O recurso de atualizações no aplicativo funciona da seguinte maneira:
- Esse recurso só funciona com builds release (por padrão) que são distribuídos usando o serviço Distribuição do App Center . Não funcionará se o recurso de Acesso Guiado do iOS estiver ativado.
- Depois de integrar o SDK, crie uma versão de lançamento do aplicativo e carregue-o no App Center. Os usuários do grupo de distribuição são notificados sobre a nova versão por email.
- Quando cada usuário abrir o link em seu email, o aplicativo será instalado em seu dispositivo. É importante que eles usem o link de email para instalar. Não há suporte para carregamento lateral. Quando um aplicativo é baixado do link, o SDK salva informações importantes de cookies para verificar se há atualizações mais tarde, caso contrário, o SDK não tem 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 abrirá novamente enquanto as informações de autenticação forem válidas, mesmo ao alternar para o modo público e voltar para o modo privado 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), a próxima etapa ocorrerá diretamente.
- 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 ele for:
- Ios:
- um valor mais alto de
CFBundleShortVersionStringou - um valor igual de
CFBundleShortVersionString, mas um valor mais alto deCFBundleVersion. - as versões são as mesmas, mas o identificador exclusivo de build é diferente.
- um valor mais alto de
- Android:
- um valor mais alto de
versionCodeou - um valor igual de
versionCode, mas um valor diferente deversionName.
- um valor mais alto de
- Ios:
Dica
Se você carregar o mesmo .apk/.ipa uma segunda vez, a caixa de diálogo NÃO aparecerá, pois os binários serão idênticos. No iOS, se você carregar um novo build com as mesmas propriedades de versão, ele mostrará a caixa de diálogo de atualização. A razão para isso é que é um binário diferente. No Android, os binários serão considerados os mesmos se ambas as propriedades de versão forem as mesmas.
Como fazer para testar as atualizações no aplicativo?
Você deve carregar builds de lançamento (que usam o módulo Distribuir do SDK do App Center) no Portal do App Center para testar atualizações no app, incrementando os números da versão a cada vez.
- Crie seu aplicativo no Portal do App Center se ainda não tiver feito isso.
- Crie um novo grupo de distribuição e dê um nome a ele.
- 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 email novo ou descartado para esta etapa, um que ainda não foi usado com este aplicativo. Isso garante que sua experiência esteja próxima da experiência de seus verdadeiros testadores.
- Crie um novo build de seu aplicativo que inclua a Distribuição do App Center e contenha a lógica de instalaçã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 o build do aplicativo.
- Depois que o upload for concluído, clique em Avançar e selecione o grupo de distribuição que você criou anteriormente como o destino da distribuição do aplicativo.
- Examine a Distribuição e distribua o build para seu grupo de testes no aplicativo.
- As pessoas nesse grupo receberão um convite para serem testadores do aplicativo. Depois de aceitarem o convite, eles poderão baixar o aplicativo no Portal do App Center em seu dispositivo móvel. Depois que elas tiverem as atualizações no aplicativo instaladas, você estará pronto para testar as atualizações no aplicativo.
- Atualize a versão do seu aplicativo (
CFBundleShortVersionStringouCFBundleVersionpara iOS,versionCodepara Android). - Crie a versão de lançamento do seu aplicativo e carregue um novo build como você fez na etapa anterior. Distribua para o Grupo de Distribuição criado anteriormente. Os membros do Grupo de Distribuição serão solicitados a obter uma nova versão na próxima vez que o aplicativo for iniciado.
Dica
Confira as informações sobre como utilizar a Distribuição do App Center para obter informações mais detalhadas sobre grupos de distribuição etc. Embora seja possível usar a Distribuição do App Center para distribuir uma nova versão do seu aplicativo sem adicionar nenhum código, adicionar a Distribuição do App Center ao código do 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.