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
- ¿Dónde puedo obtener el precio del artículo, el impuesto total y los gastos de envío al realizar un seguimiento de las compras en Android?
- Android en la facturación de la aplicación ... ¿Por qué hay información contradictoria?
- Proguarding Android Apps - lo esencial es (especialmente en relación con los pagos en la aplicación)
- Obtener el ID de Google utilizado en una compra de facturación integrada en la aplicación
- Métodos alternativos de compra en la aplicación para Android
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.
- ¿Cómo obtener el ID de USUARIO de Google (no el ID del dispositivo) de seguro?
- Compras de Android en la aplicación con Phonegap
- InAppBilling V3 - "purchaseData" y "dataSignature" son nulos al comprar un artículo de suscripción
- Suscripción móvil multiplataforma (Android + iOS)
- Verificación de la firma de compra en la aplicación con PHP openssl
- Token que identifica al usuario
- "Error al recuperar información del servidor RPC S-7 AEC-0" al probar la facturación de Google en la aplicación
- ¿Cuál es la respuesta del producto de suscripción cancelado del desarrollador de google? Api android
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).
- Cargando bibliotecas compartidas de terceros desde una actividad nativa de Android
- No se puede abrir dlopen (libsomething.so) No se puede cargar la biblioteca: link_image : no se pudo enlazar libsomething.so