我一直致力于一个具有非常基本的InAppBilling需求的应用程序(用户可以购买1次升级到该应用程序)。我在测试期间碰到了一个令我感到困惑的问题。
使用android.test.purchase成功测试后,我继续使用真实项目进行测试(作为控制台中的许可证测试人员)。我成功购买了这件物品。
然后我重新启动了应用程序 - 只有当我调用" queryInventoryAsync"
时才会遇到错误03-12 14:22:51.795 15607-15632/com.mybodyjourney.mybodyjourney E/IABUtil/Security﹕ Invalid key specification.
03-12 14:22:51.795 15607-15632/com.mybodyjourney.mybodyjourney W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x4193dce0)
03-12 14:22:51.825 15607-15632/com.mybodyjourney.mybodyjourney E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-1176
Process: com.mybodyjourney.mybodyjourney, PID: 15607
java.lang.IllegalArgumentException: java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
at com.mybodyjourney.mybodyjourney.util.Security.generatePublicKey(Security.java:91)
at com.mybodyjourney.mybodyjourney.util.Security.verifyPurchase(Security.java:71)
at com.mybodyjourney.mybodyjourney.util.IabHelper.queryPurchases(IabHelper.java:869)
at com.mybodyjourney.mybodyjourney.util.IabHelper.queryInventory(IabHelper.java:544)
at com.mybodyjourney.mybodyjourney.util.IabHelper.queryInventory(IabHelper.java:522)
这是在没有更改代码库之后。
然后我将相同的代码部署到不同的设备。第一次运行它运行正常(没有错误),并通知我,我已经购买了该项目(这是正确的)。
然后我在第二台设备上关闭并重新打开了应用程序,并立即遇到与原始设备相同的错误。
任何帮助都将非常感谢,因为我无法找到任何在线成功解决此问题的人。
答案 0 :(得分:2)
事实证明我在我的代码中犯了一个错误(惊喜)。我犯的错误是在我的公钥字符串的定义中(我已经在已编码的字符串上运行了Base64.encode)。
让我感到震惊的事实是,直到我第一次真正推出一个项目 - Google的服务全部采取行动并完美地完成。它从来没有抱怨过钥匙。
这表明在第一次购买之前,开发者帐户尚未最终确定某些内容?
无论哪种方式,现在一切都已解决。