com.guru.unity.sdk/Runtime/Code/Core/GuruSDK.IAP.cs

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
}
}