设置可从 Google Play 商店购买的 PlayFab 捆绑包

本教程介绍如何成功创建 PlayFab 捆绑包、将其添加到 Google 商城中的游戏供玩家购买,以及如何兑换其中包含的项目。

先决条件

  1. PlayFab 的 Game Manager 中的游戏。
  2. 所选游戏与所需商城之间的现有集成。
  3. 已在 Google Play 中创建并可用的应用。
    1. 确保应用已启用 Google Play Android 开发人员 API

步骤 1:创建捆绑包

在本教程中,我们首先在 Google Play 控制台中创建捆绑包

使用 Google Play 控制台创建捆绑包

  1. Google Play 控制台 中打开所需的 应用

  2. 在左侧导航栏上,向下滚动到“获取收益”部分,然后选择 应用内产品

    应用内产品菜单选项

  3. 选择右上角的“创建产品”。

    “创建产品”按钮

  4. 输入捆绑包所需的 产品 ID名称。 在本教程中,使用 warrior_bundle 作为 产品 ID。 请记住 产品 ID,因为它将用于链接 Game Manager

    创建新产品字段

  5. 向下滚动到“价格”部分,然后选择“设置价格”。

    设置价格选项

  6. 添加希望捆绑包具有的任何价格(例如 $1.00),然后选择右下角的“应用价格”。

    设置价格屏幕

  7. 选择“保存”以保存刚才对捆绑包做的所有更改。 请注意,保存不会将其激活为产品。 保存后,将显示激活选项。 若要使捆绑包在 Google Play 控制台 的应用中处于活动状态,请选择右下角的“激活”按钮。

    激活捆绑包按钮

使用 Game Manager 创建捆绑包

若要在 Game Manager 中创建新的 捆绑包,请执行后续步骤:

  1. 转到 Game Manager 并导航到“游戏”。

  2. 在左侧导航菜单中,选择“参与>经济”。

    经济菜单位置

  3. 选择“捆绑包”选项卡。

    “捆绑包”选项卡

  4. 选择“新建捆绑包”。

    “新建捆绑包”按钮

  5. 将任何你想要的信息添加到“捆绑包”中,例如项目和价格 在本教程中,使用“Warrior 捆绑包”作为名称。

    捆绑包选项

  6. 向下滚动到页面末尾,如果希望立即发布,请选择“保存并发布”;如果希望将其保存但尚不希望它可用,请将其另存为草稿

    保存选项

将项目添加到捆绑包

捆绑包本身不会向玩家授予任何项目,我们必须先将项目链接到该玩家,并在兑换后将这些项目授予该特定玩家。

在将项目添加到捆绑包之前,请确保已在目录中创建和发布项目。 我们已有一把剑名为“火剑”和一个盾牌名为“冰盾”。 如果不知道如何创建项,请参阅 此步骤

现在将它们添加到捆绑包! 为此,可以在第一次创建捆绑包时添加它们(假定项目已创建),也可以稍后通过编辑捆绑包项来添加它们。

在编辑模式下,向下滚动到捆绑包的“项目”部分并选择“添加”按钮,这将显示一个窗口,其中显示目录中的所有可用项,从此处可以按类型(项目或用户生成内容 UGC 项)进行筛选,也可以搜索特定项目。 我们选择要添加的每个项目旁边的“添加”按钮,最后选择窗口底部的蓝色“添加”按钮。

将项目添加到捆绑包

启用商城映射

若要确保当玩家从应用购买捆绑包时,该捆绑包在 Game Manager 中正确购买和分配,必须配置你的 商城映射。 在 Game Manager 中创建捆绑包时或通过返回编辑模式下的捆绑包创建捆绑包后,可以执行此操作。

  1. 在编辑模式下导航到捆绑包。
  2. 向下滚动到“商城映射”部分。
  3. 从“商城”下拉列表中,选择所需的商城。 (对于本教程,此处为 GooglePlay)。
  4. 对于你的“商城 ID”,请确保在 Google Play 控制台中使用与你的产品 ID 相同的 ID。 在本教程中,我们使用了 Warrior_bundle
  5. 若要完成,请选择该行右侧的 +

商城映射

步骤 2:生成购买令牌

注意

请确保先完成先决条件 #3,然后再继续,如果没有,则无法实际生成 购买令牌

购买令牌 是由 Google Play 的 API 在每次购买时生成的令牌,类似于收据 ID。 根据 Google 的文档,“购买令牌 是一个字符串,表示购买者在 Google Play 上购买产品的权利。 它表示 Google 用户已支付特定产品的费用。”

在执行中,应保存该令牌,因为它应发送到 PlayFab 的 API,以便在 Google 商城上验证购买。 它允许 PlayFab 兑换玩家购买的物品,并将其存入玩家的物品清单中。

若要生成令牌,必须已经有一个应用在与 Google Play 的主动集成下运行。 Google Play 中的应用注册还必须具有可供购买的项目(或在本例中为捆绑包)。 代码执行必须使用 Google Play 计费系统,才能在购买后返回令牌。

总之,在编写应用编码时应使用计费系统,通过该计费系统,你可以从 Google 端购买捆绑包,Google 将返回 购买令牌。 然后,该令牌应与 PlayFab 经济 API 一起使用,以兑换购买并将捆绑包项添加到玩家的物品清单中。

提示

有关使用 Google 系统进行类似项目的执行示例,请参阅此 CodeLab

有关计费的详细信息,请参阅 Google 的计费系统文档

步骤 3:兑换捆绑包

现在,你已在 Game ManagerGoogle Play 控制台 中创建了捆绑包,可以为其中一个玩家兑换你的捆绑包。 在此示例中,我们重点介绍如何使用 PlayFab 的 API,特别是 PlayFab 的经济 API 中的 RedeemGooglePlayInventoryItems 调用。

检查 AlternateID

在进行兑换调用之前,请确保在 Game Manager 中 具有正确的 AlternateId,它应与 Google Play 控制台 中的相同。

下面的屏幕截图来自 Game Manager 中的捆绑包,我们称 商城 IDAlternateId,基本上它是另一种识别捆绑包的方法。

商城映射

Google Play 控制台 中,转到“获取收益”部分下的 应用内产品 屏幕,从此处,你将看到所有已创建的产品,包括“Warrior 捆绑包”。 在第二列中可以看到 产品 ID,应确保它与 Game Manager 中的 AlternateId 相同,如果不同,则更新 Game Manager

Google Play 控制台产品 ID

让玩家进行身份验证

若要兑换项目,请使用 RedeemGooglePlayInventoryItems。 但在此之前,我们必须确保希望兑换该项目的玩家在你的应用中正确进行身份验证,你可能会使用 LoginWithGoogleAccount

注意

有关更多详细信息示例,请参阅 在 Unity 中使 用Google Play 游戏登录设置 PlayFab 身份验证

成功调用 LoginWithGoogleAccount 后,PlayFab 的 API 将返回一个 EntityToken,该令牌必须用作 RedeemGooglePlayInventoryItems 标头的一部分,其中包含X-EntityToken密钥。 如果使用 API 平台进行测试,则会如下所示。

API 平台标头密钥

进行兑换调用

对玩家进行身份验证后,将同时创建捆绑包实例并选中其 备用 ID购买令牌。 你已准备好进行兑换调用。 为此,我们使用 RedeemGooglePlayInventoryItems API 调用。

{
    "Purchases": [
        {
            "ProductId": "warrior_bundle",
            "Token": "{Your Google Purchase Token}"
        }
    ]
}

调用非常简单,你有一个 Purchases 数组,其中包含 Product ID(应与 Google Play 控制台 中的数组匹配),以及一个与调用 Google Play 计费系统 时返回的 购买令牌 相对应的 Token 字段。

成功的响应包括 时间戳商城 TransactionId200 status code 数据。

成功兑换后,如果进入玩家的物品清单,现在应该可以看到链接到捆绑包的两个项目。

兑换后的物品清单

每个兑换操作还会在玩家的事务历史记录中触发相应的事件日志,该日志可从指定玩家概述页下的“事务历史记录 (V2)” 选项卡中检索,如下所示:

交易历史记录

除了玩家事务历史记录中的记录外,还会触发和记录 PlayStream 事件。 可以通过转到 Game Manager 左侧导航栏的“分析”部分下的“数据”页来访问游戏的这些日志。 可在此处编辑查询以搜索特定记录,或使用默认设置运行查询以获取所有内容。 items_redeemed事件名称 下应有一条记录,如下所示:

PlayStream 事件日志

你注意到记录了两个不同的 items_redeemed PlayStream 事件,这是因为即使我们只兑换了一个捆绑包,捆绑包也包含两个不同的项目。

步骤 4:消耗

成功兑换购买后,应确保在商城中正确 使用。 执行此操作的方法包括:

尽管如此,在进行消耗调用(或者在 Unity 或 Unreal 插件中,客户端指示它已完成购买处理之前),需要在兑换过程后收到 200 响应,其中有 1 个或多个成功和 0 个失败。 如果收到 202 响应或兑换失败,建议在一段时间后再次重试消耗调用。

另请参阅