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