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
|
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.