136 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
namespace Guru
 | 
						|
{
 | 
						|
    using UnityEngine;
 | 
						|
    using System;
 | 
						|
    using System.Linq;
 | 
						|
    
 | 
						|
    
 | 
						|
    public partial class GuruSDK
 | 
						|
    {
 | 
						|
        public static bool IsIAPReady = false;
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 初始化IAP 功能
 | 
						|
        /// </summary>
 | 
						|
        public static void InitIAP(byte[] googleKey, byte[] appleRootCerts)
 | 
						|
        {
 | 
						|
            GuruIAP.Instance.OnInitResult += OnIAPInitResult;
 | 
						|
            GuruIAP.Instance.OnRestored += OnRestored;
 | 
						|
            GuruIAP.Instance.OnBuyStart += OnBuyStart;
 | 
						|
            GuruIAP.Instance.OnBuyEnd += OnBuyEnd;
 | 
						|
            
 | 
						|
            GuruIAP.Instance.InitWithKeys(googleKey, appleRootCerts, IsDebugMode);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 初始化结果
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="success"></param>
 | 
						|
        private static void OnIAPInitResult(bool success)
 | 
						|
        {
 | 
						|
            LogI($"IAP init result: {success}");
 | 
						|
            
 | 
						|
            IsIAPReady = success;
 | 
						|
            Callbacks.IAP._onIAPInitComplete?.Invoke(success);
 | 
						|
        }
 | 
						|
 | 
						|
        private static bool CheckIAPReady()
 | 
						|
        {
 | 
						|
            if (!IsIAPReady)
 | 
						|
            {
 | 
						|
                LogE("IAP is not ready, call <GuruSDK.InitIAP> first.");
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
        
 | 
						|
        #region Purchase
 | 
						|
 | 
						|
        public static ProductSetting GetProductSettingById(string productId)
 | 
						|
        {
 | 
						|
            var products = GuruSettings.Instance.Products;
 | 
						|
            if (products != null && products.Length > 0)
 | 
						|
            {
 | 
						|
                return products.FirstOrDefault(p => p.ProductId == productId);   
 | 
						|
            }
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
        
 | 
						|
        private static Action<string, bool> _onPurchaseCallback;
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 购买商品, 通过商品Name
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="productId"></param>
 | 
						|
        /// <param name="purchaseCallback"></param>
 | 
						|
        public static void Purchase(string productName, Action<string, bool> purchaseCallback = null)
 | 
						|
        {
 | 
						|
            if (CheckIAPReady())
 | 
						|
            {
 | 
						|
                _onPurchaseCallback = purchaseCallback;
 | 
						|
                GuruIAP.Instance.Buy(productName);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 购买商品, 通过商品ID
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="productId"></param>
 | 
						|
        /// <param name="purchaseCallback"></param>
 | 
						|
        public static bool PurchaseById(string productId, Action<string, bool> purchaseCallback = null)
 | 
						|
        {
 | 
						|
            var productName = GetProductSettingById(productId)?.ProductName ?? "";
 | 
						|
            
 | 
						|
            if (CheckIAPReady() && !string.IsNullOrEmpty(productName))
 | 
						|
            {
 | 
						|
                Purchase(productName, purchaseCallback);
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 支付回调
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="productId"></param>
 | 
						|
        /// <param name="success"></param>
 | 
						|
        private static void OnBuyEnd(string productId, bool success)
 | 
						|
        {
 | 
						|
            _onPurchaseCallback?.Invoke(productId, success);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private static void OnBuyStart(string productId)
 | 
						|
        {
 | 
						|
            Callbacks.IAP._onPurchaseStart?.Invoke(productId);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
        
 | 
						|
        #region Restore Purchase
 | 
						|
 | 
						|
        private static Action<bool> _onRestored;
 | 
						|
        /// <summary>
 | 
						|
        /// 恢复购买
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="restoreCallback"></param>
 | 
						|
        public static void Restore(Action<bool> restoreCallback)
 | 
						|
        {
 | 
						|
            if (CheckIAPReady())
 | 
						|
            {
 | 
						|
                _onRestored = restoreCallback;
 | 
						|
                GuruIAP.Instance.Restore();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private static void OnRestored(bool success)
 | 
						|
        {
 | 
						|
            _onRestored?.Invoke(success);
 | 
						|
        }
 | 
						|
        
 | 
						|
        #endregion
 | 
						|
 | 
						|
    }
 | 
						|
} |