签名validation失败 – Android应用程序内购买

我已经在Android应用程序的应用程序结算中实现了它,虽然它可以与testing常量一起工作,但却打破了真实的产品。

我上传了Google Play上的草稿,创build并发布了产品,在设备上安装了完全相同的应用程序(包含正确的base64EncodedPublicKey),并使用了正确的testing帐户(设备上的主帐户和我设置的主帐户在我的开发者帐户上)

stream程就是我上Google Play Activity,在那里我可以看到产品及其详细信息,我按下购买,介绍testing帐户密码,从活动中获取,获得祝贺信息,

产品签名validation失败(响应:-1003:购买签名validation失败)

该项目实际上是购买(它出现在Google Checkout和第二次购买尝试它说“项目已经拥有”)。 此外,我只使用Google的TriviaDrive示例代码。

任何build议都非常有帮助。 谢谢!

在应用程序结算文档中有一个名为“ 启动您与Google Play的连接”的部分。

它告诉你,你需要一个base64编码的公钥来实例化你的IabHelper。 您可以从Google Play开发者控制台获取此代码。 login到控制台,点击应用程序,然后进入“服务和API”选项卡。

IabHelper mHelper; @Override public void onCreate(Bundle savedInstanceState) { // ... String base64EncodedPublicKey; // compute your public key and store it in base64EncodedPublicKey mHelper = new IabHelper(this, base64EncodedPublicKey); } 

请考虑文档中build议的安全build议:

安全build议:强烈build议您不要硬编码Google Play提供的确切的公共许可证密钥string值。 相反,您可以在运行时从子string构造整个公共许可证密钥string,或者在将其传递给构造函数之前,从encryption存储中检索它。 这种方法使恶意的第三方更难以修改APK文件中的公共许可证密钥string。

IAB v3中出现此错误的另一个原因是,如果您在一台设备上购买产品(例如订阅),并且购买信息不能完全进入另一台设备上的Play商店应用的caching中。

我有一个可怕的时期,在一个奇巧电话购买订阅后,另一个电话(姜饼)得到这个-1003错误。 我将其追溯到getpurchases()方法只返回带有(正确)列表购买的INAPP_PURCHASE_ITEM_LIST的事实。 INAPP_PURCHASE_DATA_LIST和INAPP_DATA_SIGNATURE_LIST返回为空。 (即使我可以在Play应用中看到订阅。)

签名是空的,所以当然得到了签名validation错误。 在经历了很多头疼的事情之后,惊慌失措的为什么它不能正常工作,突然之间没有我做任何事情。 我认为Google Services / Play应用程序最终刷新了caching并进行了更新。

鉴于此,我认为解决scheme可能只是沉默,直到完整的购买信息传播到播放服务…. w / iabhelper它是这样的:

 if (result.getResponse() != IabHelper.IABHELPER_VERIFICATION_FAILED) complain("Failed to query inventory: " + result); Log.d(TAG, "Query inventory was NOT successful."); 

这似乎是一个相当大的bug – Play商店应该等到知道所有关于购买的事情之后,再把它传递给应用程序,我想。 我不知道这个问题是否在采购stream程的其他方面performance出来,但是,

我有我的订阅这个问题,因为我没有设置“itemType”

  mHelper.launchPurchaseFlow(this, SKU_INFINITE_GAS, IabHelper.ITEM_TYPE_SUBS, RC_REQUEST, mPurchaseFinishedListener, payload); 

1>产品的签名validation失败(响应:-1003:购买签名validation失败)

这个错误背后的原因是Base64Encoded不匹配。 从发布者帐户获取许可证密钥,在一些文本编辑器中复制它,删除任何空格并粘贴。

2>“已经拥有的商品”当我们从应用程序内购买谷歌得到的响应时,我们需要消费应用程序内产品以通知其已被购买和交付。 但是,如果不知怎么,如果你的崩溃,或者你忘了消费谷歌将不会允许再购买,直到你消耗它。 在你的情况下,应用程序抛出签名validation失败错误..说明第二个问题的原因

希望这个帮助

请务必使用UTF8编码文件