Unity IAP的簡單使用

這裏我只貼出如何用代碼進行購買和恢復購買並拿出訂單號的方法(AppStore需要先去iTunes Connect設置商品id)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Security;

public class Test : MonoBehaviour, IStoreListener
{

    private IStoreController mStoreController;
    private IExtensionProvider mExtensionProvider;
    ConfigurationBuilder builder;

    private string consumeable = "product1";


    void Start()
    {
        if (mStoreController == null)
        {
            InitPurchasing();
        }
    }


    //初始化
    public void InitPurchasing()
    {
        if (IsInitialized())
        {
            return;
        }

        builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); 
        builder.AddProduct(consumeable, ProductType.NonConsumable);
        UnityPurchasing.Initialize(this, builder);
    }


    //購買
    public void BuyProduct()
    {
        if (IsInitialized())
        {
            Product produdt = mStoreController.products.WithID(consumeable);
            if (produdt != null && produdt.availableToPurchase)
            {
                mStoreController.InitiatePurchase(produdt);

                Debug.Log(produdt.metadata.localizedPrice);
            }
            else
            {
                Debug.Log("fail");
            }
        }
    }

    //恢復購買
    public void ReSotre()
    {
        if (!IsInitialized())
        {
            return;
        }

        if (mExtensionProvider != null
            && (Application.platform == RuntimePlatform.IPhonePlayer 
                || Application.platform == RuntimePlatform.OSXPlayer)) {
            var apple = mExtensionProvider.GetExtension<IAppleExtensions>();
            apple.RestoreTransactions((result) => {
                // Restore purchases initiated. See ProcessPurchase for any restored transacitons.
            });
        }
    }

    private bool IsInitialized()
    {
        return mStoreController != null && mExtensionProvider != null;
    }


    //---------------IStoreListener的四個接口的實現-----------

    //初始化成功
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        mStoreController = controller;
        mExtensionProvider = extensions;

    }

    //初始化失敗
    public void OnInitializeFailed(InitializationFailureReason error)
    {
        Debug.Log("初始化失敗了:" + error);
    }

    //購買失敗
    public void OnPurchaseFailed(Product i, PurchaseFailureReason p)
    {
        Debug.Log(i.definition.id + "\n" + p);
    }


    //購買成功和恢復成功的回調,可以根據id的不同進行不同的操作
    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
    {
        if (string.Equals(e.purchasedProduct.definition.id, consumeable, System.StringComparison.Ordinal))
        {   
            //獲取商品的描述信息,標題,價格,帶單位的(¥,$等等)
            //這一步一般可以放在初始化完成的回調裏,用於刷新你的相關UI
            Debug.Log("price:" + e.purchasedProduct.metadata.localizedPriceString); 
            Debug.Log(e.purchasedProduct.metadata.localizedTitle + e.purchasedProduct.metadata.localizedDescription);

            //交易號
            Debug.Log("storeSpecificId:" + e.purchasedProduct.definition.storeSpecificId);     

            //回執單  
            Debug.Log("receipt:" + e.purchasedProduct.receipt);                                

            //商品的id號
            Debug.Log("transactionID:" + e.purchasedProduct.transactionID);                    

            Debug.Log("成功了!!!!");


            //這裏是獲取訂單號,用於存儲到自己的服務器,以及恢復購買時的對比
            #if UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX
            // Get a reference to IAppleConfiguration during IAP initialization.
            var appleConfig = builder.Configure<IAppleConfiguration>();
            var receiptData = System.Convert.FromBase64String(appleConfig.appReceipt);
            AppleReceipt receipt = new AppleValidator(AppleTangle.Data()).Validate(receiptData);

            Debug.Log(receipt.bundleID);
            Debug.Log(receipt.receiptCreationDate);
            foreach (AppleInAppPurchaseReceipt productReceipt in receipt.inAppPurchaseReceipts) 
            {
                Debug.Log("訂單號:" +  productReceipt.originalTransactionIdentifier);
            }
            #endif

        }
        return PurchaseProcessingResult.Complete;

    }
}
發佈了37 篇原創文章 · 獲贊 20 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章