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