Android 为什么使用应用内计费设置开发者有效负载很重要?
我正在使用应用内计费API的第3版。我有一个单一的、管理的、非消耗品。我还没有在我的应用程序中发布此功能,所以我想在进行任何购买之前决定购买有效负载的内容 发件人: 在发出购买请求时设置开发者有效负载字符串 使用应用内计费版本3 API,您可以包含一个“开发者” 向Google发送购买请求时的有效负载字符串标记 玩通常,这用于传入唯一 标识此采购请求。如果指定字符串值, Google Play将返回此字符串以及购买响应。 随后,当您对此次购买进行查询时,Google Play 返回此字符串和购买详细信息 您应该传入一个字符串标记,以帮助应用程序 识别进行购买的用户,以便以后进行验证 这是该用户的合法购买。对于消耗品, 您可以使用随机生成的字符串,但用于非耗材 您应该使用唯一标识用户的字符串 当您从Google Play获得回复时,请确保验证 开发人员负载字符串与您发送的令牌匹配 在购买请求之前。作为进一步的保障 预防措施,您应该在自己的安全设备上执行验证 服务器Android 为什么使用应用内计费设置开发者有效负载很重要?,android,android-billing,Android,Android Billing,我正在使用应用内计费API的第3版。我有一个单一的、管理的、非消耗品。我还没有在我的应用程序中发布此功能,所以我想在进行任何购买之前决定购买有效负载的内容 发件人: 在发出购买请求时设置开发者有效负载字符串 使用应用内计费版本3 API,您可以包含一个“开发者” 向Google发送购买请求时的有效负载字符串标记 玩通常,这用于传入唯一 标识此采购请求。如果指定字符串值, Google Play将返回此字符串以及购买响应。 随后,当您对此次购买进行查询时,Google Play 返回此字符串和购买
无论正确与否,我决定不采取“进一步的安全预防措施”,即设置服务器来执行购买验证。我不存储自己的购买记录——我总是调用计费API。那么,我真的有什么理由进行有效载荷验证吗?在报告购买的物品之前,验证API本身肯定会验证用户的身份,如果攻击者已经破坏了设备(应用程序或google play API),我看不出在设备上对用户的身份进行额外检查有任何好处,因为这样做很容易规避。或者有没有我没有想到的理由这样做?如果你没有保存记录,就无法验证你收到的是你发送的。因此,如果您向开发人员负载添加了一些内容,您可以相信它是合法的(如果签名验证,这是一个合理的假设),或者不完全信任它,只将其用作参考,但不用于验证许可证状态等。例如,如果您存储了用户电子邮件,您可以使用该值,而不是要求他们再次输入,这稍微更方便用户,但如果不存在该值,您的应用程序将不会中断 就我个人而言,我认为整个“最佳实践”部分令人困惑,试图让您完成API真正应该做的工作。由于购买与谷歌帐户绑定,Play Store显然保存了这些信息,因此他们应该在购买详细信息中提供这些信息。获取正确的用户ID需要额外的权限,您不需要添加这些权限来弥补IAB API的不足
因此,简而言之,除非您有自己的服务器和特殊的附加逻辑,否则不要使用开发人员负载。只要iabv3api能够工作,您就应该可以了(不幸的是,在这一点上,这是一个很大的“如果”) 开发人员负载处理还有另一种方法。正如尼古拉·埃连科夫(Nikolay Elenkov)所说,要求用户ID和为应用程序的用户配置文件设置额外权限的开销太大,所以这不是一个好方法。那么,让我们看看谷歌在应用内计费v3示例中最新版本的Drive示例应用中说了什么:
- 警告:开始购买时在本地生成随机字符串,然后 在这里验证它似乎是一个很好的方法,但在将来会失败 用户在一台设备上购买商品,然后在另一台设备上使用您的应用程序的情况 另一个设备,因为在另一个设备上,您将无法访问 最初生成的随机字符串
MD5(purchaseId + accountId)
MD5(purchaseId + accountId)