Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.

Promoções no aplicativo

Os códigos promocionais permitem dar conteúdo ou recursos a um número limitado de usuários sem custos. Depois de criar um código promocional, você pode distribuí-lo de acordo com os termos de serviço. O usuário insere o código promocional no aplicativo ou no aplicativo Google Play Store e recebe o item gratuitamente. Você pode usar os códigos promocionais de diversas maneiras para envolver os usuários de forma criativa, como nos exemplos a seguir:

  • Um jogo pode ter um item especial, como um personagem ou uma decoração, que só seja disponibilizada a jogadores que participarem de um evento. O desenvolvedor pode distribuir cartões com códigos promocionais no evento, e os usuários só inseririam o código promocional para desbloquear o item.
  • Um desenvolvedor de aplicativos pode distribuir códigos promocionais em empresas locais para incentivas possíveis usuários a experimentar o aplicativo.
  • Um desenvolvedor de aplicativos pode dar códigos de família e amigos aos seus funcionários para que eles possam compartilhá-los com quem quiserem.

Todo código promocional está associado a um determinado ID de produto (também conhecido como SKU). É possível criar códigos promocionais para os produtos internos do aplicativo. Você ainda pode manter um SKU fora da Play Store para que a única forma de obter esse item seja inserindo o código promocional desse SKU. Quando um usuário insere o código promocional na Play Store ou em um aplicativo, o usuário recebe o item normalmente, como se tivesse pago por ele. Se o aplicativo já usa a versão 3 do Faturamento no app para apoiar compras internas, é fácil adicionar compatibilidade com códigos promocionais.

Criar e resgatar códigos promocionais

Criam-se códigos promocionais no Google Play Developer Console. Cada código promocional está associado a um único produto registrado no console do desenvolvedor.

Os usuários podem resgatar códigos promocionais de uma das seguintes maneiras:

  • Inserindo o código promocional como parte do fluxo de compra comum do aplicativo, conforme descrito em Implementar faturamento no app. Em relação ao aplicativo, isso é como uma compra normal, exceto pelo fato de o usuário fazer o pagamento com um código promocional em vez de dinheiro.
  • O usuário pode resgatar o código no aplicativo da Google Play Store. Quando o usuário insere o código, a Play Store solicita que o usuário abra o aplicativo (se tiver a versão mais recente instalada), baixe-o ou atualize-o. A Google ainda não oferece compatibilidade a resgate de códigos promocionais pela Google Play Store da web.

Oferecer suporte a códigos promocionais no seu aplicativo

Para oferecer suporte a códigos promocionais, seu aplicativo deve chamar o método getPurchases() sempre que o aplicativo for iniciado ou retomado. Esse método retorna um conjunto de todas as compras atuais e não consumidas, inclusive compras que o usuário fez resgatando um código promocional. A abordagem mais simples é chamar getPurchases() no método onResume() da sua atividade, já que esse retorno de chamada é disparado quando a atividade é criada, assim como quando a atividade é retomada (retirada do estado de pausa). Chamar getPurchases() na inicialização e na retomada garante que o aplicativo descubra todas as compras e os resgates que o usuário pode ter feito enquanto o aplicativo não estava em execução. Além disso, se um usuário fizer uma compra com o aplicativo em execução, e o aplicativo não detectá-la por algum motivo, ele ainda saberá da compra na próxima vez que a atividade for retomada e chamar getPurchases().

Seu aplicativo deve permitir que os usuários resgatem códigos promocionais dentro do próprio aplicativo. Se o aplicativo é compatível com o fluxo de compra no aplicativo (descrito em Fazer solicitações de faturamento no app), seu aplicativo será automaticamente compatível com o resgate de códigos promocionais dentro do aplicativo. Ao inicializar a IU de compra no aplicativo, o usuário terá a opção de pagar pela compra com um código promocional. O método onActivityResult() da atividade receberá um intent de resposta informando o aplicativo se a compra foi concluída. Porém, ele ainda deve chamar getPurchases() na inicialização e na retomada, caso o fluxo de compra e consumo não tenha sido concluído. Por exemplo, se o usuário resgatar um código promocional com sucesso e o aplicativo falhar antes de o item ser consumido, ele ainda receberá informações sobre a compra quando chamar getPurchases() na próxima inicialização.

O aplicativo também deve conseguir lidar com o cenário em que um usuário resgata um código promocional no aplicativo Play Store com o aplicativo em execução. O aplicativo pode descobrir imediatamente quando o usuário resgata um código registrando um ouvinte para o intent PURCHASES_UPDATED. A Play Store dispara esse intent sempre que um usuário resgata um código promocional.

Para detectar o intent PURCHASES_UPDATED, crie um objeto BroadcastReceiver dinamicamente e registre-o para detectar com.android.vending.billing.PURCHASES_UPDATED. Registre o receptor inserindo código similar ao seguinte no método onResume() da atividade:

IntentFilter promoFilter =
    new IntentFilter("com.android.vending.billing.PURCHASES_UPDATED");
registerReceiver(myPromoReceiver, promoFilter);

Quando o usuário faz uma compra, o sistema invoca o método onReceive() do seu receptor de transmissão. Esse método deve chamar getPurchases() para ver as compras que o usuário fez.

Para reduzir a carga sobre o sistema quando o aplicativo não estiver em execução, o método onPause() da sua atividade deve remover o registro do receptor de transmissão:

unRegisterReceiver(myPromoReceiver);

Observação: Não registre esse receptor de transmissão no manifesto do aplicativo. Declarar o receptor no manifesto pode fazer o sistema inicializar o aplicativo para lidar com o intent se o usuário fizer uma compra sem o aplicativo estar em execução. Esse comportamento não é necessário e pode ser ruim para o usuário. Para ter conhecimento das compras que o usuário fez sem o aplicativo estar em execução, chame getPurchases() quando o usuário inicializar o aplicativo.

Testar promoções no aplicativo

Se o aplicativo for compatível com promoções internas, teste os casos de uso a seguir.

O usuário resgata código promocional no aplicativo

Se o usuário resgatar um código promocional dentro do fluxo de compra do aplicativo, conforme descrito em Fazer solicitações de faturamento no app, o sistema invocará o método onActivityResult() da atividade para lidar com a compra. Verifique se onActivityResult() lida com a compra adequadamente, seja o pagamento em dinheiro ou com um código promocional.

O usuário resgata código promocional na Google Play Store

Se o usuário resgatar um código promocional na Play Store, há diversos fluxos de trabalho possíveis. Verifica cada um desses fluxos.

O aplicativo não está instalado

Se o usuário resgatar um código promocional de um aplicativo não instalado no dispositivo, a Play Store solicitará que o usuário o instale (se o aplicativo estiver instalado, mas não estiver atualizado, a Play Store solicitará que o usuário o atualize). Teste a sequência a seguir em um dispositivo que não tenha seu aplicativo instalado.

  1. O usuário resgata um código promocional do aplicativo na Play Store. A Play Store solicita que o usuário instale o aplicativo.
  2. O usuário instala e inicializa o aplicativo. Verifique se, na inicialização, o aplicativo chama getPurchases() e detecta corretamente a compra que o usuário fez com o código promocional.

O aplicativo está instalado, mas não está em execução

Se o usuário resgatar um código promocional de um aplicativo instalado no dispositivo , a Play Store solicitará que o usuário abra o aplicativo em primeiro plano. Teste a sequência a seguir em um dispositivo que tenha o seu aplicativo instalado, mas ele esteja fechado:

  1. O usuário resgata um código promocional do aplicativo na Play Store. A Play Store solicita que o usuário abra o aplicativo em primeiro plano.
  2. O usuário inicializa o aplicativo. Verifique se, na inicialização, o aplicativo chama getPurchases() e detecta corretamente a compra que o usuário fez com o código promocional.

O aplicativo está instalado e em execução

Se o usuário resgatar um código promocional de um aplicativo em execução no momento no dispositivo, a Play Store notificará o aplicativo por meio do intent PURCHASES_UPDATED. Teste a sequência a seguir:

  1. O usuário inicializa o aplicativo. Verifique se o aplicativo se registrou corretamente para receber o intent PURCHASES_UPDATED.
  2. O usuário inicializa o aplicativo da Play Store e resgata um código promocional do aplicativo. A Play Store dispara um intent PURCHASES_UPDATED. Verifique se o retorno de chamada BroadcastReceiver.onReceive() do aplicativo é disparado para lidar com o intent.
  3. Seu método onReceive() deve chamar getPurchases() para responder ao intent. Verifique se o aplicativo chama esse método e se detecta corretamente a compra que o usuário fez com o código promocional.
  4. O usuário retorna ao aplicativo. Verifique se o usuário possui o item comprado.