应用内购买促销代码会破坏远程服务器验证?

Posted

技术标签:

【中文标题】应用内购买促销代码会破坏远程服务器验证?【英文标题】:In-app purchase promo codes breaks remote server verification? 【发布时间】:2016-05-24 16:40:38 【问题描述】:

为应用内购买发布促销代码似乎会阻止应用(再次)执行远程服务器购买验证!

当promo code 用于应用内购买(PURCHASES_UPDATED 广播)时,它将完全绕过购买流程,因此应用没有机会提供用于远程验证的"developerPayload"。

稍后当应用调用getPurchases() 来获取/验证所有者产品时,用于促销购买的purchase data 当然不会包含"developerPayload",但也不会包含"orderId",这对于使用远程验证也很有用Google Play Developer API.

应用应如何验证使用促销代码进行的应用内购买?

允许用户通过 Google Play 商店应用/网站兑换促销代码,从而绕过购买流程,这似乎是一个不应该发生的重大疏忽。

问题报告:

https://code.google.com/p/android/issues/detail?id=200722(关闭错误论坛) https://github.com/googlesamples/android-play-billing/issues/7

类似帖子:

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

【问题讨论】:

简单的解决方法,如果我理解您的要求:让用户卸载您的应用,将促销代码放在 Play 商店的兑换部分,这将重新安装具有该功能的应用。我假设您要向新用户提供促销代码,所以这将是一个边缘案例问题。 【参考方案1】:

这确实是 Google 方面已知的安全问题,因此我将建议一种解决方法。

连同促销代码一起向用户提供由您的服务器生成的服务器 ID,在获得促销购买时验证服务器 ID 并接受一次购买。

当从市场使用时,发送带有推荐人的 id。使用 from app 时有自己的逻辑来提供服务器 ID。

底线没有其他解决方案,但有一些如何识别具有某种 id 的用户。

【讨论】:

以上是关于应用内购买促销代码会破坏远程服务器验证?的主要内容,如果未能解决你的问题,请参考以下文章

通过促销代码进行的应用内购买返回空的开发人员有效负载字符串

iOS 应用内购买的促销代码

对应用商店的应用内购买促销有问题

为啥远程服务器上的签名验证比设备上更安全?

远程服务器返回错误:(407) 需要代理身份验证

在报亭中处理应用内购买