La autenticación puede ocurrir en tres entornos diferentes:
- App para Android del integrador de pagos
- Sitio web móvil del integrador de pagos
- Sitio web de escritorio del integrador de pagos
Independientemente del flujo, Google transfiere la interacción del usuario al software del integrador de pago. El integrador de pagos puede elegir mostrarle una interfaz al usuario o volver de inmediato si ya tiene los datos adecuados. Todos los flujos hacen que el integrador produzca una AuthenticationResponse. Esta respuesta se firma y se envía a Google.
Los sitios web para dispositivos móviles y computadoras de escritorio deben seguir la Especificación de la API de autenticación de WebRedirect, mientras que el flujo de la app para Android debe seguir la Especificación de la API de autenticación de Android.
Los integradores deben implementar una solución de APK de Android para autenticar a los usuarios. Esta autenticación es una modalidad diferente, pero tiene el mismo propósito que la autenticación que proporciona la autenticación web.
Un usuario se autentica con el integrador de pagos mediante una actividad de Android. El intent de autenticación se invoca durante la asociación de la cuenta y para los desafíos del usuario. Para evitar que Android finalice Play en segundo plano durante la autenticación, el integrador debe incluir lo siguiente en el tema de la actividad.
<item name="android:windowIsTranslucent">true</item>
Definición del método
El intent debe tener las siguientes propiedades:
Propiedades de los métodos | |
---|---|
Acción |
com.google.android.payments.standard.AUTHENTICATE_V1 |
Categoría | android.intent.category.DEFAULT |
Solicitud
Campos | |
---|---|
gspAuthenticationRequest
|
AuthenticationRequest
Solicitud de autenticación. |
gspAssociationId
|
string
Si está presente, contiene un identificador que el integrador usa para buscar las credenciales del usuario desafiante. Si no aparece, el usuario tiene la opción de cambiar la identificación de la cuenta. |
Respuesta
Una vez que el usuario completa la autenticación, tu aplicación debe enviar un intent de resultado a Google. Si la autenticación se realiza correctamente, crea un intent y agrega el gspAuthenticationResponse codificado y encriptado como valor adicional. A continuación, establece el resultado de la actividad en el código de resultado adecuado.
...
result.setExtra("gspAuthenticationResponse", gspAuthenticationResponse);
setResult(Activity.RESULT_OK, result);
...
finish();
Resultado
Campos | |||||||
---|---|---|---|---|---|---|---|
resultado |
int
|
Adicionales
Campos | |
---|---|
gspAuthenticationResponse |
AuthenticationResponse
Respuesta de autenticación. Este valor codificado no debe superar 1 KB. |
Otros requisitos de actividad
La actividad que admite la acción AUTHENTICATE_V1
mencionada anteriormente también debe verificar que los llamadores de la API solo provengan de aplicaciones firmadas por Google.
Esto ayudará a evitar que otras apps intenten invocar tu actividad y recuperar tokens de identidad. Esto se puede hacer con el StandardPaymentUtils.verifyCallingActivityIsGoogleSigned
proporcionado justo después de super.onCreate
dentro de tu implementación de Activity.
A continuación, le presentamos una muestra:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);
....
}
Todas las actividades invocadas dentro del flujo authenticate
deben proporcionar un tema de actividad que tenga windowIsTranslucent=true
. Esto debe hacerse con el atributo android:theme AndroidManifest y sin usar Context.setTheme()
.
De manera programática, configurar el tema no funciona correctamente para la transparencia de la ventana. Google exigirá que la primera actividad que se inicie siga este patrón, pero cualquier subactividad que también se inicie deberá seguir este patrón. De lo contrario, es posible que las compras de desarrolladores externos no funcionen.