Android “的目的是什么?”;开发者有效载荷;?它可以用来做什么?

Android “的目的是什么?”;开发者有效载荷;?它可以用来做什么?,android,in-app-billing,Android,In App Billing,Android文档表示,它的意思是“关于订单的补充信息”,但同时也表示不要使用它发送“实际数据或内容” 那么,“开发人员负载”的目的是什么?为什么会有这种功能?您能否描述一个真实的示例,说明我如何在自己的应用内计费实施中使用它?文档提供了一个真实的示例: 开发人员指定的字符串,可在创建 请求购买请求。此字段以JSON字符串形式返回 包含订单交易信息的。你可以用这个 键以随订单发送补充信息例如,您 可以使用此键按顺序发送索引键,如果 您正在使用数据库存储购买信息。我们建议 您不使用此密钥发送数据或

Android文档表示,它的意思是“关于订单的补充信息”,但同时也表示不要使用它发送“实际数据或内容”


那么,“开发人员负载”的目的是什么?为什么会有这种功能?您能否描述一个真实的示例,说明我如何在自己的应用内计费实施中使用它?

文档提供了一个真实的示例:

开发人员指定的字符串,可在创建 请求购买请求。此字段以JSON字符串形式返回 包含订单交易信息的。你可以用这个 键以随订单发送补充信息例如,您 可以使用此键按顺序发送索引键,如果 您正在使用数据库存储购买信息。我们建议 您不使用此密钥发送数据或内容

您可以使用此字段标识用户正在购买的项目。当您发出
购买请求
请求时,您可以使用
DEVELOPER\u PAYLOAD
添加其他信息。当您收到来自
PURCHASE\u STATE\u CHANGED
的响应时,您将在
developerPayload
字段中返回此信息,以便识别订单


此字段限制为256个字符,并且未加密(您可以验证签名),它不用于存储实际内容。

正如Armonero提到的,开发者有效负载字段的大小是有限的。这就是为什么文档建议不要使用此密钥发送数据或内容的原因

相反,您要做的是将内容保存到某个数据库中(例如,在用户的设备或您自己的服务器上),然后将记录的索引放在developer payload字段中。当您通过
PURCHASE\u STATE\u CHANGED
broadcast intent收到它时,您可以将它与数据库中的数据关联起来

请注意,当使用任何测试android项目ID时,开发者负载不是由市场发送的。您必须使用真正的应用程序内购买项目

另外,根据(我还没有验证),您将不会在调试模式下收到developerPayload。您需要将应用程序签名到发布模式才能接收developerPayload

最后,正如您在下面所评论的,返回的
JSONObject
(响应GetPurchaseInformation)已经包括orderId、productId、purchaseTime等。所以“开发者有效载荷”实际上应该用于任何用于识别购买。。。i、 e.答案与下文建议的相反。您可以使用“开发者有效载荷”添加一些不在
JSONObject
中的信息,如购买者的其他详细信息(如GPS位置(如果启用)、设备品牌和型号等)。

我希望这将有助于:

安全建议:发送购买请求时,创建 唯一标识此购买请求的字符串标记,以及 将此令牌包括在developerPayload中。您可以随机使用 生成字符串作为标记。当您收到购买响应时 在Google Play中,确保检查返回的数据签名 orderId和developerPayload字符串。为了增加安全性,您可以 应该在您自己的安全服务器上执行检查。确保 验证orderId是否是以前没有的唯一值 已处理,并且developerPayload字符串与您 之前随采购申请一起发送


公认的答案是误导性的,最后一段显然是错误的。 以下是官方文件对它的描述

您应该传入一个字符串令牌,以帮助您的应用程序识别进行购买的用户,以便稍后可以验证该用户的购买是否合法。对于耗材,您可以使用随机生成的字符串,但对于非耗材,您应该使用唯一标识用户的字符串

当您从Google Play获得响应时,请确保验证开发者负载字符串是否与您之前发送的购买请求令牌匹配。作为进一步的安全预防措施,您应该在自己的安全服务器上执行验证


通过将有效负载发送到您的服务器,您可以在服务器上检查该用户是否曾经购买过物品,有效负载可以帮助您识别以某种方式绕过Google Play Service API或您的应用程序的用户。大概绕过GPS会让你的应用程序被购买证书愚弄。但是,如果你拥有真实购买保存在你服务器上物品的人的所有用户ID,那么就很容易根据用户ID验证购买。这里的问题是,除非你有所有你的用户“登录”,否则谷歌不可能依赖它在某种程度上。

谢谢,但这个例子并不能解释太多。什么是“索引键”?“索引键”指向什么?“使用数据库存储购买信息”是什么意思?在电话里?在远程服务器上?这个“真实的例子”非常简洁,无论是谁写的,都必须假设任何为Android编程的人都是天才。。。但我不是天才,我只是想了解这个领域的用途,因为它似乎在地下城样本中扮演着重要角色。当请求中已经有
sku/productId/item\u id
时,为什么我需要使用此键识别购买的商品?您似乎对我的回答或文档感到不安。索引键意味着将索引实际顺序的某个键(在本例中为字符串,最多可以是256个字符)。“使用数据库存储购买信息”指的是在手机上存储订单的数据库(Dungeons示例使用类似的方法,看看PurchaseDatabase.java)。