2017-01-31 3 views
1

Ich habe eine Android-Anwendung gebaut, die den Benutzern die Möglichkeit bietet, einen Artikel zu kaufen, und der Google-Kaufdialog ist die Rückzahlung erfolgreich, aber auf Aktivität Ergebnis der Anwendung fehlgeschlagen In der Security.java verify-Methode geben Sie immer false "sig.verify (Based64.decode (signature))" zurück.Android In-App-Abrechnung Sicherheit überprüfen Methode immer falsch zurück

Hilfe, warum es passiert und was ich zu tun habe. Ich habe die App im Play Store veröffentlicht und verwende nicht den android.test. * Sku Ich habe meinen eigenen skus

Antwort

2

Haben Sie ihn richtig initialisiert?

Erhalten öffentlichen Schlüssel:

public PublicKey getAPKKey(String keyFactoryAlgorithm) throws Exception{ 
    byte[] decodedKey = Base64.decode("...your google play public key...", Base64.DEFAULT); 
    KeyFactory keyFactory = KeyFactory.getInstance(keyFactoryAlgorithm); 
    return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey)); 
} 

Sie können Ihren öffentlichen Schlüssel in der Google Play Developer Console finden.

überprüfen dann die Unterschrift:

// get purchase data 
Bundle ownedItems = ... query purchases 
String purchaseData = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST").get(0); // just index 0 for demonstration 
String signature = ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE_LIST").get(0); // just index 0 for demonstration 

PublicKey pkey = getAPKKey("RSA"); 
Signature sig = Signature.getInstance("SHA1withRSA"); 
sig.initVerify(pkey); 
sig.update(purchaseData.getBytes()); 

if(sig.verify(Base64.decode(signature, Base64.DEFAULT))) { 
    // ok 
} else { 
    // not ok 
} 
+0

Danke, aber es kann Base64.DEFAULT nicht lösen. –

+0

@AmjadOmari stellen Sie sicher, dass Sie die richtige Base64 importieren, wie von android.util.Base64. Es ist seit API Version 8 vorhanden und sollte definitiv da sein. –

+0

Ich habe das richtige für Base64 importiert, aber die sig.verify gibt immer noch false zurück und ich habe überprüft, dass ich den richtigen Google Play öffentlichen Schlüssel "Lizenzschlüssel für diese Anwendung" verwenden, –

Verwandte Themen