Facturación en la aplicación de Android: Security.java dice "Error en la verificación de la firma"
He implementado una aplicación de prueba con la facturación en aplicaciones de Android. He llenado mi clave pública en el archivo Security.java. Todo funciona, pero cuando envío el pago, la aplicación se bloquea. Recibo un error en LogCat que dice "Error de verificación de firma", que corresponde a este bit de código:
if (!sig.verify(Base64.decode(signature))) { Log.e(TAG, "Signature verification failed."); return false; }
Si cambio ese bit para devolver true en lugar de devolver false, entonces todo funciona correctamente – puedo enviar el pago y volver a la aplicación con seguridad – pero estoy asumiendo que algo más está mal, ya que probablemente debería cambiar eso para devolver true.
- ¿La mejor forma de proteger datos sensibles a aplicaciones de Android?
- Protección de una aplicación para el mercado
- Preguntas relacionadas con la seguridad y el diseño de la facturación en la aplicación
- Cómo agregar PBKDF2WithHmacSHA1 para android api 8 (Froyo)
- ¿Necesito proteger mi aplicación de Android de ser copiado?
¿Alguna idea sobre qué podría estar causando esto?
- Evitar la descompilación de android apk
- ¿Cómo puedo proteger una aplicación de Android a un dispositivo?
- ¿Debemos usar el proveedor de seguridad de google con OkHttp?
- Verificar que Android apk no ha sido reempaquetado?
- Seguridad de la carpeta de activos de Android
- Bluetooth seguro vs. inseguro
- Requerir acceso cada vez que el usuario vuelve a la aplicación de Android
- De android - CHANGE_COMPONENT_ENABLED_STATE
Ese error de verificación de firma puede ser causado por:
1.- Una clave pública errónea . Tal vez se haya olvidado de copiar algún personaje. Ocurre
2.- El archivo .apk debe estar firmado . No se puede usar debug.keystore, si lo hace, su cadena de firma estará vacía.
Y recuerde, para probar la facturación en la aplicación:
-
Agregue la clave pública de Android Market a Security.java (
String base64EncodedPublicKey = "your public key here"
) -
Construir en modo de liberación y firmarlo (si está utilizando Eclipse, puede utilizar el Asistente para exportación).
-
Cargue la versión de lanzamiento en Android Market, no la publique y cree la lista de productos.
-
Instale la aplicación en su dispositivo (adb -d install myapp.apk) y haga una cuenta de prueba primaria en su dispositivo.
En mi caso había un problema bien escondido.
Cuando configuré por primera vez la facturación en la aplicación, intenté respuestas estáticas y compré el ítem android.test.purchased. Cuando cambié a artículos de producción y traté de consultar el inventario, ese producto falso causó todos mis problemas.
Así pues, en este caso, la solución era quitar el producto falso de mi artículo poseído.
Basta con añadir en el archivo IABHelper.java este fragmento:
Purchase p = new Purchase(itemType, purchaseData, signature); try { consume(p); } catch (IabException e) { e.printStackTrace(); }
En la instrucción else del método que tiene esta firma:
int queryPurchases(Inventory inv, String itemType) throws JSONException, RemoteException
Una vez limpiado sus propios artículos, vuelva a volver al original el archivo java del ayudante. Por supuesto, esto es sólo para la fase de desarrollo.
En mi caso, pegué una clave pública incorrecta que tiene un mismo prefijo y sufijo. Sólo asegúrese 100% de que es correcto.
- ¿Es posible generar una miniatura desde una url de vídeo en android
- Configuración de una clave personalizada al empujar nuevos datos a la base de datos de firebase