Author :JerryYang
Create by 2021.03.24
環(huán)境:
Unity:2020.3.0f1c1
一、后臺商品配置
- 進入蘋果開發(fā)者后臺,填寫稅務信息,銀行信息(不填會出現(xiàn)購買失?。?;
- 選擇你要添加內(nèi)購的應用,找到 In-App Purchases 選項,點擊 Manage;
選擇你要添加內(nèi)購的應用 - 點擊添加商品,然后完善商品信息;
注意:這里要填寫所以信息,包括截圖,直到狀態(tài)為 Ready to Submit 為止,不然也會出現(xiàn)購買失敗

添加商品
二、unity API接入
-
點擊 manage service 打開services面板;
Services - 選擇一個組織,沒有的話創(chuàng)建一個;
-
根據(jù)提示打開Purchasing,導入包,如果需要更新,請點擊update;
導入 -
購買功能可以通過unity提供的組件實現(xiàn),也可以用代碼實現(xiàn),我們選擇用代碼實現(xiàn)。
Unity IAP
三、代碼部分
using UnityEngine;
using UnityEngine.Purchasing;
using System;
public class PurchasingManager : IStoreListener
{
public static readonly PurchasingManager Instance = new PurchasingManager();
private IStoreController storeController;
private static IExtensionProvider extensionProvider;
private static IAppleExtensions appleExtension;
//private static IGooglePlayStoreExtensions googleExtension;
private Action<string> failedCallback;
private Action<Product> successedCallback;
PurchasingManager()
{
}
/// <summary>
/// 初始化商品
/// 建議在游戲初始化完成的時候就去初始化商品
/// </summary>
public void InitProduct()
{
if (IsInitialized()) return;
var module = StandardPurchasingModule.Instance();
ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
builder.AddProduct("goods_coins100", ProductType.Consumable);
builder.AddProduct("goods_vip7days", ProductType.NonConsumable);
UnityPurchasing.Initialize(this, builder);
}
/// <summary>
/// 發(fā)起內(nèi)購
/// </summary>
/// <param name="_productId">要購買的商品ID</param>
/// <param name="_successedCallback">購買成功回調</param>
/// <param name="_failedCallback">購買失敗回調</param>
public void Purchase(string _productId, Action<Product> _successedCallback, Action<string> _failedCallback)
{
failedCallback = _failedCallback;
successedCallback = _successedCallback;
if (!IsInitialized())
{
OnFailedCallback("Not initialized.");
return;
}
var product = storeController.products.WithID(_productId);
if (product == null || !product.availableToPurchase)
{
OnFailedCallback("Either is not found or is not available for purchase");
return;
}
Debug.Log($"Inicializando compra del producto {product.metadata.localizedTitle} en la tienda.");
storeController.InitiatePurchase(product);
}
/// <summary>
/// IOS恢復內(nèi)購
/// Google會在刪除應用后,第一次安裝是自動恢復
/// </summary>
/// <param name="restoreCallback">恢復回調</param>
public void IosRestore(Action<bool> restoreCallback)
{
if (appleExtension != null)
{
appleExtension.RestoreTransactions(restoreCallback);
}
else
{
Debug.LogWarning("IAppleExtensions is null");
restoreCallback(false);
}
}
//======================================分割線=========================================
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
storeController = controller;
extensionProvider = extensions;
appleExtension = extensions.GetExtension<IAppleExtensions>();
//googleExtension = extensions.GetExtension<IGooglePlayStoreExtensions>();
}
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.LogWarning("OnInitializeFailed Reason:" + error);
}
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
{
Debug.LogWarning("OnPurchaseFailedproduct:"+ product.transactionID + " failureReason:"+ failureReason);
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs purchaseEvent)
{
if (successedCallback != null)
{
successedCallback(purchaseEvent.purchasedProduct);
}
return PurchaseProcessingResult.Complete;
}
private bool IsInitialized()
{
return storeController != null && extensionProvider != null;
}
private void OnFailedCallback(string _reason)
{
if (failedCallback != null)
{
failedCallback(_reason);
}
}
}
四、打包測試
包名一定和你后臺的包名對應;
商品ID和類型也要和后臺對應;
-
在蘋果開發(fā)者后臺的用戶和訪問菜單中找到沙盒,添加沙盒測試人員;
添加測試員 在App Store登陸該測試賬號;
-
點擊要購買的商品,輸入密碼,彈出以下彈窗的時候說明購買成功了
購買成功
走到這里說明你接成功了,恭喜你。
暫時寫這么多,有不懂的或者需要補充的請私信我。




