签名验证失败 - Android应用内购买

时间:2013-03-14 12:52:34

标签: android in-app-purchase

我已经在Android应用程序中实现了应用程序计费,虽然它可以正常使用测试常量,但却打破了真正的产品。

我已将该应用程序上传为Google Play上的草稿,创建并发布了产品,在设备上安装了完全相同的应用程序(包括正确的base64EncodedPublicKey)并使用了正确的测试帐户(设备上的主要帐户&我在开发者帐户上设置了一个)

流程是我上Google Play活动,在那里我可以看到产品及其详细信息,我按下购买,介绍测试帐户密码,它退出活动,收到祝贺消息和

  

产品签名验证失败(回复:-1003:购买   签名验证失败)

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

任何建议都非常有用。谢谢!

5 个答案:

答案 0 :(得分:4)

在In App Billing文档中,有一个名为Initiate your connection to Google Play的部分。

它告诉您需要base64编码的公钥来实例化您的IabHelper。您可以从Google Play开发者控制台获取此代码。登录控制台,单击应用程序,然后转到“服务和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);
}

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

  

安全建议:强烈建议您不要这样做   硬编码由提供的确切公共许可证密钥字符串值   Google Play。相反,您可以构建整个公共许可证密钥   字符串在运行时从子字符串,或从加密中检索它   在将它传递给构造函数之前存储。这种方法成功了   恶意第三方更难以修改公众   APK档案中的许可证密钥字符串。

答案 1 :(得分:2)

此错误可能出现在IAB的第3版中的另一个原因是,如果您在一台设备上购买产品(例如订阅),并且购买信息无法完全进入Play商店应用的缓存中另一种设备。

我有一个可怕的时期,在Kitkat手机上购买订阅后,另一部手机(姜饼)出现了-1003错误。我追溯到这样一个事实:getpurchases()方法只返回带有(正确)列表购买的INAPP_PURCHASE_ITEM_LIST。 INAPP_PURCHASE_DATA_LIST和INAPP_DATA_SIGNATURE_LIST作为null返回。 (尽管我可以在Play应用程序中看到订阅。)

签名为null,因此当然会出现签名验证错误。在经历了很多令人头疼/恐慌之后,为什么它不起作用,突然它没有我做任何事情。我假设Google Services / Play应用程序最终刷新缓存并自行更新。

考虑到这一点,我认为解决方案可能只是将这个错误沉默,直到完整的购买信息传播到Play服务.... w / iabhelper它是这样的:

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

这似乎是一个非常大的错误 - Play商店应该等到它知道购买的所有内容,然后再将其传递给应用程序,我想。我不知道这个问题是否在购买流程的其他方面表现出来,但是你可以去。

答案 2 :(得分:1)

我的订阅存在此问题,因为我没有设置“itemType”

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

答案 3 :(得分:0)

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

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

2 - ; “物品已经拥有” 当我们从谷歌获得针对应用内购买的OK响应时,我们需要使用应用内商品 通知已被买入和交付。 但如果不知何故,如果你的崩溃或你忘了消费它谷歌将不允许再次购买它,直到你消费它。 在您的方案应用程序中,签名验证失败错误..出现第二个问题的原因

希望这个帮助

答案 4 :(得分:0)

请务必使用密钥

以UTF8编码文件