mergemilitary/Assets/TKGSDK/Common/GameInterface/TKGSDKManager.cs

1065 lines
72 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Touka;
#if USE_IAP
using UnityEngine.Purchasing;
#endif
public class TKGSDKManager : TKGSingleton<TKGSDKManager>
{
public bool IsNoAllAD
{
get => mIsNoAllAD;
set
{
mIsNoAllAD = value;
if (mIsNoAllAD)
{
PurchasedRemoveAds();
HideBanner();
}
}
}
private bool mIsNoAllAD = false;
public bool IsRemoveAds
{
get => mIsRemoveAds;
set
{
mIsRemoveAds = value;
if (mIsRemoveAds)
{
PurchasedRemoveAds();
HideBanner();
}
}
}
private bool mIsRemoveAds = false;
public bool IsIAPEnabled
{
get
{
AppChannel tChannel = GetChannel();
return (tChannel == AppChannel.AppStore_GB || tChannel == AppChannel.GooglePlay);
}
}
private int mLoginCount
{
get => PlayerPrefs.GetInt(nameof(mLoginCount), 0);
set => PlayerPrefs.SetInt(nameof(mLoginCount), value);
}
private int mPassCount
{
get => PlayerPrefs.GetInt(nameof(mPassCount), 0);
set => PlayerPrefs.SetInt(nameof(mPassCount), value);
}
private bool mHasPoppedReview
{
get => PlayerPrefs.GetInt(nameof(mHasPoppedReview), 0) == 1;
set => PlayerPrefs.SetInt(nameof(mHasPoppedReview), value ? 1 : 0);
}
private bool isInit = false;
/// <summary>
/// 支付成功时回调
/// orderID, productName, productID, purchaseResult, gameExtra
/// </summary>
public Action<string,string, string, bool, string> OnPurchaseDone;
private ITKGSDK m_sdkInterface;
protected override void OnInstanceCreate()
{
base.OnInstanceCreate();
m_sdkInterface = new TKGSDKNative();
}
/// <summary>
/// init sdk
/// </summary>
/// <param name="_initCallback"></param>
public void InitSDK(Action _initCallback = null)
{
if (isInit) return;
#if USE_IAP
TKGDebugger.LogDebug("USE_IAP = True");
IAPTool.Instance.PreInitialize();
#else
TKGDebugger.LogDebug("USE_IAP = False");
#endif
m_sdkInterface.InitSDK(_initCallback);
isInit = true;
mLoginCount++;
//if (IsIAPEnabled)
//{
#if USE_IAP
IAPTool.Instance.Initialize();
#endif
//}
}
/// <summary>
/// Set game focus
/// </summary>
/// <param name="_gameFocusAction"></param>
public void SetGameFocusListener(Action<bool> _gameFocusAction)
{
m_sdkInterface.SetGameFocusListener(_gameFocusAction);
}
// reward click callback
public void SetRewardClickListener(Action _clickCallback = null)
{
m_sdkInterface.SetRewardClickListener(_clickCallback);
}
// ads revenue callback
// adsType, price, currency
public void SetAdsRevenueCallback(Action<AdsType, string, string> _adsRevenueCallback)
{
TKGSDKCallback.SetAdsRevenueCallback(_adsRevenueCallback);
}
/// <summary>
/// Get channel
/// </summary>
/// <returns></returns>
public AppChannel GetChannel()
{
return m_sdkInterface.GetChannel();
}
/// <summary>
/// Set log enable
/// </summary>
public void SetLogEnable(bool _enable)
{
StaticOtherConfig.IsDebugLog = _enable;
m_sdkInterface.SetLogEnable(_enable);
}
#region Ads
// 去广告接口调用
public void PurchasedRemoveAds()
{
m_sdkInterface.PurchasedRemoveAds();
}
/// <summary>
/// Show Interstitial Ad
/// </summary>
/// <param name="_adPos"> Name of interstitial ad placement. </param>
/// <param name="_callback"> Callback of interstitial ad close and show interstitial failed</param>
/// <param name="_IvType"> IVADType for distinguish interstitial ads frequency, default use iv1</param>
public void ShowInterstitialAd(TKGIVAdPositionName _adPos, Action _callback = null, IVADType _IvType = IVADType.IV1)
{
ShowInterstitialAd(_adPos.ToString(), _callback, _IvType);
}
public void ShowInterstitialAd(string _adPos, Action _callback = null, IVADType _IvType = IVADType.IV1)
{
#if UNITY_EDITOR || NO_AD
if (null != _callback)
{
Debug.Log("Need Show IV, in editor directly invoke callback.");
_callback.Invoke();
}
return;
#endif
if (IsNoAllAD || IsRemoveAds)
{
_callback?.Invoke();
}
else
{
m_sdkInterface.ShowInterstitialAd(_adPos, _callback, _IvType);
}
}
/// <summary>
/// Show Reward Ad
/// </summary>
/// <param name="_adPos"> Name of reward ad placement</param>
/// <param name="_rewardCallback"> true:reward succ, false: reward failed</param>
/// <param name="_showFailedCallback">Callback of reward ad show fail</param>
public void ShowRewardAd(TKGRVPositionName _adPos, Action<bool> _rewardCallback = null,
Action _showFailedCallback = null, bool showSDKToast = false)
{
ShowRewardAd(_adPos.ToString(), _rewardCallback, _showFailedCallback, showSDKToast);
}
public void ShowRewardAd(string _adPos, Action<bool> _rewardCallback = null, Action _showFailedCallback = null,
bool showSDKToast = false)
{
#if UNITY_EDITOR || NO_AD
if (null != _rewardCallback)
{
_rewardCallback.Invoke(true);
}
return;
#endif
if (IsNoAllAD)
{
_rewardCallback?.Invoke(true);
}
else
{
m_sdkInterface.SetShowSDKToast(showSDKToast);
m_sdkInterface.ShowRewardAd(_adPos, _rewardCallback, _showFailedCallback);
}
}
public void ShowNative(RectTransform pRect, Camera pCam = null, string pAdPos = "")
{
#if !NO_AD
if (!IsNoAllAD && !IsRemoveAds)
{
m_sdkInterface.ShowNativeAd(pRect, pCam, pAdPos);
}
#endif
}
/// <summary>
/// Is Ready Interstitial
/// </summary>
/// <returns></returns>
public bool IsReadyInterstitialAd()
{
return m_sdkInterface.IsReadyInterstitialAd();
}
/// <summary>
/// Is Ready Reward
/// </summary>
/// <returns></returns>
public bool IsReadyRewardAd()
{
return m_sdkInterface.IsReadyRewardAd();
}
/// <summary>
/// Is Ready Native Ad
/// </summary>
/// <returns></returns>
public bool IsReadyNativeAd()
{
#if NO_AD
return false;
#else
return m_sdkInterface.IsReadyNativeAd();
#endif
}
/// <summary>
/// Show banner
/// </summary>
/// <param name="_bannerAlign">bannerAlign</param>
public void ShowBanner(TKGBannerAlign _bannerAlign)
{
#if !NO_AD
if (!IsNoAllAD && !IsRemoveAds)
{
m_sdkInterface.ShowBanner(_bannerAlign);
}
#endif
}
/// <summary>
/// Hide banner
/// </summary>
public void HideBanner()
{
m_sdkInterface.HideBanner();
}
/// <summary>
/// Remove Native
/// </summary>
public void RemoveNative()
{
m_sdkInterface.RemoveNativeAd();
}
#endregion
#region Log Event
#region Normal
/// <summary>
/// Log Event
/// </summary>
/// <param name="_eventSort"></param>
public void LogEvent(string _eventSort)
{
m_sdkInterface.LogEvent(_eventSort);
}
/// <summary>
/// Log Event
/// </summary>
/// <param name="_eventSort"></param>
/// <param name="_key"></param>
/// <param name="_value"></param>
public void LogEvent(string _eventSort, string _key, string _value)
{
m_sdkInterface.LogEvent(_eventSort, _key, _value);
}
/// <summary>
/// Log Event
/// </summary>
/// <param name="_eventSort"></param>
/// <param name="_key01"></param>
/// <param name="_value01"></param>
/// <param name="_key02"></param>
/// <param name="_value02"></param>
public void LogEvent(string _eventSort, string _key01, string _value01, string _key02, string _value02)
{
m_sdkInterface.LogEvent(_eventSort, _key01, _value01, _key02, _value02);
}
/// <summary>
/// Log Event
/// </summary>
/// <param name="_eventSort"></param>
/// <param name="_eventDic"></param>
public void LogEvent(string _eventSort, Dictionary<string, string> _eventDic = null)
{
m_sdkInterface.LogEvent(_eventSort, _eventDic);
}
#endregion
#region Level Event
/// <summary>
/// Level start
/// </summary>
/// <param name="_level"></param>
public void LevelStart(int _level)
{
LevelStart(_level.ToString());
}
/// <summary>
/// Level start
/// </summary>
/// <param name="_level"></param>
public void LevelStart(string _level)
{
m_sdkInterface.LevelStart(_level);
}
/// <summary>
/// Level end
/// </summary>
/// <param name="_level"></param>
/// <param name="_win"></param>
public bool LevelEnd(int _level, StageResult _stageResult)
{
return LevelEnd(_level.ToString(), _stageResult);
}
/// <summary>
/// Level end,if return false, it means review pops up.
/// </summary>
/// <param name="_level"></param>
/// <param name="_win"></param>
public bool LevelEnd(string _level, StageResult _stageResult)
{
m_sdkInterface.LevelEnd(_level, _stageResult);
if (_stageResult == StageResult.StageSucc)
{
mPassCount++;
#if UNITY_IOS //only ios has review popup
return !CheckReviewPop(mPassCount);
#endif
}
return true;
}
private bool CheckReviewPop(int pLevel)
{
if (mHasPoppedReview)
return false;
if (mLoginCount == 1 && pLevel == StaticOtherConfig.FirstLoginPopLevel)
{
Debug.Log("pop first review");
mHasPoppedReview = true;
Review();
return true;
}
else if (mLoginCount > 1 && pLevel == StaticOtherConfig.OtherLoginPopLevel)
{
Debug.Log("pop other review");
mHasPoppedReview = true;
Review();
return true;
}
return false;
}
#endregion
#region Reward Ad Button Show
/// <summary>
/// Log Reward ad button show
/// </summary>
/// <param name="_pos"></param>
public void LogRewardAdBtnShow(string _pos)
{
m_sdkInterface.LogRewardAdBtnShow(_pos);
}
#endregion
#region Tracking Event
/// <summary>
/// Log Tracking Event
/// </summary>
/// <param name="_eventType"></param>
private void LogTrackingEvent(TrackingEventType _eventType)
{
//m_sdkInterface.LogTrackingEvent(_eventType);
}
#endregion
#endregion
#region Online Config
/// <summary>
/// get config - string
/// </summary>
/// <param name="_key"></param>
/// <returns></returns>
public string GetConfigStr(string _key)
{
return m_sdkInterface.GetConfigStr(_key);
}
public string GetConfigStr(TKGParamKey _key)
{
return m_sdkInterface.GetConfigStr(_key.ToString());
}
/// <summary>
/// get config - int
/// </summary>
/// <param name="_key"></param>
/// <returns></returns>
public int GetConfigInt(string _key)
{
return m_sdkInterface.GetConfigInt(_key);
}
public int GetConfigInt(TKGParamKey _key)
{
return m_sdkInterface.GetConfigInt(_key.ToString());
}
/// <summary>
/// get config - bool
/// </summary>
/// <param name="_key"></param>
/// <returns></returns>
public bool GetConfigBool(string _key)
{
return m_sdkInterface.GetConfigBool(_key);
}
public bool GetConfigBool(TKGParamKey _key)
{
return m_sdkInterface.GetConfigBool(_key.ToString());
}
#endregion
#region Others (common)
/// <summary>
/// review
/// </summary>
public void Review()
{
m_sdkInterface.Review();
}
/// 使用 OpenPolicyPop 接口 === Use OpenPolicyPop
/// 使用 OpenPolicyPop 接口 === Use OpenPolicyPop
/// 使用 OpenPolicyPop 接口 === Use OpenPolicyPop
/// <summary>
/// open privacy url
/// </summary>
//public void OpenPrivacyURL()
//{
// m_sdkInterface.OpenPrivacyURL();
//}
/// 使用 OpenPolicyPop 接口 === Use OpenPolicyPop
/// 使用 OpenPolicyPop 接口 === Use OpenPolicyPop
/// 使用 OpenPolicyPop 接口 === Use OpenPolicyPop
/// <summary>
/// open user agreement url
/// </summary>
//public void OpenUserTermURL()
//{
// m_sdkInterface.OpenUserTermURL();
//}
/// <summary>
/// open more game
/// </summary>
public void OpenMoreGame()
{
m_sdkInterface.OpenMoreGame();
}
/// <summary>
/// show picture cross
/// </summary>
public bool showPictureCross()
{
return m_sdkInterface.showPictureCross();
}
/// <summary>
/// remove picture cross
/// </summary>
public void removePictureCross()
{
m_sdkInterface.removePictureCross();
}
/// <summary>
/// show more game icon
/// </summary>
public bool showMoreGameIcon()
{
return m_sdkInterface.showMoreGameIcon();
}
/// <summary>
/// remove more game icon
/// </summary>
public void removeMoreGameIcon()
{
m_sdkInterface.removeMoreGameIcon();
}
/// <summary>
/// open url by browser
/// </summary>
/// <param name="_url"></param>
public void OpenUrlByBrowser(string _url)
{
m_sdkInterface.OpenUrlByBrowser(_url);
}
public void OpenPolicyPop()
{
m_sdkInterface.OpenPolicyPop();
}
/// <summary>
/// shake
/// </summary>
/// <param name="_shakeType">0 light,1 medium,2 heavy</param>
/// <param name="_intensity">ios 0~1, android any num</param>
public void Shake(int _shakeType, float _intensity = 1)
{
m_sdkInterface.Shake(_shakeType, _intensity);
}
/// <summary>
/// if is debug mode
/// </summary>
public bool IsDebugMode()
{
return m_sdkInterface.IsDebugMode();
}
/// <summary>
/// get user name and user id card
/// format will be "Jack_654121199212099999"
/// </summary>
public string GetUserNameAndUserIDCard()
{
return m_sdkInterface.GetUserNameAndUserIDCard();
}
/// <summary>
/// set segment type to sdk
/// </summary>
/// <param name="type">segment type</param>
public void SetSegment(SegmentType type)
{
m_sdkInterface.SetSegment(type);
}
/// <summary>
/// get a iap product list for sdk config file
/// </summary>
public Dictionary<string, string> GetIAPProductList()
{
return m_sdkInterface.GetIAPProductList();
}
/// <summary>
/// share txt
/// </summary>
/// <param name="_shareTxt"></param>
public void Share(string shareText)
{
m_sdkInterface.ShareTxt(shareText);
}
/// <summary>
/// regist APNS
/// </summary>
public void RegistAPNS()
{
m_sdkInterface.RegistAPNS();
}
/// <summary>
/// shake
/// </summary>
/// <param name="notiName">notification identifier</param>
/// <param name="body">The body of the notification.</param>
/// <param name="fireDate">notify after the time interval. format:yyyy-MM-dd HH:mm:ss </param>
/// <param name="badge">The application badge number.</param>
/// <param name="title">The title of the notification.</param>
/// <param name="subTitle">The subtitle of the notification.</param>
public void RegistNotification(string notiId, string body, string fireDate, int badge = 1, string title = "",
string subTitle = "")
{
m_sdkInterface.RegistNotification(notiId, body, fireDate, badge, title, subTitle);
}
/// <summary>
/// remove all notification
/// </summary>
public void RemoveAllNotifications()
{
m_sdkInterface.RemoveAllNotifications();
}
/// <summary>
/// remove notification by notification identifier
/// </summary>
/// <param name="notiId">notification identifier</param>
public void RemoveNotification(string notiId)
{
m_sdkInterface.RemoveNotification(notiId);
}
#endregion
#region others
public void Toast(string text)
{
m_sdkInterface.Toast(text);
}
/// <summary>
/// Set user source listener
/// only call first can back source
/// </summary>
/// <param name="_userSourceAction"> true : origin userfalse : not origin user </param>2
public void SetUserSourceListener(Action<bool, string> _userSourceAction)
{
m_sdkInterface.SetUserSourceListener(_userSourceAction);
}
/// <summary>
/// Set user source listener
/// only call first can back source
/// with campaginName
/// </summary>
/// <param name="_userSourceAction"> true : origin userfalse : not origin user </param>2
public void SetUserSourceListener(Action<bool, string, string> _userSourceAction)
{
m_sdkInterface.SetUserSourceListener(_userSourceAction);
}
/// <summary>
/// set common callback
/// </summary>
/// <param name="_commonCallbackAction"></param>
public void SetTKGCommonCallback(Action<CommonCallbackCode, string> _commonCallbackAction)
{
m_sdkInterface.SetTKGCommonCallback(_commonCallbackAction);
}
/// <summary>
/// 注册功能开关回调
/// </summary>
/// <param name="_functionKeys"> 各功能名称 </param>
/// <param name="_functionSwitchCallback"> 回调事件,回来每个功能名称及对应开关 </param>
public void SetFunctionSwitchListener(List<FunctionType> _functionKeys,
Action<FunctionType, bool> _functionSwitchCallback)
{
m_sdkInterface.SetFunctionSwitchListener(_functionKeys, _functionSwitchCallback);
}
#endregion
#region
/// <summary>
/// 内购成功后上报价格
/// </summary>
/// <param name="price"> 商品价格 </param>
public void LogPurchasePrice(string price, string currency)
{
m_sdkInterface.LogPurchasePrice(price, currency);
}
/// <summary>
/// Robux点击提现按钮
/// </summary>
public void LogRobuxCashOut()
{
m_sdkInterface.LogRobuxCashOut();
}
/// <summary>
/// 完成新手引导
/// </summary>
public void LogNoviceGuideFinish()
{
m_sdkInterface.LogNoviceGuideFinish();
}
#endregion
#region GooglePlay评论引导
/// <summary>
/// Pop up GooglePlay Rate guid
/// </summary>
public bool GuidGpComment()
{
return m_sdkInterface.GuidGpComment();
}
#endregion
#region
/// <summary>
/// User Login
/// </summary>
/// <param name="_loginType">登录类型</param>
/// <param name="_loginResultCallback">登录回调Action<登录状态码登录类型登录状态信息useridtoken邮箱 , 显示名称 , 头像url</param>
public void Login(LoginType _loginType,
Action<LoginStatus, LoginType, string, string, string, string, string, string> _loginResultCallback = null)
{
m_sdkInterface.Login(_loginType, _loginResultCallback);
}
/// <summary>
/// 自动根据上次登陆的类型进行登陆,登陆失败需要跳转到登陆界面。
/// </summary>
/// <param name="_loginResultCallback"></param>
public void AutoLogin(
Action<LoginStatus, LoginType, string, string, string, string, string, string> _loginResultCallback = null)
{
m_sdkInterface.AutoLogin(_loginResultCallback);
}
/// <summary>
/// 获取当前账号类型。 用于显示绑定界面。
/// </summary>
/// <returns></returns>
public LoginType GetAccountType()
{
return m_sdkInterface.GetAccountType();
}
/// <summary>
/// 是否可以自动登陆
/// </summary>
/// <returns></returns>
public bool IsCanAutoLogin()
{
return m_sdkInterface.IsCanAutoLogin();
}
/// <summary>
/// Logout
/// </summary>
/// <param name="_logoutCallback"></param>
public void Logout(Action _logoutCallback = null)
{
m_sdkInterface.Logout(_logoutCallback);
}
/// <summary>
/// Obtain a list of login channels,
/// and the game displays the obtained login list for users to choose to log in.
/// </summary>
/// <returns>available login channels</returns>
public List<LoginType> AvailableLoginChannelList()
{
return m_sdkInterface.AvailableLoginChannelList();
}
/// <summary>
/// user actively deletes account.
///
/// Return the deleted userId. If the game needs to record it, you can operate it in the action.
/// </summary>
/// <param name="_deleteAccountCallback">code Delete userId</param>
public void DeleteAccount(Action<DeleteStatus, string> deleteAccountCallback = null)
{
m_sdkInterface.DeleteAccount(deleteAccountCallback);
}
/// <summary>
/// Social account binding for Guester.
/// 游客绑定社交账号
///
/// 游戏发起社交账号的绑定:
/// 根据 Action中的BindAccountStatus判断
/// 如果 BindAccountStatus == BindAccountStatus.BIND_CODE_SUCC
/// 需要判断userId和当前userId是否一致如果不一致需要切换账号或者重启游戏。如果一致无需操作。
/// 如果 BindAccountStatus == BindAccountStatus.BIND_CODE_SELECT
/// 这个是因为第三方账号已经被绑定过了string[] 中将会返回已经绑定的userId和当前userId游戏需要展示出来提供给玩家选择
/// 玩家选择完成后,需要将
///
/// 其情况,游戏做相应操作
///
///
///
/// </summary>
/// <param name="type">社交账号类型</param>
/// <param name="isForce">是否强制绑定</param>
/// <param name="userId">绑定的userId</param>
/// <param name="bindAccountCallback">回调的信息</param>
private void BindAccount(LoginType type, BindType isForce = BindType.NO_FORCE, string userId =
"", Action<BindAccountStatus, LoginType, string, string, string, string, string, string, string[]> bindAccountCallback
= null)
{
m_sdkInterface.BindAccount(type, isForce, userId, bindAccountCallback);
}
private LoginType bindLoginType = LoginType.LOGIN_BY_GUESTER;
/// <summary>
/// Social account binding for Guester.
///
/// 情况一 bindAccountStatusEnum == BindAccountStatus.BIND_CODE_SUCC 绑定成功
/// 绑定成功的时候,需要获取 userId和当前userId是否一致 如果不一致需要重新切换到新的userId账号上来。 (切换账号)
/// 情况二 BindAccountStatus == BindAccountStatus.BIND_CODE_SELECT 社交账号已经绑定了其他账号 (社交账号已经在其他设备上登陆)
/// 需要获取到userIdList 里面的userId列表获取到userId对应的角色/关卡信息,展示出来供玩家选择。 玩家选择完成之后调用 `ForceBindAccount` 接口将选中的userId传递进去进行强制绑定
/// ⚠️ 如果选择的是当前账号强制绑定,那么社交账号原有的账号将会被删除
/// 如果选择的是社交账号关联的账号,那么当前账号将会被删除
///
///
/// </summary>
/// <param name="type">社交账号类型</param>
/// <param name="bindAccountCallback">bindAccountStatusEnum, loginTypeEnum, _msg, _userId, _token, _email,_displayName, _photoUrl, userIdList</param>
public void BindAccount(LoginType type,
Action<BindAccountStatus, LoginType, string, string, string, string, string, string, string[]>
bindAccountCallback = null)
{
bindLoginType = type;
BindAccount(type, isForce: BindType.NO_FORCE, userId: "", bindAccountCallback);
}
public void ForceBindAccount(string userId, Action<BindAccountStatus, LoginType, string, string, string, string, string, string, string[]>
bindAccountCallback = null)
{
BindAccount(bindLoginType, BindType.FORCE, userId, bindAccountCallback);
}
#endregion
#region IAP Event
/// <summary>
/// Log IAP button show
/// </summary>
/// <param name="productName">Product name (customized on the game side) English name of the product cannot contain special characters ex: Gem100</param>
/// <param name="productId">Product ID: The ID of a specific product type</param>
public void LogIAPBtnShow(string productName, string productId)
{
m_sdkInterface.LogIAPBtnShow(productName, productId);
}
#endregion
#region
/// <summary>
/// 保存数据到账号上去(云存储)
/// </summary>
/// <param name="content">string内容存储</param>
/// <param name="callback">上传结果</param>
public void SaveCloudArchiving(string content,Action<int,string> callback)
{
m_sdkInterface.SaveCloudArchiving(content, callback);
}
/// <summary>
/// 获取云存储的当前账号数据
/// </summary>
/// <returns></returns>
public void DetailCloudArchiving(Action<int,string> callback)
{
m_sdkInterface.DetailCloudArchiving(callback);
}
#endregion
#region IAP
/// <summary>
/// Add payment result callback;
/// orderID, productName, productID, purchaseResult, gameExtra
/// </summary>
/// <param name="onPurchaseDoneAction">Purchase result callback<OrderID,Product ID,pay resultgame extra></param>
public void SetOnPurchaseDone(Action<string, string, string, bool, string> onPurchaseDoneAction)
{
OnPurchaseDone = onPurchaseDoneAction;
}
#if USE_IAP
/// <summary>
/// Commodity information acquisition callback;
/// </summary>
/// <param name="onGetProductsInfo">All product information</param>
/// ex:
/// Product[0].metadata.localizedTitle
/// Product[0].metadata.localizedPriceString
/// Product[0].metadata.localizedDescription
/// Product[0].metadata.isoCurrencyCode
public void OnGetProductsInfo(Action<Product[]> onGetProductsInfo)
{
#if USE_IAP
IAPTool.Instance.OnGetProductsInfo += onGetProductsInfo;
#endif
}
/// <summary>
/// Get product info by product id;
/// </summary>
/// <param name="productID">Product ID</param>
/// <returns>Product Info metadata</returns>
public Product GetProductInfoByID(string productID)
{
#if USE_IAP
return IAPTool.Instance.GetProductInfoByID(productID);
#else
return null;
#endif
}
#endif
/// <summary>
/// Get product price by product id;
/// </summary>
/// <param name="productID">Product ID</param>
/// <returns>Product price</returns>
public string GetPriceByID(string productID)
{
#if USE_IAP
return IAPTool.Instance.GetPriceByID(productID);
#else
return "";
#endif
}
#if USE_IAP
/// <summary>
///[In-game props,gold,gift packs, etc.] Purchase products according to the product ID;
/// </summary>
/// <param name="productId">Product ID </param>
/// <param name="enProductName">Product ID </param>
/// <param name="onPurchaseDoneAction">Purchase result callback<Product ID,pay resultorder idtoken></param>
/// <param name="gameExtraParam">Product ID </param>
public void BuyProductByID(string productId, string enProductName, string gameExtraParam = "")
{
#if USE_IAP
IAPTool.Instance.BuyProductByID(productId, enProductName, gameExtraParam);
#endif
}
#endif
#if USE_IAP
/// <summary>
/// Add products ID dynamically;
/// </summary>
/// <param name="products">Product IDs</param>
/// <param name="onProductsResult">bool Is it added successfully string Additional Information</param>
public void AddProducts(Dictionary<string, ProductType> products)
{
#if USE_IAP
IAPTool.Instance.AddProducts(products);
#endif
}
#endif
/// <summary>
/// Restore Purchases;
/// </summary>
public void RestorePurchases()
{
#if USE_IAP
IAPTool.Instance.RestorePurchases();
#endif
}
#endregion
#region serve for wz
/// <summary>
/// Set userid and third account
/// </summary>
/// <param name="_userID"> userID (Unique user id)</param>
/// <param name="_thirdAccount">third account </param>
/// <param name="_thirdAccountType"> third account type </param>
public void SetUserIDAndThirdAccount(string _userID, string _thirdAccount, ThirdAccountType _thirdAccountType)
{
Debug.Log("【TKGNativeInterfaceAndroid】 SetUserIDAndThirdAccount _userID : " + _userID + " , _thirdAccount : " + _thirdAccount + " , _thirdAccountType : " + _thirdAccountType);
TKGNativeInterface.Instance.SetUserIDAndThirdAccount(_userID, _thirdAccount, _thirdAccountType);
}
#endregion
}