从 IAP 版本 4 升级到版本 5
按照本指南从 Unity 应用内购版本 4 迁移到版本 5。
阅读时间7 分钟最后更新于 20 天前
应用内购 (IAP) 版本 5 (v5) 引入了重大的架构改进,可更好地控制连接和购买流程的每个步骤。虽然迁移要求对现有 IAP 实现进行重大更新,但本指南提供了分步说明和代码示例来帮助您过渡。
更改概述
下表总结了 IAP v5 中的更改以及在实现中需要更新的内容。有关升级的好处的更多信息,请参阅为什么应该升级到 Unity 应用内购 (IAP) v5.x 支持文章。更改 | 所需更新 |
|---|---|
| 初始化分为商店连接、商品获取和购买获取的单独异步调用。 | 替换 UnityPurchasing.Initialize() |
| 替换 ConfigurationBuilder |
| 商店扩展将替换为商店扩展服务。 | 替换 ConfigurationBuilder |
在 | 替换 IDetailedStoreListener 和 IStoreListener |
| 替换 IStoreController |
| 更换购买流程 |
| 恢复交易 |
权利检查现在基于事件,使用 | 替换权利检查 |
Apple App Store 收据验证已弃用。Google Play 收据验证现在使用 | 更新收据验证 |
| 更新 Codeless IAP |
替换 UnityPurchasing.Initialize()
从 IAP v5 开始,您可以更灵活地初始化 Unity IAP 包。您可以独立和异步连接到商店、获取商品和处理购买。此方法可以帮助您识别和解决可能阻止成功初始化的问题。
按照以下步骤替换
UnityPurchasing.Initialize()- 调用并等待:
StoreController.Connect()- 此调用完成后,IAP 将连接到您当前的应用商店。
- 调用:
- 您可以将商品添加到 实例,类似于将商品添加到
CatalogProvider。您还可以将ConfigurationBuilder列表传递给ProductDefinitions或ProductService.FetchProducts()。有关更多信息,请参阅新初始化过程的代码示例。StoreController.FetchProducts() - 当请求成功完成时调用 事件处理程序。如果不能获取指定商品,则会调用
OnProductsFetched。OnProductsFetchFailed
- 您可以将商品添加到
- 成功获取商品后调用 :
FetchPurchases()- 当请求成功完成时调用 事件处理程序。
OnPurchasesFetched对象包含应用商店返回的所有延迟、待处理和已完成订单的可过滤集合。失败时会调用Orders。OnPurchasesFetchFailed
- 当请求成功完成时调用
使用 StoreController 的新初始化过程的代码示例
以下示例展示了如何初始化 IAP v5:StoreController m_StoreController; async void InitializeIAP() { m_StoreController = UnityIAPServices.StoreController(); m_StoreController.OnPurchasePending += OnPurchasePending; await m_StoreController.Connect(); m_StoreController.OnProductsFetch += OnProductsFetch; m_StoreController.OnPurchasesFetch += OnPurchasesFetch; var initialProductsToFetch = new List<ProductDefinition> { new(goldProductId, ProductType.Consumable), new(diamondProductId, ProductType.Consumable) }; m_StoreController.FetchProducts(initialProductsToFetch); }void OnProductsFetched(List<Product> products) { // Handle fetched products m_StoreController.FetchPurchases(); } void OnPurchasesFetched(Orders orders) { // Process purchases, for example, check for entitlements from completed orders }
替换 IDetailedStoreListener 和 IStoreListener
IAP v5 不再需要实现用于处理购买或初始化的IDetailedStoreListenerIStoreListenerStoreControllerProductServicePurchaseServiceStoreServiceIDetailedStoreListenerStoreController
要迁移,请将每个
IDetailedStoreListener函数 | IAP v5 替换 |
|---|---|
| 将事件处理程序添加到 |
| 在 |
| 将事件处理程序添加到 |
| 将事件处理程序添加到 |
| 将事件处理程序添加到 |
替换 ConfigurationBuilder
将以下ConfigurationBuilder函数 | IAP v5 替换 |
|---|---|
| 您可以通过 |
| 4 和 5 | 您可以在扩展商店服务中的 |
替换 IStoreController
将IStoreControllerStoreControllerStoreControllerIStoreListenerUnityIAPServices.StoreController()StoreControllerIStoreControllerStoreControllerIStoreController | StoreController | 注意 |
|---|---|---|
| | |
| | |
| | |
| | |
替换购买流程
要发起购买,请致电Purchase()PurchaseProduct()``StoreControllerPurchaseServiceStoreController.ConfirmPurchase(PendingOrder)PurchaseService.ConfirmPurchase(PendingOrder)PendingOrderProcessPurchase- :为新购买调用。
OnPurchasePending - :为恢复的购买调用。
OnPurchasesFetched
ProcessPurchase还原交易
RestoreTransactionsStoreControllerPurchaseServiceFetchPurchases()CheckEntitlement()替换授权检查
要检查用户对商品的权限,IAP 依赖于事件。您可以通过调用FetchPurchasesOnPurchasesFetchedCheckEntitlementOnCheckEntitlement获取其他商品
在StoreControllerProductServiceFetchProductsOnPurchasesFetchedCatalogProviderFetchProductsProductServiceCatalogProviderFetchProducts收据验证
Apple App Store 收据的收据验证已弃用。收据验证仅适用于 Google Play 应用商店。要获取收据,请使用OrderOrder.Info.ReceiptProduct.ReceiptCodeless IAP 特性
将以下CodelessIAPStoreListener
| IAP v5 替换 |
|---|---|
| |