En la facturación de la aplicación no funciona después de la actualización – Google Store

He implementado la aplicación de facturación en mi aplicación – y muy recientemente google se ha actualizado, anteriormente estaba probando la facturación en la aplicación con "android.test.purchased" y estaba funcionando bien (comprar versión completa y restauración de la versión completa) .

Ahora tomé las clases cambiadas de aquí https://code.google.com/p/marketbilling/source/detail?r=7bc191a004483a1034b758e1df0bda062088d840

Después de que no soy capaz de probar la aplicación que da el siguiente error en el Logcat "IabHelper: In-app billing error: Purchase signature verification FAILED for sku android.test.purchased ".

He comprobado con mi clave, el nombre del paquete y también la versión de la aplicación todo es correcto, ¿ha hecho frente alguno a este problema?

Por favor, ayúdame con esto.

Esto es debido al método verifyPurchase () en la clase Security que ha cambiado en las nuevas revisiones. Permítanme mostrarles cuál es el problema exacto es:

Cambios en la clase de seguridad

CÓDIGO ANTIGUO

  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; } 

Nuevo código

 public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) || TextUtils.isEmpty(signature)) { Log.e(TAG, "Purchase verification failed: missing data."); return false; } PublicKey key = Security.generatePublicKey(base64PublicKey); return Security.verify(key, signedData, signature); } 

Según lo que he buscado y probado desde Nuevo código,

¿Por qué sucede porque no vamos a obtener ninguna firma mientras estamos utilizando un producto ficticio como "android.test.purchased". Así que en el código antiguo está funcionando bien porque estábamos devueltos true, incluso si la firma no se da y para el código nuevo estamos devolviendo falso.

más información sobre los datos de la firma nula o en blanco de link1 y link2

Así que sugiero que acaba de reemplazar el método de código antiguo verifyPurchase () en lugar de Nuevo método de código.

Creo que puede ser Nuevo Código funcionará bien para el producto real, pero no en el producto ficticio. Pero aún no he probado para el producto real.

Déjame buscar más sobre esto, por qué cambiaron el código y cuál es el propósito detrás de eso.

EDITAR:

BuildConfig.DEBUG también le dará la solución para las compras de prueba.

En el verifyPurchase he cambiado return false a:

  Log.e(TAG, "Purchase verification failed: missing data."); if (BuildConfig.DEBUG) { return true; } return false; 

pero usted debe ser consciente de utilizar esto sólo en escenarios de prueba.

Esto devolverá true, si tiene una compilación de depuración y los datos de firma faltan. Puesto que el BuildConfig.DEBUG será falso en una compilación de producción esto debería estar bien. Pero mejor es quitar este código después de que todo esté depurado.

He editado un código en el método verifyPurchase (), lo compruebo a continuación:

 public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { if (signedData == null) { Log.e(TAG, "data is null"); return false; } if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) || TextUtils.isEmpty(signature)) { Log.e(TAG, "Purchase verification failed: missing data."); if (BuildConfig.DEBUG) { Log.d("DeBUG", ">>>"+BuildConfig.DEBUG); return true; } return false; } PublicKey key = Security.generatePublicKey(base64PublicKey); return Security.verify(key, signedData, signature); } 

Conseguí esto del GvS's answer de GvS's answer en la verificación de la compra de la facturación de la compra fallada .

espero que sea útil para usted.

Yo era el que informaba al equipo de seguridad de Google acerca de estos errores de seguridad. Por favor, sea paciente hasta que hago la divulgación pública de estos errores, ya que le concedí tiempo a Google para arreglarlos. Si no escriben grandes sitios sobre este problema, lo revelaré con un exploit de trabajo el 6 de noviembre.

Como usted ya miró verifyPurchase (), el error debe ser obvio. Si la firma dada es una cadena vacía, el método devuelve true (ya que devuelve true en default).

  • Android en la verificación de compra de facturación de aplicaciones no se pudo
  • Amazon IAP SDK: No hay respuesta al probar IAPs en Live App Testing
  • Comprobación de la firma del servidor de compras de Android en la aplicación mediante php OpenSSL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.