public static boolean verify(PublicKey publicKey, String signedData, String signature) { Log.i(TAG, "signature: " + signature); Signature sig; try { sig = Signature.getInstance(SIGNATURE_ALGORITHM); sig.initVerify(publicKey); sig.update(signedData.getBytes()); if (!sig.verify(Base64.decode(signature))) { Log.e(TAG, "Signature verification failed."); return false; } return true; } catch (NoSuchAlgorithmException e) { Log.e(TAG, "NoSuchAlgorithmException."); } catch (InvalidKeyException e) { Log.e(TAG, "Invalid key specification."); } catch (SignatureException e) { Log.e(TAG, "Signature exception."); } catch (Base64DecoderException e) { Log.e(TAG, "Base64DecoderException.", e); } return false; }
i putted Key của công chúng về tài khoản google play thử nghiệm của tôi nhưng phương pháp này trở lại giá trị false. tôi đã sử dụng dự án market_billing của SDK Android cho InApp Billing.Is có bất kỳ giá trị nào khác ngoại trừ khóa Công khai được sử dụng trong thanh toán InApp.InApp mua trong Android
logcat output-
09-03 14:10:43.439: I/BillingService(3683): Starting 09-03 14:10:43.556: D/dalvikvm(3683): GC_EXTERNAL_ALLOC freed 843 objects/59184 bytes in 99ms 09-03 14:10:43.665: I/BillingService(3683): Service starting with onCreate 09-03 14:10:43.669: I/BillingService(3683): Market Billing Service Successfully Bound 09-03 14:10:43.732: I/BillingService(3683): Market Billing Service Connected. 09-03 14:10:48.595: I/BillingService(3683): isBillingSupported response was: RESULT_OK 09-03 14:10:48.595: I/BillingService(3683): requestPurchase() 09-03 14:10:48.619: I/BillingService(3683): current request is:4403061459445471804 09-03 14:10:48.619: I/BillingService(3683): REQUEST_PURCHASE Sync Response code: RESULT_OK 09-03 14:10:48.708: I/BillingService(3683): onPause()) 09-03 14:11:04.228: I/BillingService(3683): Received action: com.android.vending.billing.IN_APP_NOTIFY 09-03 14:11:04.228: I/BillingService(3683): notify got id: android.test.purchased 09-03 14:11:04.228: I/BillingService(3683): getPurchaseInformation() 09-03 14:11:04.228: I/BillingService(3683): Nonce generateD: -9092176369901149507 09-03 14:11:04.255: I/BillingService(3683): current request is:7271094427995930240 09-03 14:11:04.255: I/BillingService(3683): GET_PURCHASE_INFORMATION Sync Response code: RESULT_OK 09-03 14:11:04.599: I/BillingService(3683): Received action: com.android.vending.billing.RESPONSE_CODE 09-03 14:11:04.599: I/BillingService(3683): checkResponseCode got requestId: 4403061459445471804 09-03 14:11:04.599: I/BillingService(3683): checkResponseCode got responseCode: RESULT_OK 09-03 14:11:05.044: I/BillingService(3683): Received action: com.android.vending.billing.PURCHASE_STATE_CHANGED 09-03 14:11:05.044: I/BillingService(3683): purchaseStateChanged got signedData: {"nonce":-9092176369901149507,"orders":[{"notificationId":"android.test.purchased","orderId":"transactionId.android.test.purchased","packageName":"com.blundell.test","productId":"android.test.purchased","purchaseTime":1346661666055,"purchaseState":0}]} 09-03 14:11:05.044: I/BillingService(3683): purchaseStateChanged got signature: KZAEykaTIdqZ+to+hJNolkmDcYdliPw+fgg4xa6uBYq77GGiVSma0sbVHCCv3T7WJ5sRMTRLuFgbTM1NC3YEl+paEj5QnIlD1GgDiQBJ9PEErEhGSft1BTmvi+6BS/cu8KFXp7v1h5c+WBNHWNBeNckl433yhoKElOWbY1gvfNakEJ2LdBUesaCbLeHohP+OoZJq4U20zO1sQGhjerRdRpX0Jg7bPJErHTka58GNbaclz/xwVhDs54GZwsBECDceo0fSNfUsmBfpYAe+/kyCnO+Ip+N49pDeN+2FKAnhJ3d8An3IaNX990P8vqShgTHxBpAznc7YHro2sVWtzAXVZQ== 09-03 14:11:05.044: I/BillingService(3683): signedData: {"nonce":-9092176369901149507,"orders":[{"notificationId":"android.test.purchased","orderId":"transactionId.android.test.purchased","packageName":"com.blundell.test","productId":"android.test.purchased","purchaseTime":1346661666055,"purchaseState":0}]} 09-03 14:11:05.052: I/BillingService(3683): signature: KZAEykaTIdqZ+to+hJNolkmDcYdliPw+fgg4xa6uBYq77GGiVSma0sbVHCCv3T7WJ5sRMTRLuFgbTM1NC3YEl+paEj5QnIlD1GgDiQBJ9PEErEhGSft1BTmvi+6BS/cu8KFXp7v1h5c+WBNHWNBeNckl433yhoKElOWbY1gvfNakEJ2LdBUesaCbLeHohP+OoZJq4U20zO1sQGhjerRdRpX0Jg7bPJErHTka58GNbaclz/xwVhDs54GZwsBECDceo0fSNfUsmBfpYAe+/kyCnO+Ip+N49pDeN+2FKAnhJ3d8An3IaNX990P8vqShgTHxBpAznc7YHro2sVWtzAXVZQ== 09-03 14:11:05.068: E/BillingService(3683): Signature verification failed. 09-03 14:11:05.072: D/verified(3683): false 09-03 14:11:05.072: W/BillingService(3683): signature does not match data. 09-03 14:11:05.076: D/AndroidRuntime(3683): Shutting down VM 09-03 14:11:05.076: W/dalvikvm(3683): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0) 09-03 14:11:05.083: E/AndroidRuntime(3683): FATAL EXCEPTION: main 09-03 14:11:05.083: E/AndroidRuntime(3683): java.lang.RuntimeException: Unable to start receiver com.blundell.test.BillingReceiver: java.lang.NullPointerException 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821) 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.app.ActivityThread.access$3200(ActivityThread.java:125) 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083) 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.os.Handler.dispatchMessage(Handler.java:99) 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.os.Looper.loop(Looper.java:123) 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.app.ActivityThread.main(ActivityThread.java:4627) 09-03 14:11:05.083: E/AndroidRuntime(3683): at java.lang.reflect.Method.invokeNative(Native Method) 09-03 14:11:05.083: E/AndroidRuntime(3683): at java.lang.reflect.Method.invoke(Method.java:521) 09-03 14:11:05.083: E/AndroidRuntime(3683): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 09-03 14:11:05.083: E/AndroidRuntime(3683): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 09-03 14:11:05.083: E/AndroidRuntime(3683): at dalvik.system.NativeStart.main(Native Method) 09-03 14:11:05.083: E/AndroidRuntime(3683): Caused by: java.lang.NullPointerException 09-03 14:11:05.083: E/AndroidRuntime(3683): at com.blundell.test.BillingHelper.verifyPurchase(BillingHelper.java:249) 09-03 14:11:05.083: E/AndroidRuntime(3683): at com.blundell.test.BillingReceiver.purchaseStateChanged(BillingReceiver.java:44) 09-03 14:11:05.083: E/AndroidRuntime(3683): at com.blundell.test.BillingReceiver.onReceive(BillingReceiver.java:27) 09-03 14:11:05.083: E/AndroidRuntime(3683): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810) 09-03 14:11:05.083: E/AndroidRuntime(3683): ... 10 more 09-03 14:16:09.611: I/Process(3683): Sending signal. PID: 3683 SIG: 9 09-03 14:16:14.880: I/BillingService(3793): Service starting with onCreate 09-03 14:16:14.888: I/BillingService(3793): Market Billing Service Successfully Bound 09-03 14:16:14.896: I/BillingService(3793): Market Billing Service Connected.
Có người cho tôi biết Xác minh Process.
@ hpique- tôi đang sử dụng cùng một thế hệ khóa công khai và tôi theo dõi trang web dành cho nhà phát triển Android cho tài khoản thử nghiệm http://developer.android.com/guide/google/play/billing/billing_admin.html#billing-testing -setup – Priyanka
Kiểm tra logcat để biết thêm thông tin về những gì có thể xảy ra. – hpique