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

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

那么这个“开发人员有效载荷”的目的是什么? 为什么这个function存在? 你能描述一个真实世界的实际例子,我可以如何在自己的应用内结算实现中使用它?

Solutions Collecting From Web of "“开发人员有效载荷”的目的是什么? 它可以用来做什么?"

正如aromero提到的,开发人员有效载荷字段的大小是有限的。 这就是为什么文档build议不要使用此密钥来发送数据或内容。

你所做的是把内容保存到某个地方的数据库(例如用户的设备或你自己的服务器上),然后把logging的索引放在开发人员有效负载字段中。 当您通过PURCHASE_STATE_CHANGED广播意图收到它时,可以将其与数据库中的数据相关联。

请注意,在使用任何testing的android项目ID时,市场不会发送开发人员有效负载。 你必须使用真正的应用程序购买物品。

另外,根据这个 (我还没有validation这个),你将不会在debugging模式下收到developerPayload。 您需要将您的应用程序签署到RELEASE MODE以接收developerPayload。

最后,如下所述,返回的JSONObject (响应GetPurchaseInformation)已经包含了orderId,productId,purchaseTime等等。 因此,“开发人员有效载荷”实际上应该用于任何事情, 要确定购买…即答案是与以下build议的相反。 你可以使用“开发人员有效载荷”来添加一些不在JSONObject ,例如购买者的附加细节(例如GPS位置,如果启用,设备品牌和型号等)。

被接受的答案是误导性的,最后一段是错误的。 这是官方文件要说的。

您应该传入一个string标记,以帮助您的应用程序标识进行购买的用户,以便以后可以validation该用户是否合法购买。 对于消耗品,您可以使用随机生成的string,但对于非消耗品,您应该使用唯一标识用户的string。

当您收回Google Play的响应时,请确保validation开发者有效负载string与之前通过购买请求发送的令牌相匹配。 作为进一步的安全防范措施,您应该在您自己的安全服务器上执行validation。

有效负载可以帮助您防止通过将有效载荷发送到您的服务器来确定绕过Google Play Service API或您的应用程序的用户,在那里您可以检查此用户是否曾购买该项目。 据推测,规避GPS将使您的应用程序与购买证书欺骗。 但是,如果您拥有真正购买保存在服务器上的物品的所有用户ID,则可以很容易地根据用户IDvalidation购买。 这里的问题 – 谷歌使它不可能依靠它,除非你有所有的用户以某种方式“login”。

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

开发者指定的string,可以在您发出REQUEST_PURCHASE请求时指定。 该字段在包含订单交易信息的JSONstring中返回。 您可以使用此密钥来发送订单的补充信息。 例如,您可以使用此密钥来发送带有订单的索引关键字,如果您使用数据库来存储采购信息,则此命令很有用。 我们build议您不要使用此密钥来发送数据或内容。

您可以使用此字段来识别用户正在购买的物品。 当您发出REQUEST_PURCHASE请求时,您可以使用DEVELOPER_PAYLOAD放置其他信息。 当您收到来自PURCHASE_STATE_CHANGED的响应时,您会将此信息返回到developerPayload字段,以便您可以识别订单。

这个字段被限制为256个字符,它是未encryption的(你可以validation签名),但这并不意味着存储实际的内容。

我希望这个能帮上忙:

安全build议:当您发送购买请求时,创build一个string标记, 唯一标识此购买请求,并将此标记包含在developerPayload中 。您可以使用随机生成的string作为标记。 当您收到来自Google Play的购买回复时,请务必检查返回的数据签名,orderId和developerPayloadstring。 为了增加安全性,您应该在自己的安全服务器上执行检查。 请确保validationorderId是您以前没有处理过的唯一值,并且developerPayloadstring与先前通过购买请求发送的令牌相匹配。

更多信息在这里。