para - Android en la verificación de compra de facturación de la aplicación falló
facturas facil apk full (4)
Asegúrese de haber iniciado sesión con el usuario correcto en su teléfono o, por ejemplo, agregue la cuenta de google de su teléfono como usuario de prueba en la consola del desarrollador.
http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static :
En algunos casos, los elementos reservados pueden devolver respuestas estáticas firmadas, lo que le permite probar la verificación de firmas en su aplicación. Los elementos reservados solo devuelven respuestas firmadas si el usuario que ejecuta la aplicación tiene una cuenta de desarrollador o de prueba.
Tengo problemas para implementar la facturación de la aplicación en mi aplicación de Android. estoy obteniendo un error en la verificación de la firma de compra La primera vez que me puse duro fue la clave base64, pero la revisé muchas veces y sigo recibiendo el error. Luego, eché un vistazo al archivo Security.java y encontré este método que edité para obtener información. sobre lo que estaba mal:
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
if(TextUtils.isEmpty(signedData)) Log.d(TAG, "SIGNED DATA EMPTY");
if(TextUtils.isEmpty(base64PublicKey)) Log.d(TAG, "KEY IS EMPTY");
if(TextUtils.isEmpty(signature)) Log.d(TAG, "SIGNATURE IS EMPTY");
Log.e(TAG, "Purchase verification failed: missing data.");
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
Y estoy recibiendo "la firma está vacía". Incluso después de seguir los pasos a continuación: -Signar el archivo apk con mi clave de lanzamiento -subirlo como borrador -instalarlo en un dispositivo con "adb -d install app.apk"
Estoy probando con compras reales. Gracias.
Editar El flujo de compra está bien, me sale el error cuando llamo a queryInventoryAsync
Puede utilizar el SKU de prueba para realizar la prueba, como se explica aquí . Estos son:
-
android.test.purchased
-
android.test.canceled
-
android.test.refunded
-
android.test.item_unavailable
Estas compras serán exitosas (al menos el android.test.purchased) incluso en escenarios de prueba y depuración, sin la necesidad de cancelar la compra.
En VerifyPurchase cambié, devolví return false
a:
Log.e(TAG, "Purchase verification failed: missing data.");
if (BuildConfig.DEBUG) {
return true;
}
return false;
pero debe tener en cuenta que debe usar esto solo en escenarios de prueba.
Esto devolverá verdadero, si tiene una compilación de depuración y faltan los datos de la firma. Dado que BuildConfig.DEBUG será falso en una compilación de producción, esto debería estar bien. Pero mejor es eliminar este código después de que todo esté depurado.
Reemplace su método verifyPurchase()
por debajo de uno. Use el código antiguo que se proporciona a continuación, el desarrollador de google está tratando de resolver este error en un futuro cercano, pero antes de actualizar su código, debe preferir el código de abajo.
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
if (signedData == null) {
Log.e(TAG, "data is null");
return false;
}
boolean verified = false;
if (!TextUtils.isEmpty(signature)) {
PublicKey key = Security.generatePublicKey(base64PublicKey);
verified = Security.verify(key, signedData, signature);
if (!verified) {
Log.w(TAG, "signature does not match data.");
return false;
}
}
return true;
}
Revisa este enlace para más información:
La facturación de la aplicación no funciona después de la actualización - Google Store
Utilice intentar reemplazar el método verifyPurchase()
CODE método verifyPurchase()
en su proyecto. Pero debería suceder solo cuando intentas comprar productos de prueba. Avíseme para la compra de productos reales también después de usar este código.
Editar:
Por qué sucede porque no obtendremos ninguna firma mientras estemos usando un producto ficticio como "android.test.purchased". Por lo tanto, en el código antiguo está funcionando bien porque nos devolvimos el valor verdadero incluso si no se proporciona la firma y para el código Nuevo estamos devolviendo el valor falso.
más información sobre los datos de la firma nula o en blanco desde link1 y link2
Por lo tanto, le sugiero que simplemente reemplace el método de código antiguo verifyPurchase()
lugar del método de código nuevo.
Creo que es posible que New Code funcione bien para el producto real, pero no en el producto ficticio. Pero aún no he probado el producto real.
o
Utilice la respuesta de GvS para las compras de prueba, y también la buena solución para el nuevo código.
Espero que resuelva tu problema.
establecer el valor de retorno a verdadero en
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
return true;
}
despues de probar deshacer el cambio