Skip to main content

商店和促销(旧版 Economy)

Economy v1 API 处于维护模式,不会接收任何新功能,只有 bug 修复。**v1 API 在可预见的将来将持续维护。**参见 Economy v2 概览,了解有关 PlayFab Economy 下一版本的更多信息!
在 PlayFab 中,Stores 构建在目录货币之上。你的主目录应定义你游戏中的所有物品,并使用你创建的货币为它们分配价格。 商店应定义你的目录中物品的子集,并以特定的、可能与目录价格不同的价格供购买。 商店允许你挑选出一组特定的物品,并在设定的时间段内以特定价格提供。 本教程说明基于虚拟货币和真实货币定义商店的最佳实践。

要求

  • 熟悉 PlayFab Game Manager
  • 你必须已定义一种或多种虚拟货币。本教程后面的示例使用:
    • SPSilver Pieces
    • GPGold Pieces)。
  • 你必须有一个定义了一个或多个物品的_主目录_。
    • 第一个示例使用多个物品/捆绑包,类似于掉落表教程中描述的那些。
    • 本教程的第二个示例使用小型、中型和大型生命药水。

最佳实践

目录价格应长期固定——它们定义了物品的_真实_价格。 商店应是_临时的_,根据你的 LiveOps 策略进行添加和移除。
预计你的大部分收入将来自循环商店,以及将物品在活动商店内外移动。

关于商店和目录定价的一般信息

  • 定价:目录中定义的价格应定义为物品的_常规_价格。商店允许你为物品定义临时促销价格,利用常见的零售策略。或者,商店可以为通常根本无法出售的物品提供临时价格。
  • 零成本:如果特定货币下的物品价格未设置(null)或,则无论目录还是商店都无法使用该货币购买。零成本允许你通过将其他货币的条目留空或将其重置为,使物品仅可用于免费货币或仅可用于高级货币。
  • 真实货币RM 货币在所有目录和商店中都可用。RM 是一种受限货币键,表示_仅限真实货币交易_。你应仅为具有显著价值的物品,或带有高级货币的捆绑包/容器收取 RM。
  • 价格是二选一:如果在一个物品上定义了两种价格,则该物品可以以其中任一价格购买。不可能要求单个物品使用两种货币。

定义真实货币商店

在你的 Game Manager 中:
  • 导航到你的 Title
  • 从左侧菜单中选择 Economy
  • Catalogs 选项卡上,选择你的主目录并选择 Stores
  • 选择 New Store 按钮。
掉落表示例中,我们创建了一个 11 物品掉落捆绑包。对于此示例,我们将在真实货币商店中提供三个类似的捆绑包。
任何物品都可以以真实货币出售,但最佳做法是仅使_特定_有价值的物品或捆绑包直接可用。
下面提供的屏幕截图显示了一个完整的新 Store,其中包含三个可用于真实货币物品捆绑包 完成真实货币购买的具体细节在我们的高级教程非收据支付处理中介绍。

真实货币商店的最佳实践

你如何使用真实货币在很大程度上取决于你游戏的具体设计。直接购买游戏内物品是有效的,但不太常见。 更典型的是,你的游戏应允许使用真实货币购买一种高级虚拟货币。你可以循环使用具有不同高级货币与真实货币比率的多个商店。
主要要点是——确保你的玩家_始终_可以给你付款。

定义虚拟货币商店

让我们进入使用虚拟货币购买游戏内物品的细节和代码。 初始步骤与上一个示例几乎相同:
  1. 创建三个新物品:SmallMediumLarge Health Potions,具有_免费_货币价格和_高级_货币价格。
  2. 使用促销物品创建一个新商店。

在一次购买中购买多个物品

要使用虚拟货币购买单个物品,请使用 PurchaseItem 方法,如我们的商店快速入门中所述。本教程介绍在一次购买中购买多个物品。 此过程的第一步应该是获取商店,并将其显示给用户。
此示例中的 LogSuccess 回调接收一个 GetStoreItemsResult,其中包含商店中所有物品的完整描述、它们的_商店_价格以及商店本身包含的任何元数据。

展示商店的最佳实践

带有商店的游戏应使用 GetCatalogItems 方法调用并缓存其主目录。你可以同时显示目录价格和商店价格,以及在促销物品旁边显示 10% OFF 或类似的奖励装饰。
玩家更有可能购买促销物品,尤其是当促销是限时优惠时。
此时,你的 GUI 代码负责向用户展示选择他们希望购买哪些物品以及数量的机会。
  • 在你的游戏与 PlayFab 之间,剩下的步骤是几个单独的 API 调用,但你可以让多个调用的序列对玩家不可见。
  • 提前收集有关购买的所有信息,并在收集_所有_玩家输入后进行完整的调用序列。
在物品选择过程中,你必须允许用户选择他们希望为这些物品花费哪种货币。在此示例中,所有物品都有 SPGP 的成本,这意味着用户可以选择花费哪种货币。
上面代码示例中 StartPurchase API 的结果包含 PaymentOptions 列表。每个 payment option 包含可用于进行购买的 CurrencyPriceProviderName

限制

单次购买中只允许_一种_虚拟货币。所有选定的物品必须能用_单一货币_购买。 调用中必须指定货币,当有多种可能的货币时,这一点很重要。如果请求中有物品在所选货币中没有对应的成本,序列将失败。 调用中还必须指定 ProviderName。对于真实货币购买,provider name 是用来为购买提供资金的人,例如 Facebook、PayPal 或 Steam。对于 VC 购买,它将是基于你的 title ID 的字符串。ProviderName 可以从 StartPurchaseResultPaymentOptions 字段中获取,如前面的注意中所述。
对于 VC 购买,你游戏的 ProviderName 是由“Title”这个词与你十六进制 TitleId 的十进制等值连接而成的字符串。例如,“Title123456”。

展示商店物品的最佳实践

通过确保商店中的所有物品具有一致的选项来避免玩家的困惑。 真实货币物品应与高级 VC 物品在不同的商店中,同样与免费 VC 物品在不同的商店中。如果单个商店允许多种货币,那么该商店中的_所有_物品都应始终使用相同的多种货币集。根据需要创建尽可能多的商店,以提供顺畅的客户体验。
最后,一旦购买完全定义好,你可以完成该过程,如下所示。

处理 API 失败结果的最佳实践

任何单个 API 调用都可能由于许多原因失败。手机等无线设备通常可能存在间歇性连接,任何互联网调用都可能因随机延迟而失败。 每个调用都应检查多个失败条件。如果响应显示请求无效(例如,无法使用单一货币购买多个物品),你应该中止。可能是你的商店设计有问题。 如果响应指示连接失败,你可以在指数退避延迟后重试。

结论

商店是鼓励玩家购买物品的绝佳机制。 商店适用于任何类型的虚拟货币。商店也可以通过一组备用 API 方法与真实货币一起使用。 有关真实货币购买的更多信息,请参阅非收据支付处理 有关高级商店用法,请参阅玩家分组的自定义商店教程。
最后修改于 2026年8月13日