// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2021-05-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
#if SDK_ONESDK
using System;
using System.Collections;
using System.Collections.Generic;
using ByteDance.OneSDK;
using UnityEngine;
namespace G
{
///
///
///
partial class KPlatform
{
///
/// 平台实现
///
public class OneSDKPlatform : MonoBehaviour, IPlatformWapper
{
#region 初始化
private void Start()
{
this.Init();
}
///
/// 游戏SDK初始化,仅Android端
/// Init for Android client.
///
public void Init()
{
Log.D("OneSdk init start");
// 初始化sdk,必加
ZjSdkApi.Instance().Init(OnInitSuccess, OnInitFail);
// 监听返回键,调用退出,必加
ZjAndroidApi.Instance().listenerBackBtnPressed(OnBackBtnPressed);
}
private void OnBackBtnPressed()
{
// 监听返回键,调用退出
Log.D("OneSdk OnBackBtnPressed");
// 如果游戏有多级页面,游戏想返回到上一级页面,可以在这里返回到上一级页面(不然会直接调用exitSample接口,拉起退出ui)
// 如果游戏在这里,已经是顶层页面了,请务必调用exitSample接口
// 或者:游戏可以简单处理,直接调用exitSample
// 游戏有多级页面,并且成功处理掉返回键
//if (GamePageLevel.HandleBackSuccess())
//{
// Log.D("返回键被游戏的多级页面消耗掉了");
//}
//else
//{
// // 游戏不需要处理返回键了,调用退出
// Log.D("游戏在最顶层页面了,调用退出");
// ExitFunctionScript.Instance.exitSample();
//}
exitSample();
}
private void OnInitSuccess()
{
Log.D("OneSdk init success");
// 对于小米渠道
// 该接⼝必须在⽤⼾选择同意隐私协议(游戏⾃⼰的隐私协议)之后调⽤,否则⽆法正常登录;若⽤⼾拒绝隐私协议,不可调⽤该接⼝,且⽆法登录
// 注:SDK本⾝不会弹出任何隐私协议,隐私协议游戏内⾃⾏设计实现,并且在游戏隐私协议中附加⼩⽶SDK隐私协议:本游戏接⼊了⼩⽶游戏服务 SDK,提供登录和⽀付以及实名制服务,所收集信息请阅读《⼩⽶游戏服务隐私政策》
ZjSdkApi.Instance().onUserAgreed();
//UserProxy.DeviceID = lgInitSuccessInfo.DeviceID;
KPlatform.Instance.OnInitSuccess();
if ("xiaomi".Equals(GetChannelId()))
{
var privacyRoot = transform.Find("Privacy");
if (privacyRoot)
privacyRoot.gameObject.SetActive(true);
}
}
private void OnInitFail(string error)
{
Log.D("OneSdk init fail:" + error);
}
#endregion
#region 登录
public void NormalLogin()
{
ZjSdkApi.Instance().Login(OnLoginSuccess, OnLoginFail, OnLoginCancel);
}
public void SwitchAccount()
{
}
public void VisitorBindAccount()
{
}
public bool IsVisitor()
{
return false;
}
public void ClearToken()
{
}
// 登录成功
// loginResult 包含access_token,openId,serect
private void OnLoginSuccess(LoginResult loginResult)
{
Log.D("登录成功");
string accessToken = loginResult.access_token;
string secret = loginResult.secret;
string openId = loginResult.openId;
Log.D("登录openId:" + openId);
Log.D("登录secret:" + secret);
Log.D("登录accessToken:" + accessToken);
//ToastManager.Instance.ShowToast("登录openId:" + openId + "\n" + "登录secret:" + secret + "\n" +
//"登录accessToken:" + accessToken);
KPlatform.Instance.OnLoginSuccess(openId, accessToken, 100, 1);
// demo示例使用
//LoginState.SetLoginSuccess();
HuaweiGetUserGameDuration();
}
// 登录失败
private void OnLoginFail(int code, string msg)
{
Log.D("登录失败:code=" + code + ",msg:" + msg);
//ToastManager.Instance.ShowToast("登录失败:code=" + code + ",msg:" + msg);
KPlatform.Instance.OnLoginFail(code, msg, 1);
}
// 登录取消
private void OnLoginCancel(string error)
{
Log.D("登录取消:" + error);
//ToastManager.Instance.ShowToast("登录取消:" + error);
KPlatform.Instance.OnLoginCancel(error);
}
#endregion
#region 广告
public class AdSlotConstant
{
public static string SPLASH_CODE_H = "splash_h";
public static string SPLASH_CODE_V = "splash_v";
public static string REWARD_CODE_H = "reward_h";
public static string REWARD_CODE_V = "reward_v";
public static string INTERSTITIAL_CODE_H = "interstitial_h";
public static string INTERSTITIAL_CODE_V = "interstitial_v";
public static string BANNER_CODE = "banner";
}
public class AdLoadHelper
{
private static bool _hasSdkInitSuccess = false;
private static Action _onSdkInitSuccess;
private static bool IsOppo()
{
return "oppo".Equals(ZjSdkApi.Instance().GetChannelId());
}
public static void EnsureAdPermissionRequestSuccess(Action onSdkInitSuccess)
{
if (_hasSdkInitSuccess)
{
onSdkInitSuccess.Invoke();
return;
}
EnsureInitSuccessInner(onSdkInitSuccess);
}
private static void EnsureInitSuccessInner(Action onSdkInitSuccess)
{
ReleaseStaticRef();
_onSdkInitSuccess = onSdkInitSuccess;
// 非oppo渠道不用强制要求 READ_PHONE_STATE 和 WRITE_EXTERNAL_STORAGE权限
// || ZjAdApi.Instance().isInitSuccess()
if (!IsOppo())
{
//Log.D("广告sdk必要权限申请成功了:return");
_hasSdkInitSuccess = true;
onSdkInitSuccess.Invoke();
return;
}
// oppo渠道要强制READ_PHONE_STATE和WRITE_EXTERNAL_STORAGE权限,不然广告sdk初始化不成功,这里需要检查广告sdk是否初始化成功了
// 初始化成功=================>直接加载广告
// 没有初始化成功,有权限========>初始化,加载广告
// 没有初始化成功,没权限========>申请权限,初始化,加载广告
// cp假如有必须权限,可以添加上,避免重复申请
// 用法如下:
// UnityPermissionHelper unityPermissionHelper = new UnityPermissionHelper();
// unityPermissionHelper
// .WithPermission("cp自己需要的必要权限,第二个参数传true",true)
// .WithPermission("cp自己需要的可选权限,第二个参数传false",false)
// .StartRequest(
// "必要权限申请成功",
// "必要权限申请失败,可以再次申请",
// "必要权限申请失败,用户点了不再提示,只能跳设置打开");
// 这里直接申请权限,假如已经有权限了,会立刻回调权限申请成功
UnityPermissionHelper unityPermissionHelper = new UnityPermissionHelper();
unityPermissionHelper.StartRequest(OnNecessaryPermissionAgree,
OnNecessaryPermissionDeny,
OnNecessaryPermissionOnlySetting);
}
// Action> onNecessaryPermissionOnlySetting,
// Action onNecessaryPermissionAgree, Action> onNecessaryPermissionDeny
// ######################权限处理开始########################
// 必要权限申请成功
private static void OnNecessaryPermissionAgree()
{
_hasSdkInitSuccess = true;
// 再次初始化sdk
ReInitAdSdk();
}
// 必要权限申请拒绝,用户没有点不再提示,可以再次申请
private static void OnNecessaryPermissionDeny(List permissions)
{
if (_onSdkInitSuccess == null)
{
Log.D("非法状态异常: _onSdkInitSuccess=null");
return;
}
// 这里只是demo简单展示,实际情况,cp需要做自己的逻辑处理(是直接申请,还是提示用户后再申请)
EnsureInitSuccessInner(_onSdkInitSuccess);
}
// 必要权限,用户点了,不再提示,只能跳设置打开
private static void OnNecessaryPermissionOnlySetting(List permissions)
{
// 这里只是demo简单展示,实际情况,cp需要解释说明,引导用户在设置开启权限
Log.D("请在设置打开READ_PHONE_STATE和WRITE_EXTERNAL_STORAGE权限,否则可能会导致广告功能异常");
//ToastManager.Instance.ShowToast("请在设置打开READ_PHONE_STATE和WRITE_EXTERNAL_STORAGE权限,否则可能会导致广告功能异常");
UnityPermissionHelper.JumpSetting();
ReleaseStaticRef();
}
// ######################权限处理结束########################
// ######################广告再次初始化开始########################
//
private static void ReInitAdSdk()
{
ZjAdApi.Instance().init(OnAdSdkInitSuccess, OnAdSdkInitFail);
}
private static void OnAdSdkInitSuccess()
{
Log.D("--->获取到必要权限,初始化广告sdk成功");
_onSdkInitSuccess?.Invoke();
ReleaseStaticRef();
}
private static void OnAdSdkInitFail(int code, string msg)
{
Log.D("--->获取到必要权限,初始化广告sdk失败,错误码code=" + code + ",msg=" + msg);
ReleaseStaticRef();
}
// 释放资源,避免内存泄露
private static void ReleaseStaticRef()
{
_onSdkInitSuccess = null;
}
// ######################广告再次初始化结束########################
}
private ZjRewardVideoAd _rewardAd;
// 是否正在加载广告
private bool isLoadingAd;
public void LoadRewardVideoAd_V()
{
// 确保sdk的广告权限申请成功
AdLoadHelper.EnsureAdPermissionRequestSuccess(() =>
{
Log.D("权限申请成功LOAD_REWARD_AD_VER");
LoadRewardVideoAd(ZjBaseAdParams.ORIENTATION_VERTICAL, AdSlotConstant.REWARD_CODE_V);
});
}
public int ShowRewardAd(string scene)
{
if (this.isLoadingAd)
{
//ToastManager.Instance.ShowToast("广告正在加载中...");
return 1;
}
if (this._rewardAd == null)
{
//Log.E("请先加载广告");
//ToastManager.Instance.ShowToast("请先加载广告");
return 2;
}
// 注册监听
RegisterRewardVideoAdInteractionListener();
this._rewardAd.show();
return 0;
}
// 加载激励视频广告
private void LoadRewardVideoAd(int orientation, string codeId)
{
if (this.isLoadingAd)
{
//ToastManager.Instance.ShowToast("广告正在加载中...");
return;
}
if (this._rewardAd != null)
{
PrintD("广告已经加载");
//ToastManager.Instance.ShowToast("广告已经加载");
return;
}
// 激励视频加载错误监听
ZjAdApi.RewardVideoAd_OnError = (code, message) =>
{
this.isLoadingAd = false;
KPlatform.Instance.OnRewardVideoAdLoadError(code, message);
var lastMsg = "激励视频加载失败-- code : " + code + "--message : " + message;
this.PrintD(lastMsg);
//ToastManager.Instance.ShowToast(lastMsg);
};
// 激励视频加载成功
ZjAdApi.RewardVideoAd_OnRewardVideoAdLoad = (rewardVideoAd) =>
{
this.isLoadingAd = false;
this._rewardAd = rewardVideoAd;
KPlatform.Instance.OnRewardVideoAdLoad();
//this.PrintD("激励视频加载成功");
//ToastManager.Instance.ShowToast("激励视频加载成功");
};
var rewardVideoAdDto = new ZjRewardVideoAdParams();
rewardVideoAdDto.codeId = codeId;
// 视频方向
rewardVideoAdDto.videoPlayOrientation = orientation;
rewardVideoAdDto.userId = "user123"; // necessary param .用户id,必传参数
rewardVideoAdDto.rewardName = "金币"; // 奖励的名称
rewardVideoAdDto.rewardAmount = 5; // 奖励的数量
rewardVideoAdDto.mediaExtra = "media_extra"; // 附加参数,可选
ZjAdApi.Instance().LoadRewardVideoAd(rewardVideoAdDto);
this.isLoadingAd = true;
}
// 注册激励视频广告交互监听
private void RegisterRewardVideoAdInteractionListener()
{
ZjRewardVideoAd.OnReward = this.OnRewardVerify;
ZjRewardVideoAd.OnAdShow = this.OnAdShow;
ZjRewardVideoAd.OnAdClick = this.OnRewardClick;
ZjRewardVideoAd.OnVideoPlayStart = this.OnVideoPlayStart;
ZjRewardVideoAd.OnVideoPlayComplete = this.OnVideoPlayComplete;
ZjRewardVideoAd.OnVideoPlayError = this.OnVideoPlayError;
ZjRewardVideoAd.OnVideoPlaySkip = this.OnVideoPlaySkip;
ZjRewardVideoAd.OnVideoPlayClose = this.OnVideoPlayClose;
ZjRewardVideoAd.OnLandingPageOpen = this.OnLandingPageOpen;
ZjRewardVideoAd.OnLandingPageClose = this.OnLandingPageClose;
}
private void OnLandingPageClose()
{
ReleaseAdObject();
this.PrintD("OnLandingPageClose");
}
private void OnLandingPageOpen()
{
ReleaseAdObject();
this.PrintD("OnLandingPageOpen");
}
private void OnVideoPlayClose(long var)
{
this.ReleaseAdObject();
KPlatform.Instance.OnRewardedAdClosed();
this.PrintD("onRewardedAdClosed");
}
private void OnVideoPlaySkip()
{
this.ReleaseAdObject();
KPlatform.Instance.OnSkippedVideo();
this.PrintD("onSkippedVideo");
}
private void OnVideoPlayError(int code, string msg)
{
this.ReleaseAdObject();
KPlatform.Instance.OnVideoError();
this.PrintD("onVideoError");
}
private void OnVideoPlayComplete()
{
this.ReleaseAdObject();
KPlatform.Instance.OnVideoComplete();
KPlatform.Instance.OnRewardVerify(true, 1, "");
KPlatform.Instance.OnRewardedAdClosed();
this.PrintD("onVideoComplete");
}
private void OnVideoPlayStart()
{
this.PrintD("OnVideoPlayStart");
}
private void OnAdShow()
{
KPlatform.Instance.OnRewardedAdShow();
this.PrintD("onRewardedAdShow");
}
private void OnRewardClick(long var)
{
this.ReleaseAdObject();
KPlatform.Instance.OnRewardClick();
this.PrintD("onRewardClick");
}
private void OnRewardVerify()
{
this.ReleaseAdObject();
KPlatform.Instance.OnRewardVerify(true, 1, "");
this.PrintD("onRewardVerify");
}
// 释放广告对象
public void ReleaseAdObject()
{
this._rewardAd?.destroy();
this._rewardAd = null;
}
private void PrintD(string msg)
{
Log.D("LG_MediationAdTAG" + msg);
}
private void PrintE(string msg)
{
//Log.E(AdFunctionScript.LG_MediationAdTAG + msg);
}
#endregion
#region 支付
string currentCpOrderId;
// 支付强烈要求cp根据服务端回调来发货,客户端回调存在不准和一定的安全性风险
// 假如一定只是依靠客户端发货的话:
// 1.游戏客户端自行记录订单和发货状态;
// 2.针对状态未知的订单,在每次启动并登录成功后,调SDK服务端的[查询订单状态接口]查询订单是否成功支付;
// 3.若订单已成功支付了,并且没有发货,就执行发货,更新CP自己记录的订单状态,防止重复发货,并调用「4.7.3 上报订单完成」。
public void paySample()
{
string cpOrderId = DateTime.Now.Millisecond + "";
currentCpOrderId = cpOrderId;
PayParam payParam = new PayParam()
.setCpOrderId(cpOrderId)
.setCount(1) //购买数量,默认为1
.setPrice(1) //商品单价,单位分 // 小米支付最低1元起
.setServerName("世外桃源") //服务器名称
.setServerID("1") //服务器id
.setRoleName("小智") //角色名称
.setRoleID("1") //角色id
.setProductDesc("充值1毛,赠送10钻石") //商品描述
.setProductName("60晶石") //商品名称
.setProductId("1") //商品id
.setCpNotifyUrl("https://baidu.com")
.setExtend("cpOrderId"); //透传字段,回原样返回通知游戏服务器
// Action onPaySuccess, Action onPayFail,
// Action onPayCancel
ZjSdkApi.Instance().Pay(payParam, onPaySuccess, onPayFail, onPayCancel);
}
//#######################支付的回调开始#######################
// 支付成功
private void onPaySuccess()
{
Log.D("支付成功");
//ToastManager.Instance.ShowToast("支付成功");
List success = new List();
success.Add(currentCpOrderId);
// cp发货后,正常支付成功、或者补单成功的都需要上报订单完成。
ZjSdkApi.Instance().ReportOrderComplete(success);
}
// 支付失败
private void onPayFail(int code, string msg)
{
Log.D("支付失败:code=" + code + ",msg:" + msg);
//ToastManager.Instance.ShowToast("支付失败:code=" + code + ",msg:" + msg);
}
// 支付取消
private void onPayCancel(string error)
{
Log.D("支付取消:" + error);
//ToastManager.Instance.ShowToast("支付取消:" + error);
}
//#######################支付的回调结束#######################
#endregion
#region 兑换码
//输入的兑换码
public void Redeem(string redeemCode)
{
}
#endregion
#region Event && ABTest
///
/// 获取AB测试的配置
/// Gets the ab config.
///
/// The ab config.
/// Key.
/// Default value.
/// The 1st type parameter 类型,需是JSON兼容的数据类型.
public string GetAbConfig(string key, string defaultValue)
{
return AppLogCommonApi.Instance().GetAbConfig(key, defaultValue);
}
public void SetEventCommonHeader(string key, string value)
{
AppLogCommonApi.Instance().SetHeader(key, value);
}
///
/// only for Android.
/// 埋点上报
/// report event.
///
public void ReportEvent(string label, string paramJson)
{
// 第二个参数必须是JSONObject格式,不支持JSONArray
AppLogCommonApi.Instance().OnEventV3(label, paramJson);
}
#endregion
#region Mail
///
/// 获取邮件.
///
public void FetchMail()
{
}
///
/// 确认邮件.
///
/// 需要确认的邮件id.
public void AckMail(int[] mailIds)
{
}
#endregion
#region Other
///
/// 应用内引导评分
///
public void InAppRating()
{
}
///
/// 验证敏感词.
///
/// 输入的敏感词信息.
/// 返回的敏感词结果.
public void VerifySensitiveWords(string sensitiveWords, System.Action verifyResult)
{
if (string.IsNullOrEmpty(sensitiveWords))
{
return;
//ToastManager.Instance.ShowToast("敏感词不能为空");
}
var result = ZjSdkApi.Instance().VerifySensitiveWords(sensitiveWords);
verifyResult?.Invoke(result == 2 ? 1 : 0);
//string msg;
//switch (result)
//{
// case 1:
// msg = "校验通过";
// break;
// case 2:
// msg = "校验不通过";
// break;
// default:
// msg = "结果未知";
// break;
//}
//ToastManager.Instance.ShowToast("敏感词检测结果:" + msg);
}
///
/// 播放品牌特效.
///
/// 游戏是否竖屏,竖屏游戏填true,横屏游戏填false.
/// 品牌特效完成回调.
public void PlaySplashBrandEffect(bool portrait, System.Action splashBrandEffectAction)
{
}
///
/// openwebview
///
///
public void OpenWebView(string url)
{
Application.OpenURL(url);
}
#endregion
#region 退出
// 退出场景
// 1.游戏自己有提供退出按钮,需要掉用
// 2.见初始化阶段的监听返回键,ZjAndroidApi.Instance().listenerBackBtnPressed(OnBackBtnPressed);
public void exitSample()
{
// 两种实现方式
// 1.直接用sdk的简单退出逻辑
// LGSdkApi.Instance().SimpleExit();
// 2.游戏自行处理渠道退出和游戏退出的逻辑
ZjSdkApi.Instance().Exit(onChannelExit, onGameExit);
}
//#######################退出的回调开始#######################
// 渠道有退出页面,游戏直接退出即可
private void onChannelExit()
{
Log.D("onChannelExit:渠道退出");
//ToastManager.Instance.ShowToast("渠道退出,游戏直接退出即可");
// 游戏退出逻辑开始
// 游戏有数据保存的话,保存数据
// 游戏退出逻辑结束
// 销毁app
ZjAndroidApi.Instance().killApp();
}
// 渠道没有退出页面,游戏自行处理退出逻辑
private void onGameExit()
{
Log.D("onGameExit:游戏自行处理退出逻辑");
//ToastManager.Instance.ShowToast("游戏自行处理退出逻辑");
// 游戏自己显示弹框,提醒用户是否要退出游戏
// 游戏自己显示弹框,提醒用户是否要退出游戏
// 游戏自己显示弹框,提醒用户是否要退出游戏
// 假如游戏有上线华为渠道,务必在这里显示弹框,提醒用户是否要退出游戏
// demo这里简单演示,显示了个简单的退出弹框
ZjAndroidApi.Instance().SimpleExitDialog();
// 游戏的逻辑应该是:
// 显示提示弹框:
// 用户取消===========》不做处理
// 用户确认===========》游戏有数据保存的话,保存数据======》退出app
// ZjAndroidApi.Instance().killApp();
}
#endregion
#region 渠道相关
public string GetChannelId()
{
return ZjSdkApi.Instance().GetChannelId();
}
public bool IsOppoLeisureChannel()
{
return ZjSdkApi.Instance().IsOppoLeisureChannel();
}
// oppo超休闲跳转,必接
public void OppoLeisureJump()
{
if (!ZjSdkApi.Instance().IsOppoLeisureChannel())
{
string content =
"cp需要判断当前是否oppo超休闲渠道\n假如是的话,在游戏界面添加一个更多精彩按钮,点击更多精彩按钮,调用jumpOppoLeisureSubject\n具体请联系商务";
Log.D("不是oppo超休闲渠道,返回");
Log.D(content);
//ToastManager.Instance.ShowToast("不是oppo超休闲渠道,返回");
return;
}
ZjSdkApi.Instance().JumpOppoLeisureSubject();
}
//#######################华为查询用户时长开始#######################
// 只有华为需要cp自己处理防沉迷策略,华为防沉迷策略见:
// 华为文档:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/game-anti-indulgence-0000001050123479-V5
// 查询华为未成年游戏时长
// 没有上华为渠道的,请忽略这段
public void HuaweiGetUserGameDuration()
{
string channelId = ZjSdkApi.Instance().GetChannelId();
if (!"huawei".Equals(channelId))
{
// 不是华为渠道,直接返回
return;
}
// 华为渠道,查询用户时长
// 回调处理见华为文档:
// https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/game-anti-indulgence-0000001050123479-V5
ZjSdkApi.Instance()
.HuaweiGetPlayerExtraInfo(HuaweiGetPlayerExtraInfoOnSuccess, HuaweiGetPlayerExtraInfoOnFail);
}
private void HuaweiGetPlayerExtraInfoOnSuccess(HuaweiPlayerExtraInfo extra)
{
if (extra != null)
{
string content = "IsRealName: " + extra.getIsRealName() + ", IsAdult: " + extra.getIsAdult()
+ ", PlayerId: " + extra.getPlayerId() + ", PlayerDuration: " +
extra.getPlayerDuration();
Log.D(content);
//ToastManager.Instance.ShowToast(content);
if (!extra.getIsAdult())
{
//玩家未成年,进行后续处理
Log.D("The player is underage");
StartCoroutine(Calendar.CalendarUtil.CheckIsHoliday(DateTime.Now, (result) =>
{
if (result && DateTime.Now.Hour == 20)
{
}
else
{
UI.MessageBox.ShowMessageWithoutButton("防沉迷提示", "未成年玩家,按照国家要求,在周五、周六、周日和法定节假日每日20时至21时允许玩家游戏,其余时间段不得游戏。");
}
}));
}
}
else
{
Log.D("Player extra info is empty.");
}
}
private void HuaweiGetPlayerExtraInfoOnFail(int rtnCode, string error)
{
Log.D("onFail: " + rtnCode + "," + error);
//ToastManager.Instance.ShowToast("onFail: " + rtnCode + "," + error);
//返回7022时,表示该玩家已经成年或者未实名认证,此时可以放通处理。
if (rtnCode == 7022)
{
Log.D("The player is an adult or has not been authenticated by real name");
return;
}
//返回7002且当前网络正常,或者直接返回7006,均表示该帐号未在中国大陆注册,请直接放通。
if ((rtnCode == 7002 && ZjAndroidApi.Instance().IsNetworkAvailable()) || rtnCode == 7006)
{
Log.D("Allow the player to enter the game without checking the remaining time");
return;
}
// ignore 华为描述,假如不是以上两种情况,直接忽略,cp继续在自己希望查询用户时长的节点时候执行逻辑即可
}
//#######################华为查询用户时长结束#######################
#endregion
#region 实名
//#######################拉起实名认证开始#######################
private void DoRealName()
{
ZjSdkApi.Instance().DoRealNameVerified(OnVerifiedSuccess, OnVerifiedFail);
}
// state -1 未实名认证,0 实名认证未成年,1实名认证成年
private void OnVerifiedSuccess(int state)
{
string realNameState = "";
if (state < 0)
{
realNameState = "未实名认证";
}
else if (state == 0)
{
realNameState = "实名未成年";
}
else if (state == 1)
{
realNameState = "实名成年";
}
Log.D("实名认证成功,状态:" + realNameState);
//ToastManager.Instance.ShowToast("实名状态:" + realNameState);
}
private void OnVerifiedFail(int code, string message, bool stopGame)
{
string content = "实名认证失败:" + message + "code:" + code + ",stopGame:" + stopGame;
Log.D(content);
//ToastManager.Instance.ShowToast(content);
}
//#######################拉起实名认证结束#######################
//#######################检查用户实名认证状态开始#######################
private void CheckRealName()
{
ZjSdkApi.Instance().CheckRealNameVerified(OnState);
}
private void OnState(int state)
{
string realNameState = "";
if (state < 0)
{
realNameState = "未实名认证";
}
else if (state == 0)
{
realNameState = "实名未成年";
}
else if (state == 1)
{
realNameState = "实名成年";
}
string content = "检查实名状态:" + realNameState;
Log.D(content);
//ToastManager.Instance.ShowToast(content);
}
//#######################检查用户实名认证状态结束#######################
#endregion
}
}
}
#endif