购买
获取购买信息并确定玩家购买的商品的购买状态。
阅读时间1 分钟最后更新于 20 天前
Unity IAP 从商店获取购买信息,以便您的应用程序可以识别和满足玩家的购买需求。这样可以确保您的游戏可以根据用户的购买历史记录向用户交付内容或授权,即使用户在应用外部或其他设备上购买了物品也是如此。 购买表示为
OrderOrder获取购买
可以从商店中检索用户进行的购买。但是,消耗品在使用后必须由应用程序进行跟踪,因为商店不会退回已用完的消耗品。对于非消耗品和订阅,商店会在您调用FetchPurchasesCheckEntitlement确定购买状态
您可以通过两种方式确定购买状态:- 使用 确定
Order是Order、PendingOrder、ConfirmedOrder还是DeferredOrder。FailedOrder - 使用 接收
CheckEntitlement,返回EntitlementStatus、EntitledButNotFinished、EntitledUntilConsumed、FullyEntitled或NotEntitled。Unknown
购买属性
属性 | 描述 |
|---|---|
| 购买的唯一标识符。 |
| 购买的商品。 |
| 购买的商品数量。 |
| 用于向商店验证购买的收据数据。 |
购买状态
State | 描述 |
|---|---|
| 购买已付款但尚未完成。 |
| 购买已完成并确认。 |
| 由于错误,购买失败。 |
| 购买正在等待付款。 |
处理购买
进行购买并等待实现时调用OnPurchasePendingOnPurchasePendingOnPurchasePending// Handle restore on initializationprivate async void Start(){ // Setup, e.g. add listeners to your StoreController... m_StoreController.OnPurchasePending += OnPurchasePending; m_StoreController.OnPurchasesFetch += OnPurchasesFetch; await m_StoreController.Connect(); // Fetch previous purchases (includes confirmed orders) m_StoreController.FetchPurchases();}// Handle new purchases and pending transactionsprivate void OnPurchasePending(PendingOrder order){ ProcessPurchase(order);}// Handle fetched purchases (includes previously confirmed orders)private void OnPurchasesFetch(Orders orders){ foreach(在 orders.ConfirmedOrders 中更改 confirmedOrder) { if (confirmedOrder.CartOrdered.Items().FirstOrDefault()?.Product.definition.type != ProductType.Consumable) { // Mark non-consumable and subscription products as entitled on fetch, as they only need to be granted once MarkAsEntitled(confirmedOrder.CartOrdered.Items().FirstOrDefault().Product); } }}// Your ProcessPurchase logicprivate void ProcessPurchase(PendingOrder order){ foreach(var product in order.CartOrdered.Items()) { // Grant product GrantProduct(product); } // Confirm the order to finalize the transaction m_StoreController.ConfirmPurchase(order);}
购买确认和可靠性
Unity IAP 要求您显式确认购买,以确保可靠地完成购买,即使在网络中断或应用程序崩溃期间也是如此。如果购买已付款但未兑现,Unity IAP 会在应用程序下次初始化时将购买内容传递给应用程序。此过程可防止购买流程中断时或在应用程序离线时完成购买时丢失购买。 成功执行购买后,请致电具有相关PendingOrderConfirmPurchase确认购买已保留到云端
如果要将消耗品购买保存到云端,必须在成功保存购买后调用ConfirmPurchasePending