Cómo verificar la compra de la aplicación de Android en el lado del servidor (Google Play en la facturación de aplicaciones v3)

Tengo una aplicación sencilla (necesita iniciar sesión con la cuenta). Proporciono algunas características premium para usuarios pagados, como más contenido de noticias.

Necesito registrar si el usuario ha comprado este artículo en mi base de datos del servidor. Cuando ofrezco contenido de datos al dispositivo del usuario, puedo comprobar el estado del usuario y proporcionar contenido diferente para el usuario pagado.

Comprobé la muestra Trivialdrive oficial proporcionada por Google, no proporciona ningún código de ejemplo para la verificación de servidor, aquí están mis preguntas.

  1. He encontrado el uso de ejemplo de la clave pública de mi aplicación en el interior para verificar la compra, no se ve bien, creo que sólo puede mover el proceso de verificación a mi servidor combinado con las credenciales de inicio de sesión de usuario para ver si la compra del usuario completado y luego actualizar la base de datos.
  2. También hay API de la compra que puedo utilizar para la consulta, lo que necesito es pasar purchaseToken del usuario en el servidor.

No estoy seguro de qué método debo tomar para verificar la compra del usuario, y marcar el estado del usuario en mi base de datos, tal vez ambos?

Y me temo que hay una situación, si un usuario compró este artículo de google play, pero por alguna razón, sólo en ese momento, cuando mi aplicación puso en marcha la verificación a mi servidor, la conexión de red es hacia abajo o mi propio servidor está abajo , Usuario acaba de pagar el dinero en Google Play, pero no registrar la compra en mi servidor? ¿Qué debo hacer, ¿Cómo puedo hacer frente a esta situación.

Suena lo que estás buscando es una forma de comprobar si el usuario tiene características premium activadas en su cuenta, por lo que es aquí donde empezaría;

Asegúrese de que hay un indicador de algún tipo en su base de datos que indica si el usuario tiene características premium e incluye que en la carga útil de respuesta de la API cuando solicita información de la cuenta. Este indicador será su principal autoridad para "características premium".

Cuando un usuario realiza una compra en la aplicación, almacene en caché los detalles (identificador de pedido, identificador de pedido y producto) localmente en el cliente (es decir, la aplicación) y envíelo a su API.

Su API debe enviar el purchaseToken a la API de Google Play Developer para su validación.

Algunas cosas pueden pasar de aquí:

  1. El recibo es válido, su API responde al cliente con un código de estado Ok 200
  2. El recibo no es válido, su API responde al cliente con un código de estado de 400 solicitudes incorrectas
  3. La API de Google Play está inactiva, su API responde con un código de estado 502 Bad Gateway

En el caso de 1. o 2. (códigos de estado 2xx o 4xx), su cliente borra la memoria caché de los detalles de la compra porque ya no la necesita porque la API ha indicado que ha sido recibida.

Tras una validación satisfactoria (caso 1.), debe establecer el indicador premium como true para el usuario.

En el caso de 3. (código de estado 5xx) o un tiempo de espera de red, el cliente debe seguir intentando hasta que reciba un código de estado 2xx o 4xx de su API.

Dependiendo de tus requisitos, puedes esperar unos segundos antes de enviarlo de nuevo o simplemente enviar los detalles a tu API cuando la aplicación vuelva a lanzarse o salga de segundo plano si los detalles de la compra están presentes en la caché de la aplicación.

Este enfoque debería hacerse cargo de los tiempos de espera de la red, los servidores no disponibles, etc.

Ahora hay algunas preguntas que usted necesita considerar:

¿Qué debe suceder inmediatamente después de una compra? ¿Debe la aplicación esperar hasta que la validación sea satisfactoria antes de proporcionar contenido premium o debería conceder acceso provisionalmente y quitarlo si la validación falla?

La concesión de acceso provisional a funciones premium suaviza el proceso para la mayoría de sus usuarios, pero también concederá acceso a una serie de usuarios fraudulentos mientras su API valida la purchaseToken .

Para poner esto de otra manera: La compra es válida hasta que se pruebe fraudulento o; Fraudulentas hasta que se demuestre su validez?

Con el fin de identificar si el usuario todavía tiene una suscripción válida cuando su período de suscripción viene para la renovación, tendrá que programar una revalidación en el purchaseToken para ejecutar en el expiryTimeMillis que se devolvió en el resultado .

Si el expiryTimeMillis está en el pasado, puede establecer el indicador premium en false. Si es en el futuro, vuelva a programarlo para el nuevo expiryTimeMillis .

Por último, para garantizar que el usuario tenga acceso premium (o no), su aplicación debe consultar su API para ver los detalles de los usuarios en el lanzamiento de la aplicación o cuando sale de segundo plano.

Puedes intentar usar Compras.suscripciones: obtener servidor. Toma packageName, subscriptionId y token como paramaters y requiere autorización .

Comprueba si la compra de suscripción de un usuario es válida y devuelve su tiempo de caducidad.

Si tiene éxito, este método devuelve un recurso Purchases.subscriptions en el cuerpo de la respuesta.

Respondo a esta preocupación

La conexión de red está abajo o mi propio servidor está abajo, el usuario acaba de pagar el dinero en Google Play, pero no registraron la compra en mi servidor? ¿Qué debo hacer, ¿Cómo puedo hacer frente a esta situación.

La situación es:

El usuario compra el elemento 'abc' usando el servicio google play -> devolver OK -> no se puede verificar con el servidor por algunas razones, como por ejemplo, no hay conexión a Internet.

La solución es:

En el lado del cliente, antes de mostrar el botón "Google Wallet", comprueba si el elemento "abc" ya es propiedad.

  • En caso afirmativo, vuelva a verificar con el servidor
  • Si no, muestra el botón "Google Wallet".

Compra de compra = mInventory.getPurchase ('abc');

 if (purchase != null) // Verify with server else // show Google Wallet button 

https://developer.android.com/google/play/billing/billing_reference.html#getSkuDetails

  • Cambiar el idioma predeterminado de los productos integrados en Android
  • En la aplicación de facturación - BillingHelper no completamente instanciado
  • Compra de aplicaciones en Android que se bloquea después del pago
  • IabResult: Servicio de facturación no disponible en el dispositivo. (respuesta: 3: Facturación no disponible)
  • Error: esta versión de la aplicación no está configurada para la facturación a través de Google Play
  • Google IAP devuelve un símbolo de compra corto para la verificación
  • Hacer donaciones a través de la facturación en la aplicación
  • Android en la facturación de aplicaciones - Error al recuperar información del servidor
  • Error al actualizar el inventario. Facturación en la aplicación
  • ¿Cómo utilizar la Biblioteca de facturación de Android?
  • Suscripciones a Playstore - estrategia de pruebas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.