159 lines
3.8 KiB
C#
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
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} |