检测和交付应用内商品

本主题介绍如何在玩家使用 Google Play 应用中的 Play 点购买应用内商品后,如何在游戏中检测和交付这些商品。

一旦用户在 Google Play 应用中用 Play 点兑换了应用内商品,这些商品应立即在您的游戏中交付。以下显示了用户如何使用 Play 点购买商品。

1. 点击Play 点 1. 点击使用选项卡查看商品。 2. 选择一个商品,然后点击使用点完成购买。 3. 接收商品。
A screenshot of TBD A screenshot of TBD A screenshot of TBD A screenshot of TBD

在示例中,游戏在商品购买时未运行。用户也可以在游戏未安装在他们的设备上时用 Play 点兑换商品。因此,您必须设计您的游戏以处理来自游戏内商店外部的应用内商品交付。

开始之前

在检测和交付应用内商品之前,您必须创建商品和 Play 点促销活动

交付要求

当您使用 Play 点促销活动在游戏中交付应用内商品时,您必须遵循本节中的要求。

交付时间

当玩家用 Play 点兑换应用内商品时,您必须立即交付该商品,而无需让玩家重新启动游戏。在必须先完成游戏内容的情况下(例如完成教程),应在完成之后立即交付该商品。

交付消息

在用户在游戏外部购买了应用内商品后返回您的游戏时,您必须在游戏中显示一个确认消息,确认该商品已成功授予。该消息应以弹出式对话框或游戏内消息的形式出现。用户无需采取任何额外步骤即可接收该商品。

以下是所需的消息格式

  • 一条明确表明商品已收到的消息。

  • 清楚地参考商品名称,并提及“Play 点”,以确保用户可以将其与他们收到的其他内容区分开来。

  • 如果存在具有多个面额的类似商品,则商品名称还必须包含商品的正确面额。

  • 弹出式对话框、消息或游戏内通知应对用户可见,直到用户点击确认(例如,继续确定)。不应该有取消按钮,因为该消息仅用于通知用户他们在游戏内收到的商品。如果没有确认按钮,则该消息应至少对用户可见 3 秒钟,然后消失,以确保用户知道他们已收到商品。

以下是一个示例消息

"已收到商品!您刚刚用 Play 点获得了 100 个宝石。继续。"

用户应该看到一个动画或某个视觉确认,显示其游戏内货币余额的增加。如果该商品是耐用品或消耗品应用内商品,则应引导用户前往游戏内商品已被解锁或可用的位置。

检测在游戏外部收到的商品

如果您的游戏使用Google Play 结算库,请进行以下更改以检测在游戏之外收到的应用内商品。

  1. 在您游戏的onResume() 回调中,调用queryPurchases() 方法以检索商品列表,以便您确定哪些商品未确认。

  2. 如果您的游戏有服务器,我们强烈建议您使用订阅和应用内购买 API从您的服务器验证购买

  3. 如果有已拥有但未确认的商品,请使用consumeAsync()(对于消耗性商品)或acknowledgePurchase()(对于非消耗性商品)确认购买。

  4. 在游戏中授予已购买商品的权利。

检测在分屏模式下接收的商品

如果您的游戏支持多窗口模式,用户可以在同时运行 Play 商店应用程序和您的游戏时兑换 Play Points 并接收商品。此屏幕截图显示了一个示例

A screenshot where the Redeem points button is displayed while a game is running.

要使用 Google Play 结算库支持这种情况,请执行以下操作

  1. Google Play 会调用onPurchasesUpdated() 方法以通知您的游戏存在新的待处理商品。

  2. 如果您的游戏有服务器,我们强烈建议您使用订阅和应用内购买 API从您的服务器验证购买

  3. 使用consumeAsync()(对于消耗性商品)或acknowledgePurchase()(对于非消耗性商品)确认购买。

  4. 在游戏中授予已购买商品的权利。

显示送货确认

当用户兑换 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 奖励兑换商品与其他应用内商品区分开。

  • 查看以下最佳实践以验证您是否需要进行其他更改

疑难解答

本部分包含针对可能导致客户咨询的场景的建议。

多个用户帐户

如果用户在其设备上有多个 Google 帐户,并且他们在错误的帐户上兑换了 Play Points,Google 无法将商品转移到其他帐户。同样,您的应用程序也不能通过调用getPurchases() 方法来转移商品。在这种情况下,请考虑使用您的客户支持操作手动向用户提供应用内商品。

延迟或丢失的商品

如果玩家遇到奖励商品延迟或丢失的情况,请查看 Google Play 帮助文档中的应用内购买疑难解答指南