15

我已经在一个 Android 应用程序上实现了应用计费,虽然它适用于测试常量,但它在实际产品上会中断。

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

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

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

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

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

4

5 回答 5

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 文件中的公共许可证密钥字符串。

于 2014-01-23T18:17:14.207 回答
2

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

我有一个可怕的时期,在 Kitkat 手机上购买订阅后,另一部手机(姜饼)出现此 -1003 错误。我将其追溯到 getpurchases() 方法仅返回带有(正确)列表购买的 INAPP_PURCHASE_ITEM_LIST 的事实。INAPP_PURCHASE_DATA_LIST 和 INAPP_DATA_SIGNATURE_LIST 返回为空。(即使我可以在 Play 应用中看到订阅。)

签名为空,所以它当然得到了签名验证错误。在对为什么它不起作用而感到头疼/恐慌之后,突然它在我没有做任何事情的情况下起作用了。我认为 Google Services/Play 应用程序最终刷新了缓存并自行更新。

鉴于此,我认为解决方案可能是在完整的购买信息传播到 Play Services 之前使该错误保持沉默...... w/iabhelper 它类似于:

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

这似乎是一个相当大的错误——我认为,Play 商店应该等到它知道有关购买的所有信息后再将其传递给应用程序。我不知道这个问题是否会在购买流程的其他方面表现出来,但你去吧。

于 2014-03-29T06:32:21.610 回答
1

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

 mHelper.launchPurchaseFlow(this,
            SKU_INFINITE_GAS, IabHelper.ITEM_TYPE_SUBS,
            RC_REQUEST, mPurchaseFinishedListener, payload);
于 2015-10-14T12:34:59.173 回答
0

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

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

2> “商品已拥有” 当我们从谷歌收到应用内购买的 OK 响应时,我们需要消费应用内产品以通知其已购买和交付。但是,如果您以某种方式崩溃或忘记使用它,谷歌将不允许您再次购买它,直到您使用它。在您的场景中,应用程序抛出签名验证失败错误..这就是第二个问题的原因

希望这有帮助

于 2013-11-29T09:00:48.967 回答
0

请务必使用密钥对文件进行 UTF8 编码

于 2014-06-11T08:09:28.130 回答