API de autenticación de APK de Android

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

Activity.RESULT_OK
La autenticación se realizó correctamente.
Activity.RESULT_CANCELED El usuario canceló el flujo de forma manual y este debería anularse.
Activity.RESULT_FIRST_USER La autenticación falló por un motivo grave y el flujo debe anularse. El servidor IE mostró la respuesta HTTP 500 al acceder.

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.