历史上,开发者有效载荷用于各种目的,包括欺诈预防和将购买归因于正确的用户。在 Google Play 计费库版本 2.2 及更高版本中,以前依赖开发者有效载荷的预期用例现在在库的其他部分得到完全支持。
有了这种支持,我们已弃用开发者有效载荷,从 Google Play 计费库版本 2.2 开始。与开发者有效载荷关联的方法已在版本 2.2 中被弃用,并在版本 3.0 中被移除。请注意,您的应用可以继续为使用库的先前版本或 AIDL 完成的购买检索开发者有效载荷。
有关更改的详细列表,请参阅 Google Play 计费库 2.2 发行说明。和 Google Play 计费库 3.0 发行说明.
购买验证
为确保购买是真实的,而不是伪造或重放的,Google 建议使用购买令牌(从 getPurchaseToken()
方法在 Purchase
对象中获取),并结合 Google Play 开发者 API 来验证购买是真实的。有关更多信息,请参阅 打击欺诈和滥用行为.
购买归因
许多应用,尤其是游戏,需要确保购买正确归因于启动购买的 ingame 角色/头像或应用内用户资料。从 Google Play 计费库版本 2.2 开始,您的应用可以在启动购买对话框时向 Google 传递混淆的帐户和资料标识符,并在检索购买时将其返回。
使用 setObfuscatedAccountId()
和 setObfuscatedProfileId()
参数在 BillingFlowParams
中,并使用 getAccountIdentifiers()
方法在 Purchase
对象中检索它们。
将元数据与购买关联
Google 建议在您维护的安全后端服务器上存储有关购买的元数据。此购买元数据应与使用 getPurchaseToken
方法在 Purchase
对象中获得的购买令牌关联。此数据可以通过在您的 PurchasesUpdatedListener
在成功购买后被调用时将购买令牌和元数据传递给您的后端来持久化。
为了确保在购买流程中断的情况下元数据相关联,Google 建议在启动购买对话框之前将元数据存储在您的后端服务器上,并将其与用户的帐户 ID、要购买的 SKU 和当前时间戳关联。
如果购买流程在您的 PurchasesUpdatedListener
被调用之前中断,您的应用将在您的应用恢复并调用 BillingClient.queryPurchasesAsync()
时发现该购买。然后,您可以将从 Purchase
对象的 getPurchaseTime()
、getSku()
和 getPurchaseToken()
方法检索到的值发送到您的后端服务器,以查找元数据,将元数据与购买令牌关联,并继续处理购买。请注意,您最初存储的时间戳不会与 Purchase
对象的 getPurchaseTime()
中的值完全匹配,因此您需要以近似的方式比较它们。例如,您可以检查这些值是否彼此在特定时间段内。