主题
Skip to content 是否为欧盟用户,控制是否显示 GDPR 按钮(
基础常规接口
WARNING
💡ZMYSDKManager.I.Sdk.xxxx 接口名称
GameHelper.AppUtil
GameHelper.App
用户协议
C#
public virtual void GotoTermsServiceStatic(){}TypeScript
// 跳转到隐私界面
public gotoPrivacyPolicyStatic() {}隐私政策
C#
public virtual void GotoPrivacyPolicyStatic(){}TypeScript
// 跳转到用户协议
public gotoTermsServiceStatic() {}是否为欧盟用户,控制是否显示 GDPR 按钮(海外渠道,必接)
WARNING
判断用户是否为欧盟地区的用户
如果是欧盟地区,需要在设置页面新增 GDPR 按钮,并在点击后弹出 GDPR 弹窗
SDK 内部还实现了第一次启动时弹出 GDPR 弹窗,此逻辑为 SDK 内部逻辑,无需接入
是否为欧盟用户,控制是否显示 GDPR 按钮
- false 非欧盟地区,不弹 GDPR,设置界面没有 GDPR 按钮
- true 欧盟地区,弹 GDPR,设置界面出现 GDPR 按钮,点击弹出 GDPR 界面
C#
public virtual bool IsRequestLocationInEeaOrUnknownStatic(){return default;}展示 GDPR 用户协议
C#
public virtual void ShowGDPRDialogStatic(){}调用此接口会触发 GDPR 弹框回调ZMYSDKManager.I.ShowGDPRResult
TypeScript
//监听 是否为欧盟地区 如果true 可以展示欧盟弹窗
//false 非欧盟地区,不弹 GDPR,设置界面没有 GDPR 按钮
//true 欧盟地区,弹 GDPR,设置界面出现 GDPR 按钮,点击弹出 GDPR 界面
public inEeaForGDPRListen(callback : (inEea : boolean) => void) {}
// 移除 监听
public inEeaForGDPRRemove() {}
//state: 0-欧盟弹窗关闭 1-欧盟弹窗展示 (注,如果回调了1,那么后续会有0)
public showGDPRDialogStatic(callback :(status : number) => void) {}用户评价
常规评价入口,默认优先调用此接口。调用后会先展示 SDK 自制的评价弹窗:
- 用户选择 5 星时,继续拉起应用内评价,即应用市场评分接口。
- 用户选择 5 星以下时,跳转到反馈界面,便于收集问题和意见。
C#
public virtual void ShowEvaluate(){}TypeScript
//展示用户评价弹窗:5星进入应用内评价,5星以下进入反馈
public goEvaluate() {}应用内评价(应用市场评价接口)
直接调用系统或应用市场提供的应用内评价接口,并弹出应用市场的评分面板。该接口不会展示 SDK 自制的评价弹窗;常规评价入口优先使用“用户评价”。
C#
public virtual void ShowInAppReview(){}TypeScript
//直接调用应用市场评价接口
public showInAppReview() {}反馈界面
C#
public virtual void ShowFeedback(){}TypeScript
//跳转到反馈页面
public showFeedback() {}分享
C#
// Sharetype:0-普通分享 1-好友房分享 2-分享图片 (末尾count表示 args数组中元素的个数)
public virtual void ShareApp(int Sharetype,string title,string content,string imgFile,string[] Args,int count){}TypeScript
// 分享 文字 如果想分享appstore地址 可以将地址填入 content
public shareApp(opt: {
title: string,
content: string,
imagePath?: string, // 图片本地地址 不能是网络地址 而且绝对路径(选填)
success? : (params) => void}) {}获取在线参数
C#
public virtual string GetOnlineConfigParams(string param){return default;}TypeScript
//获取在线参数 param传入key
public getOnlineConfigParams(param : string) : string {}此接口同步读取当前在线参数。可在 SDK 初始化后读取;初始化完成不代表在线参数已拉取成功,取值为空时应按业务使用默认值。
TypeScript
GameHelper.init(() => {
const value = GameHelper.App.getOnlineConfigParams("参数Key");
console.log("在线参数:", value);
});在线参数加载结果回调
订阅 ZMYSDKManager.I.OnlineParam_LoadState,接收本次启动的在线参数拉取结果。
C#
public event System.Action<SdkResult> OnlineParam_LoadState;回调参数为 SdkResult,通过其 int code 字段判断结果:
| code | 含义 | 建议处理 |
|---|---|---|
0 | 拉取失败 | 使用游戏默认配置或已生效的配置 |
1 | 拉取成功 | 按 key 读取所需在线参数并更新游戏配置 |
2 | 拉取成功,且与上次相同 | 仍可读取参数;已应用相同配置时可跳过重复处理 |
在 SDK 管理器就绪后尽早订阅,避免错过通知。订阅不会主动发起拉取,也不会补发已经发生的结果。一次启动可能收到多次通知,业务处理应避免重复发奖或重复创建对象;不再监听时使用同一个回调函数取消订阅。
C#
// 在 SDK 管理器就绪后调用一次,避免重复订阅
void RegisterOnlineParamCallback()
{
ZMYSDKManager.I.OnlineParam_LoadState += OnOnlineParamLoaded;
}
void OnOnlineParamLoaded(ZMYSDK.SdkResult result)
{
if (result.code != 1 && result.code != 2)
{
// 拉取失败,保留当前配置或使用游戏默认配置
return;
}
string value = ZMYSDKManager.I.Sdk.GetOnlineConfigParams("参数Key");
if (string.IsNullOrEmpty(value))
{
// 未取到该 key,按业务使用默认值
return;
}
// 在此解析 value 并更新游戏配置
}
// 不再需要监听时调用
void UnregisterOnlineParamCallback()
{
ZMYSDKManager.I.OnlineParam_LoadState -= OnOnlineParamLoaded;
}回调只提供加载状态,不包含在线参数内容;成功后仍需调用 GetOnlineConfigParams 按 key 读取。拉取成功也不代表一定包含游戏所需的 key。
调用 GameHelper.AppUtil.onlineParamLoadStateCallBack(callback),设置本次启动的在线参数加载结果回调。
TypeScript
onlineParamLoadStateCallBack(callback: (code: number) => void): void;callback 为必传函数,直接接收数字 code;接口本身无返回值(void)。
| code | 含义 | 建议处理 |
|---|---|---|
0 | 拉取失败 | 使用游戏默认配置或已生效的配置 |
1 | 拉取成功 | 按 key 读取所需在线参数并更新游戏配置 |
2 | 拉取成功,且与上次相同 | 仍可读取参数;已应用相同配置时可跳过重复处理 |
在 SDK 初始化后尽早注册,且所接入的 SDK 版本需支持此回调。注册只接收加载结果,不会主动发起在线参数拉取。
- 已有缓存的加载状态时,会立即执行回调;业务所需的变量应在注册前准备好。
- 没有缓存状态时,等待下一次加载结果,收到后自动移除监听。等待期间重复注册会替换之前的回调。
- 此接口是一次性回调,不是持续订阅;再次调用可能返回已有缓存状态,不代表重新拉取或获取最新一次结果。
TypeScript
// 放在 SDK 初始化完成后的接入逻辑中
GameHelper.AppUtil.onlineParamLoadStateCallBack((code: number) => {
if (code !== 1 && code !== 2) {
// 拉取失败,保留当前配置或使用游戏默认配置
return;
}
const value = GameHelper.App.getOnlineConfigParams("参数Key");
if (value === "" || value === undefined || value === null) {
// 未取到该 key,按业务使用默认值
return;
}
// 在此解析 value 并更新游戏配置
});回调只返回加载状态,不包含配置内容。成功后通过 GameHelper.App.getOnlineConfigParams 按 key 读取,并处理所需 key 缺失的情况。
GameHelper.init 的回调仅表示 SDK 初始化完成,不能用作在线参数拉取成功通知。
获取设备 ID:deviceid
C#
public virtual string GetDeviceId(){return default;}TypeScript
GameHelper.App.getDeviceId();获取系统语言数值类型
语言代码编号 - 语言描述 0 - 英文 1 - 中文简体 2 - 中文繁体 3 - 法语 4 - 意大利语 5 - 德语 6 - 西班牙语 7 - 西班牙语(墨西哥) 8 - 荷兰语 9 - 俄语 10 - 韩语 11 - 日语 12 - 匈牙利语 13 - 葡萄牙语 14 - 阿拉伯语 15 - 挪威语 16 - 波兰语 17 - 土耳其语 18 - 乌克兰语 19 - 罗马尼亚语 20 - 保加利亚语 21 - 印地语 22 - 印度尼西亚语 23 - 越南语 24 - 孟加拉语 25 - 马来西亚语 26 - 泰语 27 - 瑞典语 28 - 芬兰语 29 - 捷克语 30 - 希腊语 31 - 丹麦语 32 - 阿塞拜疆语
C#
public virtual int GetSystemLanguage(){return default;}TypeScript
GameHelper.App.getSystemLanguage();是否显示适龄提示入口。 0 不显示
C#
public virtual int GetUnderAgeLimitLevelStatic(){return default;}TypeScript
/**
* 是否显示适龄提示入口。 0不显示
* @return 0 8 12 16
*/
public getUnderAgeLimitLevelStatic() : number {弹出适龄弹框
C#
public virtual void ShowEligibleAgeAlertStatic(){}TypeScript
// 弹出适龄弹窗
public showEligibleAgeAlertStatic() {}Unity独有-获取设备上方 safa 区域(如果设备是横屏,是 left)
C#
public virtual int GetNotchHeightStatic(){return default;}Unity独有-获取设备下方 safa 区域(如果设备是横屏,是 right)
C#
public virtual int GetBottomNotchHeightStatic(){return default;}显示退出弹框(Android 独有)
WARNING
返回键弹出退出弹框,点击确认后再退出
C#
public virtual void ShowExitDialog(){}TypeScript
/**
* 展示退出弹框
*/
public showExitDialog() {}获取当前 App 包名
C#
public virtual string GetPackageName(){return default;}TypeScript
GameHelper.App.getPackageName();获取当前版本号
C#
public virtual string GetVersionName(){return default;}TypeScript
GameHelper.App.getVersionName();获取 App 渠道号
C#
public virtual string GetAppChannel(){return default;}TypeScript
GameHelper.App.getAppChannel();获取 App 渠道 ID,用于游戏 A/B 测试。-1:未做 A/B 测试; 0:A/B 测试的 A 包; 1:A/B 测试的 B 包
C#
public virtual int GetAppChannelId(){return default;}TypeScript
GameHelper.App.getAppChannelId();获取服务器 zone 的时间,获取失败返回为:0。获取成功返回当前时区的时间戳,单位毫秒
C#
public virtual long GetServerTimeByServerTimeZoneStatic(){return default;}TypeScript
/**
* 从服务器时区获取真实时间
* @return 获取失败返回为:0
* 获取成功返回当前时区的时间戳,单位为毫秒。
*/
public getServerTimeByServerTimeZoneStatic() : number {}获取服务器时间,(0 时区为基准)
C#
public virtual long GetServerTimeStatic(){return default;}TypeScript
//普通时间戳(0时区为基准)
public serverTimeStampWithoutTimeZone() : number {}敏感词检测
传参:type:1-文本,2-图片,checkInfo 具体信息(如果是图片类型可以为 http 的 url,也可以为本地图片路径),scene 场景可选
C#
public virtual void CheckThirdSensitiveInfoStatic(int etype,string checkInfo,string scenestr){}异步接口,调用此方法会触发ZMYSDKManager.I.SensitiveInfoResult回调,结果会以SensitiveInfoResult得形式方法。业务方需要检测code和levelFlag的值来判断是否通过检测。
只有当code=200且levelFlag=true时,检测才算通过
C#
/// <summary>
/// 敏感词检测回调
/// </summary>
public event Action<SensitiveInfoResult> SensitiveInfoResult
{
add
{
m_SensitiveInfoEventHandler += value;
}
remove
{
m_SensitiveInfoEventHandler -= value;
}
}示例代码:
C#
void SensitiveInfoResult(SensitiveInfoResult result)
{
if ("200".Equals(result.code))
{
if (result.data.levelFlag)
{
reulText.text = "检测通过:合规!!";
}
else
{
reulText.text = "检测不通过!!!";
}
}
else
{
reulText.text = "检测不通过!!!,网络请求失败";
}
}TypeScript
/**
* 游戏调用 url 三方检测敏感词吗,返回完整的接口响应response,网络错误或其他失败情况将返回“{}”
* @param type 1文本 2图片
* @param checkInfo 具体信息(文本类型为字符串、如果是图片类型为http的url)
* @param scene 场景类型 默认传空字符串即可
* levelFlag 为true 表示当前没有敏感词 false当前有敏感词 目前没有返回敏感词的参数
* fail 表示当前网络请求失败
* */
public checkThirdSensitiveInfoStatic(type : number,
checkInfo : string,
scene : string = "", success : (levelFlag : boolean) => void, fail : (error : string) => void) {}调用手机震动
C#
// milliseconds: Android专有字段,设置振动的毫秒时长
// shakeLevel:震动强弱 0:低强度(默认), 1:中等强度, 2:高强度
public virtual void VibrateStatic(long milliseconds,int shakeLevel){}TypeScript
/**
* 调用手机震动
* @param milliseconds 震动时间(毫秒)
* @param shakeLevel 震动强弱 0:低强度(默认), 1:中等强度, 2:高强度
*/
GameHelper.App.vibrateStatic(milliseconds: number, shakeLevel: number);显示 Toast 提示
C#
public virtual void ShowToast(string msg){}TypeScript
GameHelper.App.showToast(msg: string);上报自定义异常(Android 独有)
将游戏层捕获的异常上报给 Android 包内接入的异常监控模块。该接口是否实际上报取决于当前渠道包集成的异常监控能力;未集成支持模块时不会产生有效上报。
| 参数 | 类型 | 说明 |
|---|---|---|
type | number / int | 异常类型,由接入的异常监控平台约定 |
name | string | 异常名称,不能为空,例如 NullReferenceException、TypeError |
message | string | 异常信息,可传空字符串 |
stackTrace | string | 异常堆栈,不能为空 |
quitProgram | boolean / bool | 是否为需要退出程序的异常 |
C#
public virtual void ReportException(
int type,
string name,
string message,
string stackTrace,
bool quitProgram) {}
try
{
// 游戏逻辑
}
catch (System.Exception exception)
{
ZMYSDKManager.I.Sdk.ReportException(
0,
exception.GetType().Name,
exception.Message ?? "",
exception.StackTrace ?? exception.ToString(),
false);
}TypeScript
try {
// 游戏逻辑
} catch (error) {
const exception = error instanceof Error ? error : new Error(String(error));
GameHelper.App.reportException(
0,
exception.name || "Error",
exception.message || "",
exception.stack || exception.message || "Unknown exception",
false
);
}本地推送
WARNING
- 新项目请使用
GameShowDelayNotify/gameShowDelayNotify等新版统一接口,支持 Android 和 iOS。 - 旧版通知接口仍保留用于兼容已有项目,详见本节末尾;其中 CocosCreator&Laya SDK 的旧版接口仅支持 iOS。
- 通知权限检查请按下方 Unity / CocosCreator&Laya 标签页接入,注意各接口的平台支持范围。
- 创建本地推送前,请先确认用户已授予通知权限。
检查通知权限
支持 Android 和 iOS,返回 0 表示未开启通知,1 表示已开启。
C#
// 返回值:0-未开启,1-已开启
public virtual int IsAllowedUserNotificationStatic(){return default;}
int status = ZMYSDKManager.I.Sdk.IsAllowedUserNotificationStatic();支持 Android 和 iOS,使用同步接口获取当前通知权限状态,返回 0 表示未开启,1 表示已开启。
TypeScript
const status: number = GameHelper.App.isAllowedUserNotification();
if (status === 1) {
// 已开启通知,可继续创建本地推送
} else {
// 未开启通知,按游戏业务处理
}呼起系统通知权限弹框
以下接口仅支持 iOS,Android 暂未实现。系统弹框是否显示由 iOS 的授权状态决定,同一次安装期间通常只有首次请求时会显示。
C#
public virtual void ShowAllowedUserNotificationStatic(){}
ZMYSDKManager.I.Sdk.ShowAllowedUserNotificationStatic();使用 GameHelper.AppUtil.checkUserNotiPermission(callback) 请求通知权限,并通过回调获取结果。已有权限时立即回调 1;否则发起权限请求,并在结果返回后执行回调。
接口声明:
TypeScript
// 检查 iOS 通知权限,callback:0-无权限,1-有权限
checkUserNotiPermission(callback: (code: number) => void): void;callback 为必传函数,接口本身无返回值(void),权限状态通过回调参数 code 获取。
调用示例:
TypeScript
GameHelper.AppUtil.checkUserNotiPermission((code: number) => {
// code:0-无权限,1-有权限
if (code === 1) {
// 已开启通知,可继续创建本地推送
}
});旧接口(即将弃用,iOS 专用)
TypeScript
// 即将弃用,iOS 专用
checkUserNotificationPermission(): any;旧接口通过 GameHelper.App.checkUserNotificationPermission() 调用,不应将其直接返回值作为权限状态。新接入请使用 GameHelper.AppUtil.checkUserNotiPermission(callback);仅查询当前状态时使用上一节的 GameHelper.App.isAllowedUserNotification()。
开启或取消本地通知召回任务
C#
// 开启本地通知召回任务
public virtual void ScheduleInAppMessageStatic(){}
ZMYSDKManager.I.Sdk.ScheduleInAppMessageStatic();
// 取消本地通知召回任务
public virtual void CancelInAppMessageStatic(){}
ZMYSDKManager.I.Sdk.CancelInAppMessageStatic();TypeScript
// 开启本地通知召回任务
GameHelper.App.scheduleInAppMessageStatic();
// 取消本地通知召回任务
GameHelper.App.cancelInAppMessageStatic();调用 scheduleInAppMessageStatic 时,若在线参数已就绪则立即执行;否则会等待下次在线参数拉取成功后自动触发一次。
注册或更新游戏触发的本地推送
通知参数为 JSON 字符串,字段说明如下:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
notifyId | string | ✅ | 推送唯一 ID,取消时也使用此值 |
content | string | ✅ | 推送内容 |
startTimeStr | string | ✅ | 开始时间,格式 yyyy-MM-dd HH:mm |
endTimeStr | string | 结束时间,格式 yyyy-MM-dd HH:mm;为空时不限结束时间 | |
repeatType | number | 0 只展示一次(默认)、1 每天重复、2 每周重复;支持从未来某天开始重复 | |
title | string | 推送标题 | |
imgUrl | string | 图片 URL | |
params | string | 附加参数 | |
audioId | number | 声音 ID,范围 1~10;传 0 使用默认音效 | |
priority | number | 优先级,范围 0~9;0 为最高优先级 |
使用相同的 notifyId 再次调用时,会更新已有的本地推送。
C#
public virtual void GameShowDelayNotify(string notifyDataJson){}
string notifyDataJson = @"{
""notifyId"": ""energy_recovered"",
""content"": ""体力已恢复,快来继续游戏吧!"",
""startTimeStr"": ""2026-08-08 12:00"",
""endTimeStr"": ""2026-08-18 12:00"",
""repeatType"": 0,
""title"": ""体力已恢复"",
""imgUrl"": ""https://example.com/energy.png"",
""params"": ""{\"source\":\"game\"}"",
""audioId"": 0,
""priority"": 0
}";
ZMYSDKManager.I.Sdk.GameShowDelayNotify(notifyDataJson);TypeScript
const notifyDataJson = JSON.stringify({
notifyId: "energy_recovered",
content: "体力已恢复,快来继续游戏吧!",
startTimeStr: "2026-08-08 12:00",
repeatType: 0,
endTimeStr: "2026-08-18 12:00",
title: "体力已恢复",
imgUrl: "https://example.com/energy.png",
params: "{\"source\":\"game\"}",
audioId: 0,
priority: 0
});
GameHelper.App.gameShowDelayNotify(notifyDataJson);取消游戏触发的本地推送
传入创建推送时使用的 notifyId 可取消指定推送;传入空字符串可取消全部游戏触发的本地推送。CocosCreator&Laya SDK 还支持省略参数来取消全部。
C#
public virtual void GameClearLocalNotify(string notifyId){}
ZMYSDKManager.I.Sdk.GameClearLocalNotify("energy_recovered");
ZMYSDKManager.I.Sdk.GameClearLocalNotify("");TypeScript
GameHelper.App.gameClearLocalNotify("energy_recovered");
GameHelper.App.gameClearLocalNotify();旧版通知接口(兼容已有项目)
以下旧版 Unity 接口支持 Android 和 iOS:
C#
// 取消全部旧版通知
public virtual void CancelUserNotificationInfoStatic(){}
// dateStr:yyyy-MM-dd HH:mm:ss
// type:0-不重复,1-每天,2-每周,3-每月,4-每年
public virtual void CreateUserNotificationInfoStatic(
string title,
string content,
string dateStr,
int type
){}以下旧版 CocosCreator&Laya SDK 接口仅支持 iOS:
TypeScript
GameHelper.App.clearLocalNotification(notifyId: string);
// info 为 JSON 字符串,notifyId、content、startTimeStr、repeatType 为必传字段
GameHelper.App.showDelayNotification(info: string);Unity独有-弹出系统数据跟踪权限弹框(iOS 独有)
C#
// 注意,说明IOS平台上不卸载情况下,只有第一次调用才会弹出来,后续掉了系统也不会弹框
public virtual void ShowAllowedUserATTrackStatic(){}获取 App 审核状态 0:关闭审核(审核通过) 1:正在审核
C#
public virtual int GetDesignModeStatic(){return default;}TypeScript
GameHelper.App.getDesignModeHaveFinish();打开应用市场并跳转 App 详情页(Android 需要传packageName)
C#
// android传 package;iOS传空串
public virtual void GotoAppStore(string packageName){}TypeScript
/**
* 打开应用市场并跳转App详情页
* @param packageName:需要跳转的App包名
* @param marketPackageName 需要跳转的应用商店包名,不传跳转默认商店(只有安卓需要 IOS只有一个应用商店)
* 谷歌的应用商店包名是com.android.vending
*/
GameHelper.App.gotoAppStore(packageName: string, marketPackageName? : string);跳转超休闲游戏,只有 Oppo 市场部分游戏需要实现(Android 独有)
WARNING
在主页添加一个超休闲跳转按钮,按钮名称为:更多精彩
跳转超休闲游戏,只有 Oppo 市场部分游戏需要实现,按钮名称为:更多精彩
C#
public virtual void JumpLeisureSubject(){}TypeScript
//Oppo 跳转休闲市场,按钮名称为:更多精彩
public openOppoGameCenterStatic() {}启动实名认证结果监听
C#
private Action<CertificationCallbackResult> m_certificationHandler;
/// <summary>
/// 实名认证的结果回调
/// </summary>
public event Action<CertificationCallbackResult> CertificationCallbackCallback
{
add
{
m_certificationHandler += value;
}
remove
{
m_certificationHandler -= value;
}
}
/// <summary>
/// 实名认证的结果回调
/// </summary>
void certificationCallback(string data)
{
Debug.Log($"certificationCallback 回调:[{data}]");
CertificationCallbackResult result = LitJson.JsonMapper.ToObject<CertificationCallbackResult>(data);
m_certificationHandler?.Invoke(result);
}TypeScript
//监听游戏启动时,平台弹出的实名认证
//实名完成,有实名的功能才会有这个回调,一般国内发布会有实名
//result 0未认证 1已认证
public onCertification(callback : (result : number) => void) : string;
public offCertification(uuid : string);获取服务器配置的用户属性(用户分层)
用户分层配置通过在线参数获取。请按实际配置的用户分层 key 读取,取值为空时使用游戏默认分层。
订阅 ZMYSDKManager.I.OnlineParam_LoadState,在回调的 code 为 1 或 2 时,通过 ZMYSDKManager.I.Sdk.GetOnlineConfigParams("用户分层Key") 读取。完整接入示例见在线参数加载结果回调。
调用 GameHelper.AppUtil.onlineParamLoadStateCallBack(callback),在回调的 code 为 1 或 2 时,通过 GameHelper.App.getOnlineConfigParams("用户分层Key") 读取。完整示例及一次性回调说明见在线参数加载结果回调。
Unity独有-获取通信信息(Android/iOS)
支持 Android 和 iOS。游戏在合适的时机调用一次,例如首次启动或从后台切回前台;接口返回 JSON 格式字符串,无通信信息时返回空字符串。
C#
// 调用:ZMYSDKManager.I.Sdk.GetGlobeIntent
// 例如 {"OpenAppInfo":"apples_huodong"} 那么此时表明有外链打开了app
// 游戏此时应当弹出对应的游戏页面处相关逻辑。(解析 key 为 OpenAppInfo 的内容)
public virtual string GetGlobeIntent(){return default;}GameCenter-排行榜(iOS 独有)
C#
/// 获取gamecenter状态 & 回调
ZMYSDKManager.I.Sdk.getGameCenterStatus()
ZMYSDKManager.I.GetGameCenterStatusC#
/// 上报排行榜信息 & 回调
ZMYSDKManager.I.Sdk.submitScoreToGameCenter(string leaderboardID, int score)
ZMYSDKManager.I.SubmitScoreToGameCenterC#
/// 展示系统自带排行榜信息 & 回调
ZMYSDKManager.I.Sdk.showGameCenterLeaderboard(string leaderboardID)
ZMYSDKManager.I.ShowGameCenterLeaderboardC#
/// 上报某个成就百分比信息 传参80,则为80%,100为100% & 回调
ZMYSDKManager.I.Sdk.submitAchievementToGameCenter(string achievementID, float percent)
ZMYSDKManager.I.SubmitAchievementToGameCenterC#
/// 展示系统成就榜信息 & 回调
ZMYSDKManager.I.Sdk.showGameCenterAchievement(string achievementID)
ZMYSDKManager.I.ShowGameCenterAchievementTypeScript
/**
* GameCenter相关 - iOS独有
*/
// 获取 Game Center 状态
// callback:0-用户未授权 1-用户已经授权
public getGameCenterStatus(callback : (status : number) => void)
// 上报排行榜信息
// leaderboardID - 排行榜id,score - 分数
// callback:0-失败 1-成功
public submitScoreToGameCenter(leaderboardID: string, score: number, callback : (value : string) => void)
// 展示系统自带排行榜信息
// leaderboardID - 排行榜id
// callback: 0-展示失败,1-正常展示,2-展示后关闭
public showGameCenterLeaderboard(leaderboardID: string, callback : (value : string) => void)
// 上报某个成就百分比信息,percent传参 80,则为 80%,100 为 100%
// achievementID - 成就ID
// callback: 0-失败 1-成功
public submitAchievementToGameCenter(achievementID: string, percent: number, callback : (value : string) => void)
// 展示系统成就榜信息(getGameCenterStatus 为1时使用)
// achievementID - 成就ID
// callback: 0-展示失败,1-正常展示,2-展示后关闭
public showGameCenterAchievement(achievementID: string, callback : (value : string) => void)Google Game Service 相关接口(Android 独有)
WARNING
接入 Google 游戏服务成就或排行榜前,必须先接入 Google 游戏服务登录流程。推荐顺序是:先用 GameServiceGetAccountStatus 判断状态,未登录时调用 GameServiceSignIn,等登录成功后再解锁成就、显示成就或上报排行榜。
1. 必接:获取Google游戏服务账户状态
C#
/// <returns>0-未登录 1-登录成功 2-静默登录失败 3-显式登录失败</returns>
int status = ZMYSDKManager.I.Sdk.GameServiceGetAccountStatus();2. 必接:Google游戏服务登录(显式登录,带回调)
C#
ZMYSDKManager.I.Sdk.GameServiceSignIn();调用此接口会触发ZMYSDKManager.I.GameService_SignIn回调
3. 登录结果回调
C#
ZMYSDKManager.I.GameService_SignIn += GameServiceSignInCallback;
void GameServiceSignInCallback(GameServiceSignInResult result)
{
// result.code: 1-成功, 0-失败
// result.message: 成功时为"用户信息JSON字符串",失败时为"errorCode-errorMessage"
Debug.Log($"登录结果回调:code={result.code}, message={result.message}");
}4. 获取Google游戏服务用户信息
C#
ZMYSDKManager.I.Sdk.GameServiceGetUserInfo();调用此接口会触发ZMYSDKManager.I.GameService_GetUserInfo回调
C#
ZMYSDKManager.I.GameService_GetUserInfo += GameServiceGetUserInfoCallback;
void GameServiceGetUserInfoCallback(GameServiceGetUserInfoResult result)
{
// result.code: 1-成功
// result.userInfo: 用户信息JSON字符串,格式:{password=xxx, phone=, nickName=HSL, icon=, userName=HSL, userId=7481041033, age=0}
Debug.Log($"获取用户信息回调:code={result.code}, userInfo={result.userInfo}");
}5. Google游戏服务登出
C#
ZMYSDKManager.I.Sdk.GameServiceSignOut();6. 获取是否显示成就入口
C#
/// <returns>true-显示成就入口 false-不显示成就入口</returns>
bool isShow = ZMYSDKManager.I.Sdk.GameServiceIsShowAchievements();7. 解锁Google游戏服务成就
成就接入流程:
- 调用
GameServiceGetAccountStatus判断是否已登录。 - 如果未登录,先调用
GameServiceSignIn登录 Google 游戏服务,并等待GameService_SignIn回调成功。 - 玩家达成成就时,再调用
GameServiceUnlockAchievements。
C#
/// <param name="type">成就类型 0-普通类型 1-增量类型</param>
/// <param name="achievementId">成就ID,从Google Play后台获取</param>
/// <param name="increment">type=1时的增量</param>
ZMYSDKManager.I.Sdk.GameServiceUnlockAchievements(int type, string achievementId, int increment);8. 显示Google游戏服务成就
C#
ZMYSDKManager.I.Sdk.GameServiceShowAchievements();9. 上传用户分数到Google游戏服务
C#
/// <param name="gameId">玩法id</param>
/// <param name="score">用户积分</param>
ZMYSDKManager.I.Sdk.GameServiceUpdateScore(string gameId, int score);10. 显示Google游戏服务排行榜
C#
/// <param name="gameId">玩法id</param>
/// <param name="type">排行榜类型 0-日 1-周 2-所有</param>
ZMYSDKManager.I.Sdk.GameServiceShowLeaderboards(string gameId, int type);1. 必接:获取Google游戏服务账户状态
TypeScript
/**
* 获取 Google 游戏服务账户状态
* 0-未登录 1-登录成功 2-静默登录失败 3-显式登录失败
*/
public gameServiceGetAccountStatus(): number {
return this.appApi.gameServiceGetAccountStatus()
}2. 必接:Google游戏服务登录(显式登录,带回调)
TypeScript
// GameHelper.AppUtil
// Google 游戏服务显式登录
// callback: code - 登录结果
public gameServiceSignIn(callback: (code: number) => void) {
Util.EventManager.only(JSGameCallbackEnum.gameServiceSignInCallback, (param) => {
callback && callback(param["code"])
}, this)
this.appApi.gameServiceSignIn()
}3. 获取Google游戏服务用户信息
TypeScript
// GameHelper.AppUtil
/**
* Google 游戏服务相关 - Android独有
*/
// 获取 Google 游戏服务用户信息
// callback: 回调参数为用户信息 json 字符串
public gameServiceGetUserInfo(callback: (userInfo: string) => void) {
Util.EventManager.only(JSGameCallbackEnum.gameServiceGetUserInfoCallback, (param) => {
callback && callback(param)
}, this)
this.appApi.gameServiceGetUserInfo()
}4. Google游戏服务登出
TypeScript
public gameServiceSignOut()5. 获取是否显示成就入口
TypeScript
// 获取是否显示成就入口
public gameServiceIsShowAchievements(): boolean {
return this.appApi.gameServiceIsShowAchievements()
}6. 解锁Google游戏服务成就
成就接入流程:
- 调用
gameServiceGetAccountStatus判断是否已登录。 - 如果未登录,先调用
gameServiceSignIn登录 Google 游戏服务,并等待登录回调成功。 - 玩家达成成就时,再调用
gameServiceUnlockAchievements。
TypeScript
/**
* 解锁 Google 游戏服务成就
* @param type 成就类型 0-普通类型 1-增量类型
* @param achievementId 成就ID,从 Google Play 后台获取
* @param increment type=1 时的增量
*/
public gameServiceUnlockAchievements(type: number, achievementId: string, increment: number) {
this.appApi.gameServiceUnlockAchievements(type, achievementId, increment)
}7. 显示Google游戏服务成就
TypeScript
// 显示 Google 游戏服务成就
public gameServiceShowAchievements() {
this.appApi.gameServiceShowAchievements()
}8. 上传用户分数到Google游戏服务
TypeScript
/**
* 上传用户分数到 Google 游戏服务
* @param gameId 玩法id
* @param score 用户积分
*/
public gameServiceUpdateScore(gameId: string, score: number) {
this.appApi.gameServiceUpdateScore(gameId, score)
}9. 显示Google游戏服务排行榜
TypeScript
/**
* 显示 Google 游戏服务排行榜
* @param gameId 玩法id
* @param type 排行榜类型 0-日 1-周 2-所有
*/
public gameServiceShowLeaderboards(gameId: string, type: number) {
this.appApi.gameServiceShowLeaderboards(gameId, type)
}获取设备当前地区Code
- 获取设备当前地区Code & 回调
- 回调:标准的2位长度的国家码 示例: https://zh.wikipedia.org/wiki/ISO_3166-1二位字母代码
- 返回countryCode,如果查询不到,返回cn
C#
public virtual void getOsCountryCodeStatic() {}
ZMYSDKManager.I.OnlineIsoCountryCodeTypeScript
public getOsCountryCode(callback : (result : string) => void) : string指定链接跳转外部浏览器
- 传入链接直接跳转到外部浏览器
C#
TypeScript
public openUrlInBrowser(urlStr : string) : void无登录无服务器产品风控状态
新版本风控将通过在线参数返回,请通过在线参数接口获取 is_banned 字段,空/false:不风控,true:风控
版本更新检测(无UI版本 - 游戏自己实现UI)
调用接口后主动检测版本更新,检测结果通过一次性回调返回,游戏根据回调状态处理相应逻辑。
code:0-无更新,1-强制更新,2-选择更新。
C#
public void onCheckVersionUpgrade(Action<int> callback)
// 调用示例
ZMYSDKManager.I.onCheckVersionUpgrade(code =>
{
Debug.Log($"版本检测结果:{code}");
});TypeScript
// GameHelper.AppUtil.onCheckVersionUpgrade()
public onCheckVersionUpgrade(callback: (code: number) => void)去广告和恢复广告
C#
// ZMYSDKManager.I.Sdk. 调用
/// <summary>
/// 去广告
/// </summary>
public virtual void SetRemoveAdsStatic(){}
/// <summary>
/// 获取去广告状态1-remove ads 0-show ads
/// </summary>
public virtual int GetRemoveAdsState(){return default;}
/// <summary>
/// 恢复广告
/// </summary>
public virtual void SetRestoreAdsStatic(){}TypeScript
// GameHelper.AdsApi.
//去广告 除了激励视频
public setRemoveAds()
//1 去广告 0 非去广告
public getRemoveAdsState()
//恢复广告 除了激励视频
public setRestoreAdsStatic()是否要补发视频广告奖励
@return “0”-不补发 “视频点名称”-补发
C#
// ZMYSDKManager.I.Sdk. 调用
/// <summary>
/// 是否要补发视频广告奖励
/// </summary>
public virtual string getRewardAdStatic(){}TypeScript
// 是否要补发视频广告奖励
public getRewardAd()
const ads = GameHelper.getApi("AdsApi") as GameHelper.AdsApi
const reaw = ads.getRewardAd()点我快速对接



›
‹