// *********************************************************************** // 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