配置 Codeless IAP 按钮
设置和使用 Codeless IAP 按钮和 IAP 监听器可在不编写复杂代码的情况下启用应用内购和恢复购买。
阅读时间3 分钟最后更新于 20 天前
Codeless IAP 按钮可以轻松设置应用内购和恢复按钮,只需编写最少的脚本。使用 IAP 按钮可将购买和恢复功能直接添加到 UI 按钮。此方法为用户提供了在应用中购买或恢复商品的简单方法。
使用 OnProductFetch 更新商品详细信息
Unity IAP 从应用商店检索产品信息时触发OnProductFetchedOnProductFetchedpublic class IAPButtonView : MonoBehaviour{ [SerializeField] TMP_Text title; [SerializeField] TMP_Text price; public void OnProductFetched(Product product) { if (title != null) { title.text = product.metadata.localizedTitle; } if (price != null) { price.text = product.metadata.localizedPriceString; } }}
IAP 监听器
Codeless IAP 通常会将成功和失败的购买事件发送到场景中激活的 IAP 按钮组件。但是,在某些情况下,使用 IAP 按钮不切实际。例如,如果购买履行中断且未完成,Unity IAP 会在下次初始化时再次尝试处理购买(通常在应用程序启动后立即处理,此时 IAP 按钮可能尚未初始化)。在这些情况下,可以使用 IAP Listener 组件。IAP 监听器会接收 IAP 按钮无法处理的任何购买事件,从而确保所有购买都得到正确处理。将 IAP 监听器添加到场景中可自动处理这些事件。
要添加 IAP 监听器,请执行以下步骤:
- 在 Unity Editor 中,选择 Services > In-App Purchasing > Create IAP Listener。
- 请遵循将购买履行脚本编写为游戏对象组件的步骤。请参阅购买履行以了解更多信息。
- 从 Hierarchy 列表中选择 IAP Listener,然后在 Inspector 中找到其 IAP Listener 脚本组件。然后选择 + 为 On Purchases Fetch (Orders) 和 On Order Pending (PendingOrder) 添加函数。
- On Order Pending 处理所有新交易,并针对单个交易调用。
PendingOrder - On Purchases Fetch 处理所有现有交易,并使用包含所有激活的 Pending、Confirmed 和 Deferred 交易的 对象进行调用。
Orders
- On Order Pending 处理所有新交易,并针对单个
- 将带有购买履行脚本的游戏对象拖到组件的 Inspector 中的事件字段上,然后从下拉菜单中选择您的函数。
Restore 按钮
某些应用商店(包括 Apple App Store)要求应用程序具有 Restore 按钮。Codeless IAP 提供了一种在应用程序中实现恢复按钮的简单方法。 要添加 Restore 按钮,请执行以下步骤:- 将 IAP 按钮添加到场景中(Services > In-App Purchasing > Create IAP Button)。
- 选择 IAP Button 后,在 Inspector 中找到其 IAP Button 组件。
- 在 Button Type 下拉菜单中,选择 Restore。Inspector 窗口更新为仅显示与 Restore 按钮相关的字段。
- 可选:选择加号 (+) 按钮可将脚本添加到 。
On Transactions Restored (Boolean, String)- 将带有恢复交易脚本的游戏对象拖到组件的 Inspector 中的事件字段上,然后从下拉选单中选择 函数。
用户在运行时选择此按钮时,会调用当前商店的购买恢复 API。在 Apple App Store 上,这会触发 Apple 的内置还原或同步流程。 在 Google Play 上,恢复是 IAP 初始化的一部分。在运行时进行的其他恢复调用很少会产生结果。 Unity IAP 始终在 Restore IAP 按钮上调用public void OnTransactionsRestored(bool success, string? error){ Debug.Log($"TransactionsRestored: {success} {error}");}
OnTransactionsRestoredOnPurchaseFetchedOnPurchasesFetchedpublic void OnOrderPending(PendingOrder order){ foreach(var cartItem in order.CartOrdered.Items()) { var product = cartItem.Product; // grant purchase... }}public void OnPurchasesFetched(Orders existingOrders){ foreach(在 existingOrders.ConfirmedOrders 中更改顺序) { foreach(var cartItem in order.CartOrdered.Items()) { var product = cartItem.Product; // grant access... } }}