Error en la validación de la firma: compra de aplicaciones en Android

He implementado en la facturación de aplicaciones en una aplicación de Android y aunque funciona bien con las constantes de prueba, se rompe en los productos reales.

He subido la aplicación como borrador en Google Play, he creado y publicado productos, he instalado exactamente la misma aplicación en el dispositivo (incluida la base64EncodedPublicKey correcta) y he utilizado la cuenta de prueba correcta (la cuenta principal en el dispositivo y la que realicé en mi cuenta de desarrollador)

El flujo es el que obtengo en la actividad de Google Play, donde puedo ver el producto y sus detalles, presionar comprar, introducir la contraseña de la cuenta de prueba, salir de la actividad, recibir el mensaje de felicitación y

No se pudo verificar la firma del producto (respuesta: -1003: Error en la verificación de la firma de compra)

El artículo se adquiere realmente (aparece en Google Checkout y en un 2do intento de compra dice "artículo poseído ya"). También he utilizado sólo el código de ejemplo TriviaDrive de Google.

Cualquier sugerencia es muy útil. ¡Gracias!

En la documentación de Facturación de aplicaciones, hay una sección denominada Iniciar la conexión con Google Play .

Le indica que necesitará una clave pública codificada en base64 para instanciar su IabHelper. Puedes obtener este código desde la Consola del programador de Google Play. Inicie sesión en la consola, haga clic en aplicaciones y luego vaya a la pestaña "Servicios y API".

IabHelper mHelper; @Override public void onCreate(Bundle savedInstanceState) { // ... String base64EncodedPublicKey; // compute your public key and store it in base64EncodedPublicKey mHelper = new IabHelper(this, base64EncodedPublicKey); } 

Tenga en cuenta las recomendaciones de seguridad sugeridas en la documentación:

Recomendación de seguridad: Se recomienda encarecidamente que no codifique el valor exacto de la cadena de claves de licencia pública tal como lo proporciona Google Play. En su lugar, puede construir toda la cadena de claves de licencia pública en tiempo de ejecución a partir de subcadenas o recuperarla de un almacén cifrado antes de pasarlo al constructor. Este enfoque hace más difícil para terceros maliciosos modificar la cadena de claves de licencia pública en su archivo APK.

Otra razón por la que este error puede aparecer en v3 de IAB es si compra un producto (por ejemplo, una suscripción) en un dispositivo y la información de compra no lo integra completamente en la caché de la aplicación Play Store en otro dispositivo.

Tuve un período de miedo cuando después de comprar una suscripción en un teléfono Kitkat, otro teléfono (pan de jengibre) estaba recibiendo este error-1003. Lo rastreé hasta el hecho de que el método getpurchases () estaba devolviendo SOLAMENTE el INAPP_PURCHASE_ITEM_LIST con una compra de la lista (correcta). El INAPP_PURCHASE_DATA_LIST y el INAPP_DATA_SIGNATURE_LIST fueron devueltos como null. (Esto fue aunque pude ver la suscripción en la aplicación Play).

La firma era nula, así que por supuesto obtuvo un error de verificación de firma. Después de un montón de arañazos en la cabeza / pánico acerca de por qué no estaba funcionando, de repente funcionó sin que yo haga nada. Supongo que la aplicación Google Services / Play finalmente liberó el caché y se actualizó.

Teniendo en cuenta esto, creo que la solución puede ser simplemente silenciar ese error hasta que la información de compra completa se propaga a Play Services …. w / iabhelper fue algo así como:

 if (result.getResponse() != IabHelper.IABHELPER_VERIFICATION_FAILED) complain("Failed to query inventory: " + result); Log.d(TAG, "Query inventory was NOT successful."); 

Esto parece un error bastante grande – la tienda de Play debe esperar hasta que sepa todo acerca de la compra antes de pasarlo a una aplicación, creo. No sé si o no esta cuestión se manifiesta en otras áreas del flujo de compra, pero ya va.

Tuve este problema con mis suscripciones porque no he establecido el "itemType"

  mHelper.launchPurchaseFlow(this, SKU_INFINITE_GAS, IabHelper.ITEM_TYPE_SUBS, RC_REQUEST, mPurchaseFinishedListener, payload); 

1> No se pudo verificar la firma del producto (respuesta: -1003: Error en la verificación de la firma de compra)

La razón detrás de este error es que Base64Encoded no coincide. Obtener la clave de licencia de la cuenta del editor, copiarlo en algún editor de texto quitar los espacios y pegarlo.

2> "Elemento ya poseído" Cuando recibimos la respuesta correcta de google para la compra en la aplicación, debemos consumir el producto en la aplicación para notificar que se ha comprado y entregado. Pero si de alguna manera si sus accidentes o se le olvidó consumir google no permitirá a comprar de nuevo hasta que lo consumen. En su aplicación de escenario lanzó Error de verificación de firma error ..que es la razón de la segunda edición

Espero que esto ayude

Asegúrese de codificar en UTF8 el archivo con la clave

  • Android LVL y InAppBilling: cómo seleccionar la cuenta de usuario actual para la compra?
  • Cómo crear una compra en la aplicación para actualizar la versión gratuita a la versión de pago de Android
  • Android RESTORE_TRANSACTIONS devuelve RESULT_SERVICE_UNAVAILABLE
  • Flujo de usabilidad de Android en la aplicación de facturación compra de un bien virtual
  • Error de facturación en la aplicación
  • Prueba de facturación de aplicaciones en otros países
  • LibGdx Gdx-Pay extensión obtener el precio del artículo
  • Android: inApp confirmación de recibo de compra google play
  • IN_APP_NOTIFY con la versión 3 de la aplicación
  • Cómo implementar la compra en la aplicación en mi aplicación Android?
  • Excepción: No se puede iniciar la operación asíncrona (actualizar el inventario) porque otra operación asíncrona (launchPurchaseFlow) está en curso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.