检测和交付应用内商品

本主题介绍了玩家在 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. 如果您的游戏有服务器,我们强烈建议您通过使用 Subscriptions and In-App Purchases API 从您的服务器验证购买

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

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

检测分屏模式下收到的商品

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

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

要使用 Google Play 结算库支持此场景,请执行以下操作:

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

  2. 如果您的游戏有服务器,我们强烈建议您通过使用 Subscriptions and In-App Purchases API 从您的服务器验证购买

  3. 使用 consumeAsync() 确认消耗型商品的购买,或者使用 acknowledgePurchase() 确认非消耗型商品的购买。

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

显示交付确认

当用户兑换 Play 积分并收到兑换商品时,他们期望游戏显示游戏内消息,或使用某种通知,告知他们游戏已正确收到并处理了该商品。以下是一些交付确认选项:

  • 显示游戏内弹窗。

  • 将消息发送到游戏内消息框,并明确指出游戏内消息框中有新消息。

  • 使用操作系统通知消息。

收到促销商品时,游戏可能处于任何状态,包括未安装在设备上。无论游戏在收到商品时处于何种状态,您都必须检测促销商品。但是,在某些例外情况下,可能允许不立即通知用户已收到商品。例如:

  • 在游戏动作期间,显示消息可能会分散用户注意力。在这种情况下,您必须在动作结束后通知用户。

  • 在过场动画期间,显示消息可能会分散用户注意力。在这种情况下,您必须在过场动画结束后通知用户。

  • 在游戏的初始教程和用户设置部分。我们建议您在新用户打开游戏后或在初始用户设置期间立即通知他们获得奖励。但是,也可以等到主游戏序列可用后再通知用户。

如果您的应用有多个角色或帐号可以应用该商品,我们建议您提示用户选择哪个帐号接收促销商品。

在决定何时以及如何通知用户促销商品时,请考虑用户体验。任何时候用户没有立即收到通知,他们都可能感到困惑,停止玩游戏,联系用户支持,或在社交媒体上抱怨。

特定游戏引擎的更新

以下是针对特定游戏引擎的一些注意事项:

  • 如果您的游戏是使用 Unity 构建的,我们建议您验证您正在使用的应用内购买 (IAP) 实现是否已支持 Play 积分促销活动。

  • 如果您的游戏是使用 Cocos2d-x 或 Unreal Engine (C/C++) 构建的,您很可能需要编写 JNI 代码,以便从 C/C++ 代码调用 Java API。

服务器端最佳实践

本节包含适用于 Play 积分促销活动的服务器端最佳实践:

  • 如果您在服务器上调用 Purchases.products: get,请验证您是否需要根据 productId 值分别处理 Play 奖励兑换商品和其他应用内商品。

  • 如果您在服务器上使用 Inappproducts: list,请验证您是否需要根据 productId 值将 Play 奖励兑换商品与其他应用内商品分开。

  • 检查以下最佳实践,以验证您是否需要进行额外更改:

问题排查

本节包含可能导致客户咨询的场景的建议。

多个用户帐号

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

商品延迟或缺失

如果玩家遇到奖励商品延迟或缺失的情况,请参阅 Google Play 帮助文档中的应用内购买问题排查指南