本主题介绍如何在玩家使用 Google Play 应用中的 Play Points 购买应用内商品后,在您的游戏中检测和交付这些商品。
一旦用户在 Google Play 应用中用 Play Points 兑换应用内商品,这些商品应立即在您的游戏中交付。以下显示了用户如何使用 Play Points 购买商品。
1. 点击Play Points。 | 1. 点击使用选项卡以查看商品。 | 2. 选择一个商品并点击使用积分以完成购买。 | 3. 接收商品。 |
在本例中,在购买商品时游戏未运行。用户也可以在设备上未安装游戏的情况下,用 Play Points 兑换商品。因此,您必须设计您的游戏,以便处理来自游戏内商店外部的应用内商品交付。
在您开始之前
在检测和交付应用内商品之前,您必须创建商品和 Play Points 促销活动。
交付要求
在使用 Play Points 促销活动在您的游戏中交付应用内商品时,您必须遵循本节中的要求。
交付时间
当玩家用 Play Points 兑换应用内商品时,您必须立即交付商品,而无需玩家重新启动游戏。在必须事先完成游戏内容(例如完成教程)的情况下,应在之后立即交付商品。
交付消息
在用户在游戏外部购买应用内商品后返回您的游戏时,您必须在游戏中显示一条确认消息,确认商品已成功授予。该消息应以弹出对话框或游戏内消息的形式出现。用户不应采取任何其他步骤来接收商品。
以下是所需的消息格式
一条明确的消息,表明商品已收到。
清楚地参考商品名称,并参考“Play Points”,以确保用户能够将其与收到的其他内容区分开来。
如果有多种面额的类似商品,则商品名称还必须包含正确的商品面额。
弹出对话框、消息或游戏内通知应在用户点击确认(例如“继续”或“确定”)之前可见。不应有取消按钮,因为此消息仅用于通知用户他们在游戏中收到的商品。如果没有确认按钮,则消息应至少可见 3 秒钟后再消失,以确保用户知道他们已收到商品。
以下是一个示例消息
“商品已收到!您刚刚用 Play Points 获得了 100 个宝石。继续。”
用户应该看到一个动画或一些视觉确认,显示其游戏内货币余额的增加。如果商品是耐用品或消耗品应用内商品,则应将用户引导到游戏中已解锁或可用的商品位置。
检测在游戏外部收到的商品
如果您的游戏使用Google Play 结算库,请进行以下更改以检测在游戏外部收到的应用内商品。
在您游戏的
onResume()
回调中,调用queryPurchases()
方法以检索商品列表,以便您可以确定哪些商品未确认。如果您的游戏有服务器,我们强烈建议您使用服务器验证购买,方法是使用订阅和应用内购买 API。
如果存在已拥有但未确认的商品,请使用
consumeAsync()
确认消耗型商品的购买,或使用acknowledgePurchase()
确认非消耗型商品的购买。在游戏中授予已购买商品的权限。
检测分屏模式下收到的商品
如果您的游戏支持 多窗口模式,用户可能在同时运行 Play 商店应用和您的游戏时兑换 Play Points 并收到商品。此屏幕截图显示了一个示例
要使用 Google Play 结算库支持此场景,请执行以下操作
Google Play 调用
onPurchasesUpdated()
方法通知您的游戏存在新的待处理商品。如果您的游戏有服务器,我们强烈建议您使用服务器验证购买,方法是使用订阅和应用内购买 API。
请使用
consumeAsync()
确认消耗型商品的购买,或使用acknowledgePurchase()
确认非消耗型商品的购买。在游戏中授予已购买商品的权限。
显示送达确认
当用户兑换 Play Points 并收到兑换商品时,他们希望游戏显示游戏内消息,或使用某种通知让他们知道游戏已正确接收并处理了该商品。以下是一些送达确认选项
显示游戏内弹出窗口。
将消息发送到游戏内消息框,并明确说明游戏内消息框中有一条新消息。
使用操作系统通知消息。
当收到促销商品时,游戏可能处于任何状态,包括未安装在设备上。您必须检测促销商品,无论游戏在收到商品时处于何种状态。但是,在某些情况下,可以接受不立即通知用户已收到商品。例如
在游戏操作期间,显示消息可能会分散用户的注意力。在这种情况下,您必须在操作结束后通知用户。
在过场动画期间,显示消息可能会分散用户的注意力。在这种情况下,您必须在过场动画结束后通知用户。
在游戏的初始教程和用户设置部分。我们建议您在新用户打开游戏或在初始用户设置期间立即通知他们奖励。但是,可以等到主要游戏序列可用后再通知用户。
如果您的应用有多个角色或帐户可以应用该商品,我们建议您提示用户选择哪个帐户接收促销商品。
在决定何时以及如何通知用户促销商品时,请考虑用户的感受。任何时候用户没有立即收到通知,他们都可能会感到困惑,停止玩游戏,联系用户支持或在社交媒体上抱怨。
特定游戏引擎的更新
以下是一些针对特定游戏引擎需要考虑的事项
如果您的游戏使用 Unity 构建,我们建议您验证您正在使用的 IAP 实现是否已支持 Play Points 促销活动。
如果您的游戏使用 Cocos2d-x 或 Unreal Engine (C/C++) 构建,您很可能需要编写从 C/C++ 代码调用 Java API 的 JNI 代码。
服务器端最佳实践
本节包含用于 Play Points 促销活动的服务器端最佳实践
如果您在服务器上调用
Purchases.products: get
,请验证您是否需要根据productId
值分别处理 Play 奖励兑换商品和其他应用内商品。如果您在服务器上使用
Inappproducts: list
,请验证您是否需要根据productId
值将 Play 奖励兑换商品与其他应用内商品分开。查看以下最佳实践,以验证您是否需要进行其他更改
- 参考
- 实施服务器端签名验证。
- 确保
purchaseToken
和orderId
值是唯一的,并且以前从未使用过。
故障排除
本节包含针对可能导致客户咨询的场景的建议。
多个用户帐户
如果用户在设备上有多个 Google 帐户,并且他们在错误的帐户上兑换了 Play Points,Google 无法将商品转移到其他帐户。同样,您的应用无法通过调用 getPurchases()
方法来转移商品。在这种情况下,请考虑使用您的客户支持操作手动向用户提供应用内商品。
延迟或缺少商品
如果玩家遇到奖励商品延迟或丢失的情况,请参阅 Google Play 帮助文档中的 应用内购买故障排除指南。