shaoxiadiablo/Assets/AGame/Scripts/Platform/KPlatform.OneSDK.cs
2025-05-18 01:04:31 +08:00

926 lines
27 KiB
C#
Raw 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.

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2021-05-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "KPlatform.OneSDKPlatform" company="Kunpo"></copyright>
// <summary></summary>
// ***********************************************************************
#if SDK_ONESDK
using System;
using System.Collections;
using System.Collections.Generic;
using ByteDance.OneSDK;
using UnityEngine;
namespace G
{
/// <summary>
///
/// </summary>
partial class KPlatform
{
/// <summary>
/// 平台实现
/// </summary>
public class OneSDKPlatform : MonoBehaviour, IPlatformWapper
{
#region
private void Start()
{
this.Init();
}
/// <summary>
/// 游戏SDK初始化仅Android端
/// Init for Android client.
/// </summary>
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_tokenopenId,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<List<string>> onNecessaryPermissionOnlySetting,
// Action onNecessaryPermissionAgree, Action<List<string>> onNecessaryPermissionDeny
// ######################权限处理开始########################
// 必要权限申请成功
private static void OnNecessaryPermissionAgree()
{
_hasSdkInitSuccess = true;
// 再次初始化sdk
ReInitAdSdk();
}
// 必要权限申请拒绝,用户没有点不再提示,可以再次申请
private static void OnNecessaryPermissionDeny(List<string> permissions)
{
if (_onSdkInitSuccess == null)
{
Log.D("非法状态异常: _onSdkInitSuccess=null");
return;
}
// 这里只是demo简单展示实际情况cp需要做自己的逻辑处理是直接申请还是提示用户后再申请
EnsureInitSuccessInner(_onSdkInitSuccess);
}
// 必要权限,用户点了,不再提示,只能跳设置打开
private static void OnNecessaryPermissionOnlySetting(List<string> 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<int, string> onPayFail,
// Action<string> onPayCancel
ZjSdkApi.Instance().Pay(payParam, onPaySuccess, onPayFail, onPayCancel);
}
//#######################支付的回调开始#######################
// 支付成功
private void onPaySuccess()
{
Log.D("支付成功");
//ToastManager.Instance.ShowToast("支付成功");
List<string> success = new List<string>();
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
/// <summary>
/// 获取AB测试的配置
/// Gets the ab config.
/// </summary>
/// <returns>The ab config.</returns>
/// <param name="key">Key.</param>
/// <param name="defaultValue">Default value.</param>
/// <typeparam name="T">The 1st type parameter 类型需是JSON兼容的数据类型.</typeparam>
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);
}
/// <summary>
/// only for Android.
/// 埋点上报
/// report event.
/// </summary>
public void ReportEvent(string label, string paramJson)
{
// 第二个参数必须是JSONObject格式不支持JSONArray
AppLogCommonApi.Instance().OnEventV3(label, paramJson);
}
#endregion
#region Mail
/// <summary>
/// 获取邮件.
/// </summary>
public void FetchMail()
{
}
/// <summary>
/// 确认邮件.
/// </summary>
/// <param name="mailIds">需要确认的邮件id.</param>
public void AckMail(int[] mailIds)
{
}
#endregion
#region Other
/// <summary>
/// 应用内引导评分
/// </summary>
public void InAppRating()
{
}
/// <summary>
/// 验证敏感词.
/// </summary>
/// <param name="sensitiveWords">输入的敏感词信息.</param>
/// <param name="verifyResult">返回的敏感词结果.</param>
public void VerifySensitiveWords(string sensitiveWords, System.Action<int> 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);
}
/// <summary>
/// 播放品牌特效.
/// </summary>
/// <param name="portrait">游戏是否竖屏竖屏游戏填true横屏游戏填false.</param>
/// <param name="splashBrandEffectListener">品牌特效完成回调.</param>
public void PlaySplashBrandEffect(bool portrait, System.Action splashBrandEffectAction)
{
}
/// <summary>
/// openwebview
/// </summary>
/// <param name="url"></param>
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