通过促销代码进行的应用内购买 return 空开发者负载字符串

In-app purchases made via promo codes return empty developer payload string

我有一个发布到 alpha 通道的应用程序,其中有一个应用程序内(未)管理的项目,价格为 1 美元。

当我正常购买时,即使用 credit/debit 卡 Google returns 正确的开发者负载字符串,但如果我选择 "redeem" 促销代码并且输入所述代码,Google returns 一个空的开发人员负载字符串,因此在 'onIabPurchaseFinished()'.

中身份验证失败

我应该提一下,只有当我选择从应用程序的购买流程中兑换代码时才会发生这种情况,如果我先打开 Play 商店,兑换代码,然后再回来打开应用程序,一切都会完美无缺。

这是 Google 的错误吗?

编辑:Play 商店是预料之中的事情,因为它无法知道您的有效负载并且无需检查即可完成购买。

此问题已在 google 的 android-play-billing 示例 repo 上打开。 看起来它被忽略了很长时间,最终以 this 评论关闭。总之,他们有以下建议。


我们审查了我们的指南和内部 APIs,并且由于应用内结算 API(包括促销代码)的所有功能都不支持 developerPayload,我们删除将其用作安全检查的建议。

正如您在我们的文档中看到的那样,在实施应用内结算 (https://developer.android.com/google/play/billing/billing_integrate.html) 页面上,我们添加了一条建议:

警告:请勿将 developerPayload 字段用于安全验证目的。完成与应用内结算相关的任务时,此字段并不总是可用。有关安全最佳实践的更多信息,请参阅应用内结算安全和设计指南。

我们建议使用 Play Developer API.

在您自己的后端进行验证