【发布时间】:2012-02-15 08:23:04
【问题描述】:
Android 文档说它的意思是“关于订单的补充信息”,但同时它也说不要使用它来发送“实际数据或内容”。
那么这个“开发者有效载荷”的目的是什么?为什么会有这个功能?您能否描述一个真实的实际示例,说明我如何在自己的应用内结算实施中使用它?
【问题讨论】:
Android 文档说它的意思是“关于订单的补充信息”,但同时它也说不要使用它来发送“实际数据或内容”。
那么这个“开发者有效载荷”的目的是什么?为什么会有这个功能?您能否描述一个真实的实际示例,说明我如何在自己的应用内结算实施中使用它?
【问题讨论】:
正如 aromero 所说,开发人员有效负载字段的大小是有限的。这就是文档建议不要使用此密钥发送数据或内容的原因。
您所做的是将内容保存到某处的数据库中(例如,在用户的设备或您自己的服务器上),然后将记录的索引放在开发人员有效负载字段中。当您通过PURCHASE_STATE_CHANGED 广播意图收到它时,您可以将它与数据库中的数据相关联。
请注意,当使用任何测试 android 项目 ID 时,开发者负载不是由 Market 发送。您必须使用真实的应用内购买项目。
另外,根据this(我还没有验证),你不会在调试模式下收到 developerPayload。您需要将您的应用程序签名为 RELEASE MODE 才能接收 developerPayload。
最后,正如您在下面评论的那样,返回的JSONObject(响应 GetPurchaseInformation)已经包含 orderId、productId、purchaseTime 等。因此,“开发人员有效负载”实际上应该用于任何但来识别购买......即答案与下面的建议相反。您可以使用“开发者负载”添加一些不在JSONObject 中的信息,例如购买者的其他详细信息(例如 GPS 位置(如果启用)、设备品牌和型号等)。
【讨论】:
接受的答案具有误导性,最后一段完全错误。 以下是官方文档对此的说明。
您应该传入一个字符串令牌,以帮助您的应用程序识别进行购买的用户,以便您以后可以验证这是该用户的合法购买。对于消耗品,您可以使用随机生成的字符串,但对于非消耗品,您应该使用唯一标识用户的字符串。
当您从 Google Play 收到响应时,请确保验证开发者有效负载字符串与您之前随购买请求发送的令牌匹配。作为进一步的安全预防措施,您应该在自己的安全服务器上执行验证。
负载可以帮助您防止识别绕过 Google Play 服务 API 或您的应用的用户,方法是将负载发送到您的服务器,您可以在服务器上检查该用户是否曾经购买过该商品。大概绕过 GPS 会让你的应用被购买证书愚弄。但是,如果您拥有保存在服务器上的真实购买该物品的人的所有用户 ID - 根据用户 ID 验证购买将很容易。这里的问题 - 除非您有所有您的用户以某种方式“登录”,否则谷歌无法依赖它。
【讨论】:
文档提供了一个真实的例子:
开发人员指定的字符串,可以在您制作时指定 REQUEST_PURCHASE 请求。该字段以 JSON 字符串形式返回 包含订单的交易信息。你可以用这个 用于发送订单补充信息的键。 例如,您 可以使用此键发送带有顺序的索引键,如果 您正在使用数据库来存储购买信息。 我们建议 您不使用此密钥发送数据或内容。
您可以使用此字段来识别用户正在购买的商品。当您发出REQUEST_PURCHASE 请求时,您可以使用DEVELOPER_PAYLOAD 提供更多信息。当您收到来自PURCHASE_STATE_CHANGED 的回复时,您会在developerPayload 字段中获取此信息,以便您识别订单。
此字段限制为 256 个字符,并且未加密(但您可以验证签名),并不意味着存储实际内容。
【讨论】:
sku/productId/item_id,为什么还要识别使用这个key购买的商品呢?
我希望这会有所帮助:
安全建议:发送购买请求时,请创建一个 唯一标识此购买请求的字符串令牌,并且 在 developerPayload 中包含此令牌。您可以随机使用 生成的字符串作为令牌。当您收到购买回复时 来自 Google Play,请务必检查返回的数据签名, orderId 和 developerPayload 字符串。为了增加安全性,您 应该在您自己的安全服务器上执行检查。确保 验证 orderId 是您以前没有的唯一值 已处理,并且 developerPayload 字符串与您的令牌匹配 之前与购买请求一起发送。
【讨论】: