API Android APK Authentication

A autenticação pode ocorrer em três ambientes diferentes:

  • App Android do integrador de pagamentos
  • Site para dispositivos móveis do integrador de pagamentos
  • Site para computadores do integrador de pagamentos

Independentemente do fluxo, o Google transfere a interação do usuário para o software do integrador de pagamentos. O integrador de pagamentos pode mostrar ao usuário uma interface ou simplesmente retornar imediatamente se já tiver os dados apropriados. Todos os fluxos fazem com que o integrador produza um AuthenticationResponse. Essa resposta é assinada e enviada ao Google.

Os sites para dispositivos móveis e computadores precisam seguir a especificação da API WebRedirect Authentication, enquanto o fluxo do app Android precisa seguir a especificação da API Android Authentication.

Os integradores precisam implementar uma solução de APK do Android para autenticar os usuários. Essa autenticação é uma modalidade diferente, mas tem a mesma finalidade da autenticação fornecida pela autenticação na Web.

Um usuário se autentica com o integrador de pagamentos usando uma atividade do Android. A intent de autenticação é invocada durante a associação da conta e para desafios do usuário. Para evitar que o Android encerre o Play em segundo plano durante a autenticação, o integrador precisa incluir o seguinte no tema da atividade.

<item name="android:windowIsTranslucent">true</item>

Definição de método

A intent precisa ter estas propriedades:

Propriedades do método
Ação com.google.android.payments.standard.AUTHENTICATE_V1
Categoria android.intent.category.DEFAULT

Solicitação

Campos
gspAuthenticationRequest AuthenticationRequest

Solicitação de autenticação.

gspAssociationId string

Se presente, contém um identificador que o integrador usa para procurar as credenciais do usuário contestado. Se ele não estiver presente, o usuário terá a opção de mudar a identificação da conta.

Resposta

Depois que o usuário conclui a autenticação, seu aplicativo precisa enviar uma intent de resultado de volta ao Google. Se a autenticação for bem-sucedida, crie uma intent e adicione o gspAuthenticationResponse codificado como um extra. Em seguida, defina o resultado da atividade para o código de resultado adequado.

...
result.setExtra("gspAuthenticationResponse", gspAuthenticationResponse);
setResult(Activity.RESULT_OK, result);
...
finish();

Resultado

Campos
resultado int

Activity.RESULT_OK
A autenticação foi concluída.
Activity.RESULT_CANCELED O usuário cancelou o fluxo manualmente, e o fluxo deve ser cancelado.
Activity.RESULT_FIRST_USER A autenticação falhou por um motivo fatal e o fluxo precisa ser cancelado. O servidor do IE retornou a resposta HTTP 500 no login.

Extras

Campos
gspAuthenticationResponse AuthenticationResponse

Resposta de autenticação. Esse valor codificado não pode exceder 1 KB.

Outros requisitos de atividade

A atividade com suporte à ação AUTHENTICATE_V1 mencionada acima também precisa verificar se os autores da chamada da API vêm apenas de aplicativos assinados pelo Google. Isso ajuda a evitar que outros apps tentem invocar sua atividade e recuperar tokens de identidade. Isso pode ser feito usando o StandardPaymentUtils.verifyCallingActivityIsGoogleSigned fornecido logo após super.onCreate na implementação da sua Atividade.

Veja uma amostra:


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);

  ....
}

Todas as atividades invocadas no fluxo authenticate precisam fornecer um tema de atividade que tenha windowIsTranslucent=true. Isso precisa ser feito com o atributo AndroidManifest android:theme e não usando Context.setTheme(). De maneira programática, a definição do tema não funciona corretamente para a transparência da janela. O Google fará com que a primeira atividade iniciada siga esse padrão, mas todas as subatividades que também forem iniciadas também precisarão seguir esse padrão. Caso contrário, as compras de desenvolvedores terceirizados podem não funcionar.