com.guru.unity.sdk.core/Runtime/GuruIAP/Runtime/Code/IAPModel.cs

159 lines
3.8 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace Guru
{
using System;
using Newtonsoft.Json;
public class IAPModel
{
public static readonly float SaveInterval = 3;
public static readonly string PlatformAndroid = "android";
public static readonly string PlatformIOS = "ios";
public int buyCount = 0;
public List<string> androidTokens;
public List<string> iosReceipts;
public List<GoogleOrderData> googleOrders;
public List<AppleOrderData> appleOrders;
/// <summary>
/// 是否还有未上报的 Google Order
/// </summary>
public bool HasUnreportedGoogleOrder => (googleOrders?.Count ?? 0) > 0;
/// <summary>
/// 是否还有未上报的 Apple Order
/// </summary>
public bool HasUnreportedAppleOrder => (appleOrders?.Count ?? 0) > 0;
public IAPModel()
{
androidTokens = new List<string>(20);
iosReceipts = new List<string>(20);
googleOrders = new List<GoogleOrderData>(20);
appleOrders = new List<AppleOrderData>(20);
}
public static IAPModel Load()
{
IAPModel model = null;
var json = LoadModelData();
if (!string.IsNullOrEmpty(json))
{
model = JsonConvert.DeserializeObject<IAPModel>(json);
}
if(null != model) return model;
return new IAPModel();
}
public void Save()
{
SaveModelData(this);
}
private static string LoadModelData()
{
return PlayerPrefs.GetString(nameof(IAPModel), "");
}
private static void SaveModelData(IAPModel model)
{
var json = JsonConvert.SerializeObject(model);
PlayerPrefs.SetString(nameof(IAPModel), json);
}
#region Receipt
public void AddToken(string token)
{
if (androidTokens == null) androidTokens = new List<string>(20);
if(string.IsNullOrEmpty(token)) return;
androidTokens.Add(token);
Save();
}
/// <summary>
/// 添加收据
/// </summary>
/// <param name="receipt"></param>
/// <param name="platform"></param>
public void AddReceipt(string receipt)
{
if (iosReceipts == null) iosReceipts = new List<string>(20);
if(string.IsNullOrEmpty(receipt)) return;
iosReceipts.Add(receipt);
Save();
}
public bool IsTokenExists(string token)
{
if (androidTokens == null) return false;
return androidTokens.Contains(token);
}
public bool IsReceiptExist(string receipt)
{
if (iosReceipts == null) return false;
return iosReceipts.Contains(receipt);
}
#endregion
#region Orders
public void AddGoogleOrder(GoogleOrderData order)
{
googleOrders.Add(order);
Save();
}
public void RemoveGoogleOrder(GoogleOrderData order)
{
googleOrders.Remove(order);
Save();
}
public void ClearGoogleOrders()
{
googleOrders.Clear();
Save();
}
public void AddAppleOrder(AppleOrderData order)
{
appleOrders.Add(order);
Save();
}
public void RemoveAppleOrder(AppleOrderData order)
{
appleOrders.Remove(order);
Save();
}
public void ClearAppleOrders()
{
appleOrders.Clear();
Save();
}
#endregion
}
}