主题
Skip to content

基础常规接口
WARNING
💡ZMYSDKManager.I.Sdk.xxxx 接口名称
WARNING
小游戏版本号在 Assets\Resources\XYXGlobalConfig.json 里面修改
SDK 初始化完成通知
小游戏 SDK 会依次完成平台 SDK 初始化、登录和登录后模块初始化。需要在这些步骤全部完成后执行游戏逻辑时,监听通用消息 OnXYXLoginFinish:
csharp
using UnityEngine;
using XYXCommon;
using ZMYSDK.Util.Event;
public class XYXSDKInitListener : MonoBehaviour
{
private void Awake()
{
MsgDispatcher.AddEventListener(
GlobalMsgDefine.OnXYXLoginFinish,
OnXYXLoginFinish
);
}
private void OnDestroy()
{
MsgDispatcher.RemoveEventListener(
GlobalMsgDefine.OnXYXLoginFinish,
OnXYXLoginFinish
);
}
private void OnXYXLoginFinish(object[] args)
{
Debug.Log("小游戏 SDK 初始化及登录后流程完成");
// 此处开始执行依赖 SDK 登录态的业务逻辑
}
}该通知在平台初始化、登录、登录后模块初始化、广告初始化和生命周期事件注册完成后发送。监听应尽早注册,并在对象销毁时移除。该消息属于小游戏通用流程,不依赖微信接口。
健康游戏公告 (必接)
游戏首页需要展示
健康游戏忠告
抵制不良游戏,拒绝盗版游戏。
注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。
合理安排时间,享受健康生活。是否支持侧边栏 (抖音小游戏必接)
完整接入流程、每日奖励处理、前台事件刷新及测试方法见小游戏侧边栏和复访。
c#
//有些旧版本的抖音不支持侧边栏,所以需要先检查是否支持,再决定是否跳转
XYX.CheckSupportSide(CheckCallback);
void CheckCallback(bool isSupportSide)
{
UnityEngine.Debug.Log($"是否支持侧边栏 {isSupportSide}");
}是否是侧边栏启动 (抖音小游戏必接)
c#
bool isOn = XYX.CheckLaunchFormSide();
UnityEngine.Debug.Log($"是否是侧边栏启动 {isOn}");跳转到侧边栏 (抖音小游戏必接)
c#
XYX.JumpToSide();客服系统 (抖音小游戏IAP必接)
c#
// 判断是否支持客服
XYX.IsSupportedKefu();
// 打开客服
XYX.OpenKefu();添加到桌面快捷方式(可选)
c#
//添加到桌面
XYX.IsShortcutExist(isExist =>
{
Debug.Log("快捷方式是否存在" + isExist);
if (!isExist)
{
XYX.CreateShortcut(isSuccess =>
{
Debug.Log("创建快捷方式" + isSuccess);
});
}
});获取在线参数
在线参数由 SDK 在登录后自动请求。需要在请求结束后读取参数时,监听通用消息 OnOnlineParamBack:
csharp
using UnityEngine;
using XYXCommon;
using ZMYSDK;
using ZMYSDK.Util.Event;
public class OnlineParamListener : MonoBehaviour
{
private void Awake()
{
MsgDispatcher.AddEventListener(
GlobalMsgDefine.OnOnlineParamBack,
OnOnlineParamBack
);
}
private void OnDestroy()
{
MsgDispatcher.RemoveEventListener(
GlobalMsgDefine.OnOnlineParamBack,
OnOnlineParamBack
);
}
private void OnOnlineParamBack(object[] args)
{
bool success =
args != null &&
args.Length > 0 &&
args[0] is bool result &&
result;
string value =
ZMYSDKManager.I.Sdk.GetOnlineConfigParams("参数Key");
Debug.Log($"在线参数回调:success={success}, value={value}");
}
}回调参数为 bool:true 表示响应成功且包含有效的 paramValueMap,false 表示本次请求或数据解析失败。失败时,读取接口仍可能返回上一次成功请求的本地缓存。
C#
public virtual string GetOnlineConfigParams(string param){return default;}调用手机震动
C#
// milliseconds: Android专有字段,设置振动的毫秒时长
// shakeLevel:震动强弱 0:低强度(默认), 1:中等强度, 2:高强度
public virtual void VibrateStatic(long milliseconds,int shakeLevel){}显示 Toast 提示
C#
public virtual void ShowToast(string msg){}输入法适配
微信渠道下 webGL 的输入 InputField 会失效,可以使用此方法获取,抖音也可以直接使用,方便多平台发包
C#
public void FixInputField(GameObject inputFieldGo)
{
XYX.InputFieldAdapter(inputFieldGo);
}获取小游戏启动来源
获取启动场景
C#
public void getLaunchScene()
{
XYX.GetLaunchScene(scene =>
{
Debug.Log("获取启动场景,scene:" + scene);
});
}是否为调试模式
获取是否为调试模式
C#
XYX.Get_DebugMode()打开隐私协议和用户政策
需要先在界面设置一个 TAG为 GFUICanvas 的透明空Canvas,要创建在顶层。
如果调用不成功,检查Assets\Resources\XYXGlobalConfig.json中是否配置了PrivacyURL
隐私协议
C#
ZMYSDKManager.I.Sdk.GotoPrivacyPolicyStatic()用户政策
C#
ZMYSDKManager.I.Sdk.GotoTermsServiceStatic()分享功能(微信特有)
C#
buildSetting = WXBuildSetting.I;
WX.ShareAppMessage(new ShareAppMessageOption()
{
title = buildSetting.ShareTitle,
imageUrl = buildSetting.GetShareImageUrl()
});游戏圈功能(微信特有)
绑定一个按钮用来做游戏圈跳转
C#
using WXFunction;
//Camera传入主相机
ZMYSDKManager.I.Sdk.BindFunctionButton_GameClub(Button btn, Camera camera)
// 隐藏按钮,只隐藏游戏圈蒙层
btn.GetComponent<WXButtonCreater>().HideButton();
// 显示按钮,只显示游戏圈蒙层
btn.GetComponent<WXButtonCreater>().ShowButton();
// 监听游戏圈点击事件
btn.GetComponent<WXButtonCreater>().SetClubButtonOnTap(Action action);查询游戏圈数据
使用 XYX.GameClub.GetGameClubData 异步查询,成功回调直接返回 XYX.GameClub.GameClubData。更新 SDK 后,原来接收 Dictionary<int, long> 的回调需要改为接收此类型,通过字段名读取数据。
csharp
public static void GetGameClubData(
Action<XYX.GameClub.GameClubData> success,
Action fail,
string topicSubKey = "");csharp
XYX.GameClub.GetGameClubData(
success: data =>
{
UnityEngine.Debug.Log($"已加入游戏圈:{data.IsJoinGameClub}");
UnityEngine.Debug.Log($"今日点赞数:{data.TodayLikedPostCount}");
UnityEngine.Debug.Log($"今日话题发帖数:{data.TodayPostedToTopicCount}");
},
fail: () => UnityEngine.Debug.LogWarning("游戏圈数据获取失败"),
topicSubKey: "你的话题ID");topicSubKey 可省略;传入微信公众平台「游戏圈话题管理」中的话题 ID 后,额外查询该话题的发帖数,不会取消其他数据的查询。请求失败或解密失败时走 fail,不要将失败当作用户未加圈。
| 字段 | 类型 | 含义 |
|---|---|---|
JoinTimestamp | long | 加入游戏圈的秒级时间戳,0 表示未加入 |
IsJoinGameClub | bool | 只读属性,等价于 JoinTimestamp > 0 |
IsUserMuted | bool | 用户是否被禁言 |
TodayLikedPostCount | long | 当天自然日点赞帖子数 |
TodayCommentedPostCount | long | 当天自然日评论帖子数 |
TodayPostedCount | long | 当天自然日发表帖子数 |
TodayPostedVideoCount | long | 当天自然日发表视频帖子数 |
TodayLikedOfficialPostCount | long | 当天自然日点赞官方帖子数 |
TodayCommentedOfficialPostCount | long | 当天自然日评论官方帖子数 |
TodayPostedToTopicCount | long | 指定话题的当天发帖数,需传入 topicSubKey 查询 |
LastRecommendGameTimestamp | long | 最近一次推荐游戏的时间戳 |
TodayVisitedDuration | long | 当天访问时长(秒);当前微信实现尚未赋值,返回默认值 0 |
TodayViewedPostCount | long | 当天浏览帖子数;当前微信实现尚未赋值,返回默认值 0 |
缺失的数值字段默认为 0,布尔字段默认为 false。当前微信实现会保留已查询的数据;需要判断某个话题的任务进度时,应每次传入对应 topicSubKey 查询,避免使用上次查询的话题缓存。
编辑器模拟
打开 Unity 菜单 小游戏 → 渠道功能调试 → 游戏圈数据模拟,配置加圈时间、禁言状态、点赞数、发帖数等字段。勾选「已加入游戏圈」会填入当前秒级时间戳,取消勾选会归零。
编辑器调用 XYX.GameClub.GetGameClubData 时先经过 scope.gameClubData 授权模拟,同意后返回面板中的数据,拒绝则走 fail。运行期间修改面板,后续查询即可读到新值;配置按项目保存,可用「还原游戏圈数据模拟默认值」重置。编辑器可填写访问时长和浏览数,但这不代表当前微信真机已支持返回这两个字段。
旧接口兼容
已有项目仍可通过消息更新事件和按 type 读取缓存的方式接入。新代码建议使用上面的异步查询回调。
注册游戏圈消息更新事件:
C#
MsgDispatcher.AddEventListener(XYXCommon.GlobalMsgDefine.GameClubDataRefresh, OnGameClubDataRefresh);主动调用游戏圈更新
C#
ZMYSDKManager.I.Sdk.UpdateGameClub()获取游戏圈信息,需要保证触发过游戏圈消息更新事件
C#
ZMYSDKManager.I.Sdk.GetGameClubData(int type)
产品导量互推功能(微信特有)
跳转其他小程序
C#
using WXFunction;
//跳转其他小游戏
XYX.NavigateToMiniProgram(string appId, string path, string envVersion);
// 上报导量按钮展示
XYX.NavigateToMiniProgram_ReportShow(string appId, string path, string envVersion)敏感词检测
传参: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 = "检测不通过!!!,网络请求失败";
}
}录屏(抖音小游戏)
录屏接口用于录制玩家的游戏过程,并在录制完成后调起抖音视频分享。录屏和分享能力需要在抖音真机环境中测试。
推荐调用顺序:
- 调用
XYX.CanUseRecorder()检查当前环境是否支持录屏。 - 调用
XYX.StartRecord(recordOptions)开始录屏。 - 在关卡结束或玩家主动停止时调用
XYX.StopRecord(recordOptions)。 - 收到
OnRecordCompleteCallback后,由玩家主动点击分享按钮调用XYX.ShareRecord(recordOptions)。
检查是否支持录屏
C#
bool canUseRecorder = XYX.CanUseRecorder();返回 true 表示当前抖音客户端和运行环境支持录屏,可以继续调用开始录屏接口;返回 false 时不应继续调用录屏相关接口。
开始录屏
C#
XYX.StartRecord(recordOptions);开始录制当前游戏画面。录制成功启动后触发 OnRecordStartCallback;录制失败时触发 OnRecordErrorCallback;达到最大时长自动结束时触发 OnRecordCompleteCallback。
停止录屏
C#
XYX.StopRecord(recordOptions);停止当前录制。成功后通过 OnRecordCompleteCallback 返回实际视频路径,失败时触发 OnRecordErrorCallback。停止结果通过回调异步返回,不要在调用 StopRecord 后立即分享。
分享录屏
C#
XYX.ShareRecord(recordOptions);调起抖音录屏视频分享界面,分享最近一次完成的录屏:
- 分享成功时触发
OnShareVideoSuccessCallback。 - 分享失败时触发
OnShareVideoFailedCallback。 - 用户取消分享时触发
OnShareVideoCancelledCallback。
如果游戏配置了分享奖励,只能在 OnShareVideoSuccessCallback 中发放。同一段录屏不能通过重复分享反复领取奖励。
获取录屏时长
C#
float duration = XYX.GetRecordDuration();返回当前录屏的累计时长,单位为秒,可用于更新录屏计时 UI 或判断录制内容是否达到可分享时长。
RecordOptions 参数说明
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
isRecordAudio | bool | true | 是否同时录制音频,仅在开始录屏时使用。 |
maxRecordTimeSec | int | 600 | 最大录制时长,单位为秒。SDK 当前默认值是 600,但抖音平台最长录制时长为 300 秒,接入时应显式设置为不大于 300。 |
OnRecordStartCallback | Action | null | 录屏成功启动时触发。 |
OnRecordErrorCallback | Action<int, string> | null | 录屏失败时触发,参数依次为错误码和错误信息。开始及停止录屏都可能触发。 |
OnRecordCompleteCallback | Action<string> | null | 录屏完成时触发,参数为实际视频路径。主动停止或达到最大时长自动停止时均可能触发。 |
OnShareVideoSuccessCallback | Action<Dictionary<string, object>> | null | 视频分享成功时触发,参数为平台返回的原始结果。 |
OnShareVideoFailedCallback | Action<string> | null | 视频分享失败时触发,参数为错误信息。 |
OnShareVideoCancelledCallback | Action | null | 用户取消视频分享时触发。取消不等同于分享失败或成功。 |
完整示例
C#
using UnityEngine;
using XYXCommon;
public class DouyinRecordExample : MonoBehaviour
{
private RecordOptions recordOptions;
private bool recordCompleted;
private void Awake()
{
recordOptions = new RecordOptions
{
isRecordAudio = true,
// 抖音平台最长录制 300 秒,建议显式设置
maxRecordTimeSec = 300,
OnRecordStartCallback = () =>
{
Debug.Log("开始录屏");
},
OnRecordErrorCallback = (errorCode, errorMessage) =>
{
Debug.LogError($"录屏失败:code={errorCode}, message={errorMessage}");
},
OnRecordCompleteCallback = videoPath =>
{
recordCompleted = !string.IsNullOrEmpty(videoPath);
Debug.Log($"录屏完成:{videoPath}");
},
OnShareVideoSuccessCallback = result =>
{
Debug.Log("录屏分享成功");
// 如有分享奖励,应在此回调中发放
},
OnShareVideoFailedCallback = errorMessage =>
{
Debug.LogError($"录屏分享失败:{errorMessage}");
},
OnShareVideoCancelledCallback = () =>
{
Debug.Log("用户取消录屏分享");
}
};
}
public void StartGameRecord()
{
if (!XYX.CanUseRecorder())
{
Debug.LogWarning("当前抖音版本或运行环境不支持录屏");
return;
}
recordCompleted = false;
XYX.StartRecord(recordOptions);
}
public void StopGameRecord()
{
XYX.StopRecord(recordOptions);
}
public void ShareGameRecord()
{
if (!recordCompleted)
{
Debug.LogWarning("录屏尚未完成,暂时不能分享");
return;
}
XYX.ShareRecord(recordOptions);
}
}WARNING
抖音平台当前规定录屏最长为 300 秒。录屏少于 3 秒时,需要保证分享按钮有正确响应或给出友好提示;录制结束后必须由玩家主动点击分享按钮,不能自动调起分享编辑器。更多规则请参阅抖音小游戏审核常见问题:录屏及分享。
点我快速对接



›
‹