update: Add Subscription API

deeplink
胡宇飞 2024-05-07 21:48:47 +08:00
parent 01ee547c8e
commit 6ef4d0cdec
2 changed files with 117 additions and 6 deletions

View File

@ -22,6 +22,7 @@ namespace Guru
private const string DefaultCategory = "Store";
private static bool _showLog;
private static string _userId;
private ConfigurationBuilder _configBuilder; // 商店配置创建器
@ -119,8 +120,9 @@ namespace Guru
/// <summary>
/// 初始化支付服务
/// </summary>
public virtual void Initialize(bool showLog = false)
public virtual void Initialize(string userId, bool showLog = false)
{
_userId = userId;
_showLog = showLog;
InitPurchasing();
}
@ -131,12 +133,12 @@ namespace Guru
/// <param name="googlePublicKey"></param>
/// <param name="appleRootCert"></param>
/// <param name="showLog"></param>
public virtual void InitWithKeys(byte[] googlePublicKey, byte[] appleRootCert, bool showLog = false)
public virtual void InitWithKeys(string userId, byte[] googlePublicKey, byte[] appleRootCert, bool showLog = false)
{
_googlePublicKey = googlePublicKey;
_appleRootCert = appleRootCert;
InitModel();
Initialize(showLog);
Initialize(userId, showLog);
}
/// <summary>
@ -215,8 +217,11 @@ namespace Guru
_storeController = controller;
_storeExtensionProvider = extensions;
if (string.IsNullOrEmpty(_userId)) _userId = IPMConfig.IPM_UID;
#if UNITY_IOS
_appleExtensions = extensions.GetExtension<IAppleExtensions>();
_appleExtensions.SetApplicationUsername(_userId); // SetUp UID
// On Apple platforms we need to handle deferred purchases caused by Apple's Ask to Buy feature.
// On non-Apple platforms this will have no effect; OnDeferred will never be called.
_appleExtensions.RegisterPurchaseDeferredListener(item =>
@ -225,7 +230,7 @@ namespace Guru
OnAppStorePurchaseDeferred?.Invoke(item);
});
#elif UNITY_ANDROID
_configBuilder.Configure<IGooglePlayConfiguration>().SetObfuscatedAccountId(IPMConfig.IPM_UID);
_configBuilder.Configure<IGooglePlayConfiguration>().SetObfuscatedAccountId(_userId); // SetUp UID
_googlePlayStoreExtensions = extensions.GetExtension<IGooglePlayStoreExtensions>();
// _googlePlayStoreExtensions.SetObfuscatedAccountId(IPMConfig.IPM_UID);
//添加安装游戏后第一次初试化进行恢复购买的回调 只有安卓才有
@ -1051,6 +1056,10 @@ namespace Guru
#region Subscription
public static DateTime DefaultSubscriptionDate = new DateTime(1970, 1,1,0,0,0);
private SubscriptionManager GetSubManager(string productName)
{
var product = GetProduct(productName);
@ -1064,6 +1073,8 @@ namespace Guru
public bool IsSubscriptionFreeTrail(string productName)
{
if(!IsInitialized) return false;
var smgr = GetSubManager(productName);
if (smgr != null)
{
@ -1075,6 +1086,8 @@ namespace Guru
public bool IsSubscriptionCancelled(string productName)
{
if(!IsInitialized) return false;
var smgr = GetSubManager(productName);
if (smgr != null)
{
@ -1085,6 +1098,8 @@ namespace Guru
public bool IsSubscriptionAvailable(string productName)
{
if(!IsInitialized) return false;
var smgr = GetSubManager(productName);
if (smgr != null)
{
@ -1096,6 +1111,8 @@ namespace Guru
public bool IsSubscriptionExpired(string productName)
{
if(!IsInitialized) return false;
var smgr = GetSubManager(productName);
if (smgr != null)
{
@ -1107,6 +1124,8 @@ namespace Guru
public bool IsSubscriptionAutoRenewing(string productName)
{
if(!IsInitialized) return false;
var smgr = GetSubManager(productName);
if (smgr != null)
{
@ -1123,6 +1142,8 @@ namespace Guru
/// <returns></returns>
public bool IsSubscriptionIntroductoryPricePeriod(string productName)
{
if(!IsInitialized) return false;
var smgr = GetSubManager(productName);
if (smgr != null)
{
@ -1131,6 +1152,96 @@ namespace Guru
return false;
}
public DateTime GetSubscriptionExpireDate(string productName)
{
if(!IsInitialized) return DefaultSubscriptionDate;
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo()?.getExpireDate() ?? DateTime.Now;
}
return DefaultSubscriptionDate;
}
public DateTime GetSubscriptionPurchaseDate(string productName)
{
if(!IsInitialized) return DefaultSubscriptionDate;
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo().getPurchaseDate();
}
return DefaultSubscriptionDate;
}
public DateTime GetSubscriptionCancelDate(string productName)
{
if(!IsInitialized) return DefaultSubscriptionDate;
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo().getCancelDate();
}
return DefaultSubscriptionDate;
}
public TimeSpan GetSubscriptionRemainingTime(string productName)
{
if(!IsInitialized) return TimeSpan.Zero;
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo().getRemainingTime();
}
return TimeSpan.Zero;
}
public TimeSpan GetSubscriptionIntroductoryPricePeriod(string productName)
{
if(!IsInitialized) return TimeSpan.Zero;
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo().getIntroductoryPricePeriod();
}
return TimeSpan.Zero;
}
public TimeSpan GetSubscriptionFreeTrialPeriod(string productName)
{
if(!IsInitialized) return TimeSpan.Zero;
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo().getFreeTrialPeriod();
}
return TimeSpan.Zero;
}
public string GetSubscriptionInfoJsonString(string productName)
{
if(!IsInitialized) return "";
var smgr = GetSubManager(productName);
if (smgr != null)
{
return smgr.getSubscriptionInfo().getSubscriptionInfoJsonString();
}
return "";
}
#endregion
}

View File

@ -14,9 +14,9 @@ namespace Guru.Sample
return 1;
}
public override void Initialize(bool showLog = false)
public override void Initialize(string uid, bool showLog = false)
{
base.Initialize(true);
base.Initialize(uid,true);
InitGameProducts();
}