# 抖音小游戏模块
# 1. 接入说明
# 1.1 谁来接入此文档
接入SDK的开发人员。
# 1.2 注意事项
- SDK集成了抖音小游戏登录,支付,广告,数据上报等模块
- 抖音小游戏后台相关配置可以参考以下文档(仅参考后台配置部分,接口部分按照本文档接口接入): 抖音小游戏后台配置文档 (opens new window)
- Unity WebGL 抖音小游戏适配可以参考官方指引: 抖音官方Unity WebGL适配指引 (opens new window)
# 2. 接入步骤
# 2.1 导入Unity SDK 资源文件

# 2.2 添加宏定义
Unity工程的Player Settings中,配置 Scripting Define Symbols 添加 DOUYIN_MINIGAME_SDK

# 2.3 导出抖音小游戏工程
根据指引导出抖音小游戏工程

导出的抖音小程序示例

# 3. 功能调用
# 3.1 设置游戏参数
需要在游戏初始化,调用其他SDK接口前调用
string param = DHSDKHelper.DHJsonParam.Builder()
.put("login", "https://sz-sdk-login-cn.sztemp.com") // 必传,登录服务接口地址
.put("pay", "https://sz-sdk-pay-cn.sztemp.com") //必传,支付服务接口地址
.put("log", "https://sz-ups-sdk-log-cn.sztemp.com") // 必传,数据上报服务接口地址
.put("errorLog", "https://sz-ups-sdk-error-cn.sztemp.com") // 必传,日志上报服务接口地址
.put("subscribe", "") // 必传,订阅消息服务接口地址
.put("gameAppId", "wx123456789") // 必传,游戏在抖音侧的 AppID;可登录《抖音开放平台控制台》后台,进入"开发 > 开发设置"栏目中查看
.put("appId", "1234567890") // 必传,小游戏的 AppID(于SDK平台注册小游戏时生成的ID)
.put("appVersion", "1.0.0") // 必传,小游戏的版本号
.put("packageName", "com.dianhun.demo") // 必传,小游戏的包名
.put("channel", "3438") // 必传,渠道ID,默认固定传 3438
.put("mainChannel", "100774") // 必传,推广主渠道ID,默认固定传 100774
.put("secondChannel", "100775") //必传,推广次渠道ID,默认固定传 100775
.put("heartbeatEnable", "true") //选传,true,false是否开启心跳数据上报,若开启,则SDK将每隔一分钟向服务器发送一条心跳数据
.put("reyunAppKey", "") // 选传,小游戏的热云 AppKey(于热云广告监测平台创建产品时生成的AppKey)
.put("gravityEngineAccessToken", "") //选传,小游戏的引力引擎 Access Token(于引力引擎控制台创建产品时生成的Access Token)
.put("gravityEngineDebug", "true") //选传,显式开启或关闭引力引擎数据上报的调试模式,默认根据小游戏当前的体验环境自动设置,正式版下为 false,开发版或体验版下为 true;开启调试模式后,可以在引力控制台>设置>元数据>事件流中查看实
.put("gravityEnginePayEventEnable", "true") //选传,引力引擎付费事件是否采用客户端上报,默认采用(注意,若引力引擎付费事件上报采用服务端上报,请务必将此参数设为 false,并于SDK中台系统配置服务端上报相关参数,否则可能导致双端付费事件上报丢失或重复!!!)
.toJson();
DHSDKHelper.setHostPlatformParam(param);
# 3.2 初始化
SDK初始化接口,在游戏初始化,设置游戏参数接口调用后调用,必须初始化完毕,才能调用后续登录,支付等接口
初始化接口调用:
DHSDKHelper.init(mUnionSdkCallback);
在回调方法里面处理初始化结果:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_INIT)
{
// 初始化成功 返回调用
Debug.Log("初始化成功");
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_INIT)
{
// 初始化失败调用 返回信息数据可能游戏接入方看不懂 打印log 反馈给sdk处理者即可
}
}
}
# 3.3 登录
用于执行SDK登录流程
注意:流程上要求需先执行SDK登录,再显示游戏服列表及"开始游戏"按钮,当玩家点击"开始游戏"后再触发后续游戏服登录及创角;如游戏本身并无游戏服列表选择界面或"开始游戏"按钮,此注意事项可忽略!
调用登录接口:
DHSDKHelper.login(mUnionSdkCallback);
登录回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LOGIN)
{
/**
登录成功后 返回调用
json 数据格式
loginType: 用户授权登录类型
token:c73a482021af4888ba1ea66176ae56c7
accountId:1381307270 账号id
accountName:guest@1381307270 账号名
*/
Debug.Log("login:" + resultData);
// sdk登录成功后 需要游戏服务端做校验 详细校验过程 请查看服务端文档登录校验说明
// 当前返回的是sdk测试环境的账号数据 如果游戏服务端去sdk服务端验证账号和token数据请到测试环境验证
var loginJson = LitJson.JSON.Parse(resultData);
Debug.Log("loginJson:" + loginJson.ToString());
string logintype = loginJson["loginType"].ToString();
string Token = loginJson["token"].ToString();
string region = loginJson["region"].ToString();
string sign = loginJson["sign"].ToString();
uid = loginJson["accountId"].ToString();
uname = loginJson["accountName"].ToString();
string accountView = loginJson["accountView"].ToString();
var userExtraInfo = loginJson["userExtraInfo"];
string openId = userExtraInfo["openId"].ToString();
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LOGIN)
{
//登录失败
}
}
}
# 3.4 获取用户信息
用于获取抖音用户的个人信息,如昵称、头像等。
注意:
- 一般通过此服务获取抖音用户的昵称、头像,用来作为玩家在游戏内的昵称、头像,如果无此需求,此服务可不对接!
- 若传递了 withRealNameAuthenticationInfo 参数,则要求用户客户端基础库版本不低于 1.80.0;若低于该版本,调用本接口将中断用户当前操作并弹出升级提示,不会报错!
调用接口:
string param = DHSDKHelper.DHJsonParam.Builder()
.put("withCredentials", "true") //选传,是否需要返回敏感数据
.put("withRealNameAuthenticationInfo", "true") //选传,是否需要返回用户实名认证状态
.toJson();
DHSDKHelper.getUserInfo(param,mUnionSdkCallback);
接口回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GET_USERINFO)
{
/**
获取用户信息成功后 返回调用
具体用户信息可参考官方文档
https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/api/open-capacity/user-information/info/tt-get-user-info
*/
Debug.Log("user info:" + resultData);
var userInfoJson = LitJson.JSON.Parse(resultData);
Debug.Log("userInfoJson:" + userInfoJson.ToString());
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GET_USERINFO)
{
//获取用户信息返回失败
}
}
}
具体用户信息可参考官方文档:tt.getUserInfo (opens new window)
# 3.5 支付
抖音小游戏提供虚拟充值的能力,用户可以在游戏内下单,进行游戏内道具的购买。本文主要对游戏内的支付能力进行简单概述说明。
支付方式 在不同的设备环境中,因相关策略限制,SDK实现支付能力的方式有所区别,如下所示:
虚拟支付 利用 tt.requestGamePayment() 接口发起抖音虚拟支付,并直接购买游戏内服务或道具,适用于 Android 设备
钻石兑换 利用 tt.openAwemeCustomerService() 接口发起抖音钻石支付,购买抖音钻石;“钻石”是抖音平台向用户提供的,用于在抖音平台上进行相关消费的虚拟道具,用户可以使用钻石兑换游戏中的服务或道具,适用于 iOS 设备;使用钻石兑换能力需要登录《抖音开放平台控制台》进行开通,详情请参考《钻石兑换功能》文档说明
游戏客户端在接入SDK支付接口时,无需关心用户所处的设备环境,SDK将在内部自行识别并选择相应的支付方式以发起支付。
注意:接入支付相关能力前,需先完成IM客服能力接入,确保及时处理用户反馈,保证用户体验!
调用支付接口:
DHSDKHelper.DHSDKPayInfo payInfo = new DHSDKHelper.DHSDKPayInfo();
payInfo.AreaId = "100"; //选传,游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
payInfo.AreaName = "1"; //选传,游戏大区名称,若游戏无大区概念,可不填,默认值为 1
payInfo.RoleId = "1"; //选传,角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
payInfo.RoleName = "1"; //选传,角色昵称
payInfo.RoleLevel = "1"; //选传,角色等级,若游戏无角色及等级概念,可填关卡等级或不填,默认值为 1
payInfo.Rate = "10"; //必传,游戏币兑换汇率,用于计算游戏币购买数量;例如:后台配置为 1:10,则 rate 为 10,表示1人民币=10游戏币;可登录《抖音开放平台控制台》后台,进入“商业化 > 虚拟支付 > 支付设置 > 基础信息 > 货币汇率”栏目中查看
payInfo.ItemId = "123"; //必传,商品ID
payInfo.ItemName = "goods"; //必传,商品名称
payInfo.ItemNum = "1"; //选传,商品数量,默认值为 1
payInfo.ItemPrice = "600"; //必传,商品单价,单位为分,请注意换算!!!
payInfo.Currency = "CNY"; //选传,货币类型,默认为 CNY
payInfo.Memo = ""; //选传,透传参数
payInfo.Remark = ""; //选传,备用透传参数
DHSDKHelper.pay(payInfo, mUnionSdkCallback);
支付回调:
注意:支付回调仅表示当前接口调用成功,不代表用户实际完成了支付流程,支付且发货成功应以游戏服务端下发通知为准
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_PAY)
{
/**
支付成功
*/
Debug.Log("pay info:" + resultData);
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_PAY)
{
//支付失败
}
}
}
# 3.6 广告
当前SDK支持在游戏内创建并嵌入激励视频广告,接入之前需登录《抖音开放平台控制台》 (opens new window)后台,进入“商业化 > 流量主”,新建“激励广告”并获取广告位ID。
可在游戏初始化后调用创建广告接口,提前拉取广告,每个广告单元只需创建一次即可,后续可多次拉取和播放广告,创建时会自动拉取一次广告视频。
# 3.6.1 创建激励视频广告实例
用于在小游戏内创建并嵌入激励视频广告。
//创建广告实例,可以创建多个广告实例,使用adUnitId 来判断区分
Dictionary<string, string> adInfo = DHSDKHelper.DHParam.Builder()
.put("adUnitId", "asdcv123123") //必传,广告位ID
.put("event_type", "createAd") // 必传,createAd 创建广告实例,loadAd 加载广告,couldPlayAd 是否可以播放 playAd 播放广告
.put("adPlatform", "douyin") //选传,广告平台
.put("adPosition", "") //选传,广告展示位置,预留参数,有就填写
.toDictionary();
DHSDKHelper.playAd(adInfo, mUnionSdkCallback);
# 3.6.2 加载广告视频
用于加载激励视频广告;一般情况下,创建广告后,广告数据会默认加载一次,如果拉取失败,可在适当位置重新加载。
//加载广告,根据广告id找到对应广告实例
Dictionary<string, string> adInfo2 = DHSDKHelper.DHParam.Builder()
.put("adUnitId", "asdcv123123") //必传,广告位ID
.put("event_type", "loadAd") // 必传,createAd 创建广告实例,loadAd 加载广告,couldPlayAd 是否可以播放 playAd 播放广告
.toDictionary();
DHSDKHelper.playAd(adInfo2, mUnionSdkCallback);
# 3.6.3 判断是否能播放广告
判断广告单元id对应的广告实例是否创建好
//判断是否能播放广告,根据广告id找到对应广告实例
Dictionary<string, string> adInfo3 = DHSDKHelper.DHParam.Builder()
.put("adUnitId", "asdcv123123") //必传,广告位ID
.put("event_type", "couldPlayAd") // 必传,createAd 创建广告实例,loadAd 加载广告,couldPlayAd 是否可以播放 playAd 播放广告
.toDictionary();
DHSDKHelper.playAd(adInfo3, mUnionSdkCallback);
# 3.6.4 播放广告
如果广告准备完毕,则可播放广告视频:
//播放广告,根据广告id找到对应广告实例
Dictionary<string, string> adInfo4 = DHSDKHelper.DHParam.Builder()
.put("adUnitId", "asdcv123123") //必传,广告位ID
.put("event_type", "playAd") // 必传,createAd 创建广告实例,loadAd 加载广告,couldPlayAd 是否可以播放 playAd 播放广告
.put("adPosition", "") //选传,广告展示位置,预留参数,有就填写
.toDictionary();
DHSDKHelper.playAd(adInfo4, mUnionSdkCallback);
# 3.6.5 广告回调接口
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD_READY)
{
//广告准备完毕,可根据adunityId获取对应的广告实例
Debug.Log("ad info:" + resultData);
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("adJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
else if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD)
{
//广告播放成功,可根据adunityId获取对应的广告实例
Debug.Log("ad info:" + resultData);
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("adJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
else if(requestCode == DHSDKHelper.DHSDKConst.REQ_AD_LOAD)
{
//广告加载成功,可根据adunityId获取对应的广告实例
Debug.Log("ad info:" + resultData);
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("adJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
else if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD_CLOSE)
{
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("loginJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD_READY)
{
//广告尚未准备好,可根据adunityId获取对应的广告实例
Debug.Log("ad info:" + resultData);
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("adJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
else if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD)
{
//广告播放失败,可根据adunityId获取对应的广告实例
Debug.Log("ad info:" + resultData);
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("adJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
else if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD_LOAD)
{
//广告加载失败,可根据adunityId获取对应的广告实例
Debug.Log("ad info:" + resultData);
var adJson = LitJson.JSON.Parse(resultData);
Debug.Log("adJson:" + adJson.ToString());
string adUnityId = adJson["adUnitId"].ToString();
}
}
}
# 3.7 数据统计相关接口
用于上报并记录用户在游戏内的行为日志&事件(如:启动、登录、充值等行为),方便观察数据的变化、快速定位问题的根源,以及追踪程序执行的过程等。 主要上报接口如下
# 3.7.1 流程统计上报
用于上报并记录用户在游戏内的行为日志&事件(如:启动、登录、充值等行为),方便观察数据的变化、快速定位问题的根源,以及追踪程序执行的过程等。
上报相关流程统计数据(行为日志),在SDK初始化完成后即可调用 调用接口:
Dictionary<string, string> logParamsDic = new Dictionary<string, string>();
logParamsDic.Add("logLevel", "d"); // 必传,// 日志类型;d 用于标记普通日志,e 用于标记异常日志
logParamsDic.Add("logContent", ""); //必传,日志内容,可以是描述文本或JSON字符串等任意字符串,如程序执行错误信息或网络请求响应信息等
logParamsDic.Add("key", "value"); //宣传,自定义事件,可由运营提供
string eventId = "100100::SDK_CLIENT_LAUNCH"; //必传,事件ID
DHSDKHelper.track(eventId, logParamsDic);
# 3.7.2. 自定义事件上报
上报其它自定义事件(除启动、登录、充值等行为以外的自定义事件,如角色升级等);自定义事件的名称、参数无固定格式,非必接,请结合游戏业务需要或运营需求自行上报
调用接口:
Dictionary<string, string> cusParamsDic = new Dictionary<string, string>();
cusParamsDic.Add("eventName", "levelUp"); // 必传, 自定义事件名称;如这里的 levelUp 代表角色升级事件
cusParamsDic.Add("eventObj", ""); //选传,事件操作对象,如果是按钮点击事件,则对应按钮ID
cusParamsDic.Add("eventResult", ""); //选传,事件操作结果,如果是按钮点击事件,则返回按钮点击的结果,例如跳转至另一个页面,则填写结果页ID
cusParamsDic.Add("eventCode", ""); //选传,事件操作原因 code 码
cusParamsDic.Add("statMode", "1"); //选传,数据统计方式:1 代表按 eventName+eventObj+eventCode 聚合后统计人数次数,2 代表按 eventName+eventObj+eventCode 取每个用户最新记录,然后统计人数次数
cusParamsDic.Add("extendParamJson", ""); //选传, 扩展参数,格式为JSON字符串
cusParamsDic.Add("areaId", ""); //选传,游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
cusParamsDic.Add("roleId", ""); //选传,角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
string cusEventId = "custom"; //必传, 固定为custom,无需修改
DHSDKHelper.track(cusEventId, cusParamsDic);
# 3.7.3. 启动场景数据上报
上报抖音启动场景数据;一般在接入了抖音《推荐流直出游戏能力》,且用户从推荐流进入游戏,并在游戏场景加载完成,达到可交互状态时需要接入(此时场景ID sceneId 固定传入 7001)。
调用接口:
Dictionary<string, string> sceneParamsDic = new Dictionary<string, string>();
sceneParamsDic.Add("sceneId", "7001"); // 必传, 场景ID,如这里的7001,表示游戏场景加载完成,达到用户可交互状态;可登录抖音开放平台控制台,进入“数据 > 性能分析 > 启动性能 > 启动场景配置”模块,添加游戏的自定义启动场景,游戏每次启动只可以上报一次
sceneParamsDic.Add("costTime", "1000"); //必传,场景耗时,单位ms
sceneParamsDic.Add("dimension", "{\"d1\":\"2.1.0\"}"); //选传,josn字符串字典格式,dimension为自定义维度数据
sceneParamsDic.Add("metric", "{\"m1\":\"546\"}"); //选传,metric为自定义指标数据
string sceneEventId = "scene"; //必传, scene,无需修改
DHSDKHelper.track(sceneEventId, sceneParamsDic);
# 3.7.4. 角色信息上报(SDK内部统计使用)
当有用户登录游戏服成功、创角成功、角色升级(如游戏无角色等级概念,则为关卡等级)时,均需调用此接口进行数据上报。
调用接口:
Dictionary<string, string> roleInfoParamsDic = new Dictionary<string, string>();
roleInfoParamsDic.Add("type", "LOGIN_GAME"); // 必传,上报类型 LOGIN_GAME - 登录游戏服 CREATE_ROLE - 创角 LEVEL_UP - 升级
roleInfoParamsDic.Add("areaId", "100"); //选传,游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
roleInfoParamsDic.Add("areaName", ""); //选传,游戏大区名称
roleInfoParamsDic.Add("roleId", "123123"); //必传,角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
roleInfoParamsDic.Add("roleName", "abc"); //必传,角色名称
roleInfoParamsDic.Add("roleLevel", "1"); //必传,角色等级,若游戏无角色及等级概念,可填关卡等级或不填,默认值为 1
roleInfoParamsDic.Add("roleVipLevel", "1"); //选传,角色VIP等级
roleInfoParamsDic.Add("itemId", ""); //商品ID,仅在 type 为 PAY_SUCCESS 时必填!
roleInfoParamsDic.Add("itemName", ""); //商品名称,仅在 type 为 PAY_SUCCESS 时必填!
roleInfoParamsDic.Add("orderId", ""); //订单唯一编号,仅在 type 为 PAY_SUCCESS 时必填!
roleInfoParamsDic.Add("orderPrice", ""); //商品总价,即实际支付价格,单位为分!仅在 type 为 PAY_SUCCESS 时必填!
roleInfoParamsDic.Add("currency", "CNY"); //货币类型,仅在 type 为 PAY_SUCCESS 时选填! CNY - 人民币 USD - 美元
roleInfoParamsDic.Add("payType", ""); //支付方式,仅在 type 为 PAY_SUCCESS 时选填! weixinpay - 微信支付 alipay - 支付宝 yeepay - 易宝支付 unionpay - 银联
DHSDKHelper.gameRoleInfoUpload(roleInfoParamsDic);
# 3.8 查询接口
用户获取登录后用户信息,系统信息等参数
示例如下:
string version = DHSDKHelper.query("version"); //SDK的版本号,如 1.0.0
Debug.Log("version:" + version);
string system = DHSDKHelper.query("system"); //系统信息,详情请参考 wx.getSystemInfoSync() 接口文档
string platform = DHSDKHelper.query("system.platform"); //客户端设备类型 android - Android微信 ios - iOS微信 windows - Windows微信 mac - macOS微信 devtools - 微信开发者工具
Debug.Log("platform:" + platform);
string networkType = DHSDKHelper.query("networkType"); //网络类型,详情请参考 wx.getNetworkType() 接口文档
string deviceId = DHSDKHelper.query("deviceId"); //设备唯一标识(注意,因小游戏客户端SDK无法获取真实的设备唯一标识,故使用一个32位随机字符串作为设备唯一标识,并存储于客户端缓存中;后续进入小游戏,若有缓存则从缓存中获取,无缓存则重新生成并存入缓存;因此无法确保设备唯一标识的准确性)
string deviceOS = DHSDKHelper.query("deviceOS"); //设备类型,如minigame_android、minigame_ios、minigame_devtools等
string launchOptions = DHSDKHelper.query("launchOptions"); //小游戏的启动参数,详情请参考 wx.getLaunchOptionsSync() 接口文档
string gameAppId = DHSDKHelper.query("gameAppId"); //小游戏的 AppID(于微信公众平台注册小游戏时生成的ID)
string appId = DHSDKHelper.query("appId"); //小游戏的 AppID(于SDK平台注册小游戏时生成的ID)
string appName = DHSDKHelper.query("packageName"); //小游戏的应用包名,如 com.dianhun.abc
string appVersion = DHSDKHelper.query("appVersion"); //小游戏的版本号,如 2.0.4.10
string channel = DHSDKHelper.query("channel"); //渠道ID,如 1389
string mainChannel = DHSDKHelper.query("mainChannel"); //推广主渠道ID,如 100708
string secondChannel = DHSDKHelper.query("secondChannel"); //推广次渠道ID,如 100709
string userInfo = DHSDKHelper.query("userInfo"); //用户信息,仅在授权登录成功后可读
string loginType = DHSDKHelper.query("userInfo.loginType"); //用户授权登录类型
string token = DHSDKHelper.query("userInfo.token"); //用户授权登录Token
string sign = DHSDKHelper.query("userInfo.sign"); //签名(本地验签使用)
string region = DHSDKHelper.query("userInfo.region"); //所属地区,1 表示中国大陆,0 表示港澳台及海外
string loginTimestamp = DHSDKHelper.query("userInfo.loginTimestamp"); //登录时间,秒级时间戳
string expireTimestamp = DHSDKHelper.query("userInfo.expireTimestamp"); //登录态过期时间,秒级时间戳
string accountView = DHSDKHelper.query("userInfo.accountView"); //账号缩略
Debug.Log("token:" + token);
string account = DHSDKHelper.query("userInfo.accountName"); //用户账号
string accountId = DHSDKHelper.query("userInfo.accountId"); //用户账号ID
string openId = DHSDKHelper.query("userInfo.userExtraInfo.openId"); //用户抖音唯一标识(openId)
string userName = DHSDKHelper.query("userInfo.userExtraInfo.userName"); //用户在抖音侧的账号名称
string avatar = DHSDKHelper.query("userInfo.userExtraInfo.avatar"); //用户在抖音侧的头像
string nickName = DHSDKHelper.query("userInfo.userExtraInfo.nickName"); //用户在抖音侧的昵称
# 3.9 客服
当前SDK提供两种方式接入客服会话功能:抖音&抖音Lite内客服和其他宿主客服,可通过以下接口区分宿主环境:
string appName = DHSDKHelper.query("system.appName");
抖音&抖音Lite内客服:
当前支持的客服类型包括:
- 小6客服:使用前需开通并配置相关客服账号,关于其能力介绍、接入指南等更多内容请阅读小6客服消息能力(全app通用) (opens new window)文档说明
- 抖音IM客服(仅支持抖音):使用前需开通并配置相关客服抖音账号,关于其功能简介、配置原理及客服工具使用等更多内容请阅读抖音IM客服 (opens new window)文档说明
调用接口:
//抖音内直接打开客服
//抖音内直接打开客服
Dictionary<string, string> paramsDic = new Dictionary<string, string>();
paramsDic.Add("type", "1"); //选传,客服类型:1 - 小6客服(推荐)2 - 抖音IM客服(仅支持抖音)
paramsDic.Add("action", "douyin"); //必传,douyin:抖音内直接打开客服 createBtn:其它宿主平台创建客服按钮,show:显示客服按钮,hide:隐藏客服按钮,destroy:销毁客服按钮
paramsDic.Add("sessionFrom", ""); //选传,保留字段,暂时可以不填
DHSDKHelper.showFAQ(paramsDic,mUnionSdkCallback);
其他宿主内客服:
用于在游戏内创建小6客服按钮,并在点击时跳转至小6客服页面,全app通用;管理员可登录《抖音小6客服》 (opens new window)后台查看或回复用户咨询的内容;使用前需开通并配置相关客服账号,关于其能力介绍、接入指南等更多内容请阅读小6客服消息能力(全app通用) (opens new window)文档说明。
调用接口:
//其他宿主平台创建客服按钮
Dictionary<string, string> paramsDic2 = new Dictionary<string, string>();
paramsDic.Add("type", "text"); //// 必传,按钮类型 text - 文本按钮,允许自定义背景色及文本 image - 图片按钮,仅允许设置背景贴图,背景贴图会直接拉伸至按钮的宽高
paramsDic.Add("action", "createBtn"); //必传,douyin:抖音内直接打开客服 createBtn:其它宿主平台创建客服按钮,show:显示客服按钮,hide:隐藏客服按钮,destroy:销毁客服按钮
paramsDic.Add("text", ""); //选传,文本按钮的文本,仅当 type 为 text 时有效
paramsDic.Add("image", ""); //选传,图片按钮的背景图片,仅当 type 为 image 时有效
paramsDic.Add("top", "376"); //必传,按钮左上角纵坐标
paramsDic.Add("left", "100"); //必传,按钮左上角横坐标
paramsDic.Add("width", "100"); //必传,按钮宽度
paramsDic.Add("height", "32"); //必传,按钮高度
paramsDic.Add("backgroundColor", "#07c160"); //选传,按钮背景颜色,格式为 6 位 16 进制数
paramsDic.Add("borderWidth", "0"); //选传,按钮边框宽度
paramsDic.Add("borderColor", "#07c160"); //选传,按钮边框颜色,格式为 6 位 16 进制数
paramsDic.Add("borderRadius", "0"); //选传,按钮边框圆角
paramsDic.Add("textColor", "#ffffff"); //选传,按钮文本颜色,格式为 6 位 16 进制数
paramsDic.Add("fontSize", "12"); //选传,按钮文本字号
paramsDic.Add("textAlign", "center"); //选传,按钮文本水平居中方式left - 居左 center - 居中 right - 居右
paramsDic.Add("lineHeight", "32"); //选传,按钮文本行高
DHSDKHelper.showFAQ(paramsDic2,mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SERVICE)
{
Debug.Log("打开客服成功");
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SERVICE)
{
Debug.Log("打开客服失败");
}
}
}
处理创建的客服按钮:
//处理创建的客服按钮
Dictionary<string, string> paramsDic3 = new Dictionary<string, string>();
paramsDic.Add("action", "destroy"); //必传,show:显示客服按钮,hide:隐藏客服按钮,destroy:销毁客服按钮
DHSDKHelper.showFAQ(paramsDic3,mUnionSdkCallback);
# 3.10 分享
# 3.10.1 启用转发或分享按钮(被动分享)
用于启用游戏右上角•••菜单中的分享按钮,并同步设置其点击时的分享参数;建议在SDK初始化完成后立即调用此接口进行设置。
调用接口:
DHSDKHelper.DHSDKShareContent miniContent = new DHSDKHelper.DHSDKShareContent();
miniContent.Type = DHSDKHelper.DHSDKShareType.shareType_minigame_set;
miniContent.Platform = DHSDKHelper.DHSDKSharePlatform.Platform_MiniGame;
miniContent.Title = "分享标题"; //选填,分享时显示的标题,不填时默认使用当前游戏的名称
miniContent.ImageUrl = ""; //选填,分享时显示的图片链接,可以是网络图片路径,或本地图片文件路径,亦或相对代码包根目录的图片文件路径,建议长宽比为 5:4,不填时默认使用当前游戏的ICON图标
miniContent.Desc = ""; //选填,分享时显示的描述文案,不填时默认使用当前游戏的简介
miniContent.Query = "{\"param1\":\"value1\"}"; //选填,分享时携带的额外参数;点击分享消息进入游戏后,json字符串格式
DHSDKHelper.share(miniContent, mUnionSdkCallback);
# 3.10.2 主动分享
用于主动拉起抖音发布器进行分享,亦或邀请好友、分享录屏等。
调用接口:
DHSDKHelper.DHSDKShareContent miniContent = new DHSDKHelper.DHSDKShareContent();
miniContent.Type = DHSDKHelper.DHSDKShareType.shareType_minigame_share;
miniContent.Platform = DHSDKHelper.DHSDKSharePlatform.Platform_MiniGame;
miniContent.Title = "分享标题"; //选填,分享时显示的标题,不填时默认使用当前游戏的名称
miniContent.ImageUrl = ""; //选填,分享时显示的图片链接,可以是网络图片路径,或本地图片文件路径,亦或相对代码包根目录的图片文件路径,建议长宽比为 5:4,不填时默认使用当前游戏的ICON图标
miniContent.Desc = ""; //选填,分享时显示的描述文案,不填时默认使用当前游戏的简介
miniContent.Query = "{\"param1\":\"value1\"}"; //选填,分享时携带的额外参数;点击分享消息进入游戏后,json字符串格式
miniContent.Channel = ""; //选填,转发内容类型,为空字符串或者不传时,使用默认分享方式;详情请参考 ShareParam 说明invite - 拉起邀请面板分享游戏给好友 video - 分享视频内容 picture - 发布图文内容,内容由接口参数直接传入 article - 发布图文内容 token - 口令分享,生成一串特定的字符串文本
miniContent.Extra = "{\"param1\":\"value1\"}"; //选填,附加信息,json字符串,仅当 channel 为 video 或 picture 时有效;详情请参考 ShareParam 说明
miniContent.TemplateId = ""; //选填,分享素材模板ID,指定通过抖音开放平台审核通过的 templateId 来选择分享内容
DHSDKHelper.share(miniContent, mUnionSdkCallback);
//当 channel 为 video 时,可以通过 extra 设置以下附加信息:
// 选项 类型 必填 默认值 说明
//withVideoId string 否-- 是否支持跳转到播放页, 以及支持获取视频信息等接口;为 true 时会在 success 回调中带上 videoId
//videoPath string 否 --视频地址,用于分享一个本地视频;如果不传入 videoPath,则会拉起摄像头拍摄界面
//videoTopics array 否 --视频话题(仅抖音支持),目前由 hashtag_list 代替,即将废弃;为保证兼容性,建议同时设置 hashtag_list
//createChallenge string 否 false 是否分享为挑战视频(仅头条支持)
//video_title string 否 "" 生成输入的默认文案
//hashtag_list array 否 --视频话题,字符串中间包含空格会取第一个空格前内容作为话题(仅抖音支持)
//videoTag string 否 --分享视频的标签,可以结合获取抖音视频排行榜使用
//defaultBgm string 否 --抖音PGC音乐的短链(仅抖音支持,需要基础库版本大于 1.90),形如https://v.douyin.com/JmcxWo8/,参考抖音小游戏录屏带配乐能力
//cutTemplateId string 否 --抖音上可用的剪映模板ID, 参考录屏添加剪映视频模板能力
//abortWhenCutTemplateUnavailable string 否 false 剪映模板不可用或者剪映模板ID无效的时候是否直接回调失败
//当 channel 为 picture 时,可以通过 extra 设置以下附加信息:
//选项 类型 必填 默认值 说明
//picturePath string[] 是 --发布的图片地址,仅支持本地图片路径(即游戏包内路径和 ttfile:// 路径)
//contentTitle string 否 --作品标题
//contentDescription string 否 --作品描述信息
//hashtag_list array 否-- 视频话题,字符串中间包含空格会取第一个空格前内容作为话题(仅抖音支持)
# 3.11 游戏对局回放
# 3.11.1 录制游戏画面
游戏对局回放是一组录制游戏画面来生成对局回放,并可以将对局回放分享给朋友的API,收到分享链接的抖音用户可点击链接查看回放,或进入游戏等。
注意,该能力暂不支持使用抖音开发者工具调试,请使用真机预览测试!
录制视频相关接口:
//创建全局单例录制器
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "create") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制开始事件,回调函数被执行时表示录制已开始
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onStart") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制结束事件,回调函数被执行时表示录制已完成
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onStop") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制暂停事件,回调函数被执行时表示录制已暂停
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onPause") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制恢复事件,回调函数被执行时表示录制已恢复
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onResume") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制中断开始事件,回调函数被执行时表示中断开始
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onInterruptionBegin") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制中断结束事件,回调函数被执行时表示录制中断结束
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onInterruptionEnd") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//监听录制错误事件,回调函数被执行时表示获取错误信息
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "onError") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//开始录制
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "start") // 必传,操作字段
.put("duration", "10") // 选传,视频时长限制,单位为秒;最小值 3,最大值 300,到达指定时长后不会再录制,但仍然需要手动调用 stop 来结束录制
.put("isMarkOpen", "true") // 选传,是否添加水印,会在录制出来的视频上添加默认水印,目前不支持自定义水印图案;用户客户端基础库版本不低于 1.69.0 时支持
.put("locTop", "0") // 选传,水印距离屏幕上边界的位置,单位为 dp;用户客户端基础库版本不低于 1.69.0 时支持
.put("locLeft", "0") // 选传,水印距离屏幕左边界的位置,单位为 dp;用户客户端基础库版本不低于 1.69.0 时支持
.put("frameRate", "30") // 选传,设置录制帧率,对于性能较差的手机可以调低参数以降低录制性能消耗;用户客户端基础库版本不低于 1.80.0 时支持
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//暂停录制
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "pause") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//恢复录制
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "resume") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//结束录制
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "stop") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//记录精彩的视频片段
//记录精彩的视频片段,调用时必须是正在录制,以调用时的录制时刻为基准,指定前 x 秒,后 y 秒为将要裁剪的片段,可以多次调用,记录不同时刻;在结束录制时,可以调用 clipVideo 接口剪辑并合成记录的片段
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "recordClip") // 必传,操作字段
.put("timeRange", "") // 选传,数组的值表示记录这一时刻的前后时间段内的视频,单位为秒,是一个二维数组json字符串,单位毫秒,内部都是字符串,如 "["["1000", "3000"]", "["4000", "5000"]"] "
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//剪辑精彩的视频片段
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "clipVideo") // 必传,操作字段
.put("timeRange", "") // 选传,裁剪的范围,用法含义与recordClip接口中的 timeRange 完全相同,只是记录时相对的当前时刻规定为录制结束时刻,是一个二维数组json字符串,单位毫秒,内部都是字符串,如 "["["1000", "3000"]", "["4000", "5000"]"] "
.put("clipRange", "") // 选传,指定要裁剪的范围,数组中每一项为调用recordClip接口得到返回值,是一个二维数组json字符串,单位毫秒,内部都是字符串,如 "["["1000", "3000"]", "["4000", "5000"]"] "
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
//获取水印宽高
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "getMark") // 必传,操作字段
.toJson();
DHSDKHelper.gameRecord(param, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_RECORD)
{
Debug.Log("录制视频操作成功");
var recordJson = LitJson.JSON.Parse(resultData);
Debug.Log("recordJson:" + recordJson.ToString());
string action = recordJson["action"].ToString();
/*
action事件名称
create - 创建录制器成功事件
onStart - 录制开始事件
onPause - 录制暂停事件
onResume - 录制恢复事件
onStop - 录制结束事件
onInterruptionBegin - 录制中断开始事件
onInterruptionEnd - 录制中断结束事件
onError - 错误事件
recordClip - 记录精彩的视频片段回调
clipVideo - 剪辑精彩的视频片段回调
getMark - 获取水印宽高回调
*/
if(action == "stop")
{
string duration = recordJson["videoPath"].ToString();//录屏文件的临时路径
}
else if(action == "recordClip")
{
string index = recordJson["index"].ToString();//裁剪片段的唯一索引,用于clipVideo接口调用时指定裁剪拼接顺序
}
else if(action == "error")
{
string message = recordJson["errMsg"].ToString();//录屏的错误信息
}
else if(action == "clipVideo")
{
string videoPath = recordJson["videoPath"].ToString();//剪辑的视频地址
}
else if(action == "getMark")
{
string markWidth = recordJson["markWidth"].ToString();//水印的宽度;用户客户端基础库版本不低于 1.69.0 时支持
string markHeight = recordJson["markHeight"].ToString();//水印的高度;用户客户端基础库版本不低于 1.69.0 时支持
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_RECORD)
{
Debug.Log("录制视频失败");
var recordJson = LitJson.JSON.Parse(resultData);
Debug.Log("recordJson:" + recordJson.ToString());
string action = recordJson["action"].ToString();
/*
action事件名称
create - 创建录制器成功事件
onStart - 录制开始事件
onPause - 录制暂停事件
onResume - 录制恢复事件
onStop - 录制结束事件
onInterruptionBegin - 录制中断开始事件
onInterruptionEnd - 录制中断结束事件
onError - 错误事件
recordClip - 记录精彩的视频片段回调
clipVideo - 剪辑精彩的视频片段回调
getMark - 获取水印宽高回调
*/
}
}
# 3.11.2 分享对局回放
游戏对局回放的分享可以通过调用接口 DHSDKHelper.gameRecordShare 触发。
分享回放
string shareParam = DHSDKHelper.DHJsonParam.Builder()
.put("title", "标题") // 选传,分享时显示的标题
.put("desc", "内容") // 选传,分享时显示的描述文案
.put("query", "") // 选传,分享时携带的额外参数;点击分享消息进入游戏后,可通过 DHSDKHelper.query("launchOptions")方法 或调用抖音原生方法 tt.getLaunchOptionsSync() 获取该信息
.put("videoTitle", "") // 选传,默认的输入文案
.put("templateId", "") // 选传,分享文案模板ID,通过指定该参数来选择分享文案,文案内容需在抖音开放平台设置且通过审核
.put("videoPath", "") // 必传,视频地址,分享一个本地视频;其值可在onStop(录制结束事件的回调函数中获取
.put("videoTopics", "") // 选传,视频话题,字符串中间包含空格会取第一个空格前的内容作为话题(仅抖音支持),是一个二维数组json字符串,
.put("videoTag", "") // 选传,视频标签,可以结合获取抖音视频排行榜使用
.put("videoBgm", "") // 选传,抖音PGC音乐的短链(仅抖音支持,需要基础库版本大于 1.90.0),形如https://v.douyin.com/JmcxWo8/,参考抖音小游戏录屏带配乐能力
.toJson();
DHSDKHelper.gameRecordShare(shareParam, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_RECORD_SHARE)
{
Debug.Log("录制视频分享成功");
var recordJson = LitJson.JSON.Parse(resultData);
Debug.Log("recordJson:" + recordJson.ToString());
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_RECORD_SHARE)
{
Debug.Log("录制视频分享失败");
var recordJson = LitJson.JSON.Parse(resultData);
Debug.Log("recordJson:" + recordJson.ToString());
}
}
}
# 3.12 侧边栏复访能力
随着抖音小游戏复访能力的完善,抖音首页侧边栏日活持续增高,平台推荐开发者均接入抖音首页侧边栏复访教育,引导用户从首页侧边栏进入游戏,养成打开抖音 > 打开首页侧边栏 > 快速访问游戏的心智,大幅提升次留、7留。
此能力已于2023年11月24日起开启「必接审核」,未接入该能力的游戏在「新游首发」或「版本更新」环节会有「拒审」风险,为避免影响游戏上线&更新节奏,同时也为了提升游戏留存,请务必接入此能力,感谢您的配合!
# 3.12.1 判断是否支持跳转至侧边栏
用于判断当前宿主环境是否支持跳转至某个游戏入口场景,目前仅支持「侧边栏」场景。
string sceneParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("action", "checkScene") // 必传,类型 checkScene - 判断是否支持跳转至侧边栏 navigateToScene - 跳转至侧边栏
.put("scene", "sidebar") //选传,待确认的入口场景,目前仅支持 sidebar 侧边栏
.toJson();
DHSDKHelper.scene(sceneParamStr,mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SCENE)
{
var sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("sceneJson:" + resultData);
/*
action 事件名称
checkScene – 判断是否支持跳转侧边栏
navigateToScene – 跳转至侧边栏
*/
var action = sceneJson["action"].toString();
if(action == "checkScene"){
string isExist = secneJson["data"] ["isExist"].toString();// 是否支持 true:支持 false:不支持
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SCENE)
{
}
}
}
# 3.12.2 跳转至侧边栏
用于跳转至某个游戏入口场景,目前仅支持「侧边栏」场景。
string sceneParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("action", "navigateToScene") // 必传,类型 checkScene - 判断是否支持跳转至侧边栏 navigateToScene - 跳转至侧边栏
.put("scene", "sidebar") //选传,待确认的入口场景,目前仅支持 sidebar 侧边栏
.toJson();
DHSDKHelper.scene(sceneParamStr,mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SCENE)
{
var sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("sceneJson:" + resultData);
/*
action 事件名称
checkScene – 判断是否支持跳转侧边栏
navigateToScene – 跳转至侧边栏
*/
var action = sceneJson["action"];
if(action == "navigateToScene"){
//跳转成功
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SCENE)
{
}
}
}
# 3.13 推荐流游戏直出能力
推荐流游戏直出能力(即直玩能力)是一种通过游戏内的关键信息,在抖音推荐流提醒用户别错过关键信息的触达能力。
• 以游戏内的高价值信息为深度玩家的召回抓手,使用游戏进程中的不同场景掉落的重点信息进行触达召回;
• 通过预加载能力,实现抖音推荐流无缝进入游戏的体验,将预加载完成的游戏在推荐流中分发给符合条件的用户。
推荐流游戏直出能力分为"获客版"和"复访版"两种模式,具体接入方案请参考:
# 3.13.1 查阅直玩订阅状态
用于查询用户直玩订阅的授权状态。
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("type", "play") //必传,订阅Feed流的类型,目前仅支持 play 直玩场景
.put("allScene", "true") //选传,是否为全场景订阅
.put("scene", "1") //选传,订阅的场景ID(非全场景下必传)1 - 离线收益场景 2 - 体力恢复场景 3 - 重要事件掉落
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "checkFeedSubscribeStatus")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
*/
if (event_type == "checkFeedSubscribeStatus")
{
string status = execJson["data"]["status"].ToString(); //是否已订阅,ture:是 false:否
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
if (event_type == "checkFeedSubscribeStatus")
{
}
}
}
}
}
# 3.13.2 订阅直玩
用于向用户请求授权,允许游戏在满足一定的条件后出现在Feed流中。
直玩订阅能力仅支持抖音、抖音Lite,且必须在登录后才能调用;本接口存在频控限制,需要注意调用场景和频率。
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("type", "play") //必传,订阅Feed流的类型,目前仅支持 play 直玩场景
.put("allScene", "true") //选传,是否为全场景订阅
.put("scene", "1") //选传,订阅的场景ID(非全场景下必传)1 - 离线收益场景 2 - 体力恢复场景 3 - 重要事件掉落
.put("contentIds", "[\"123456\",\"234567\"]") //选传,自定义提醒文案的 contentId 数组json字符串(非全场景下必传);contentId 在抖音开放平台控制台申请开通直玩能力后可获取
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "subscribeFeedMessage")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
*/
if (event_type == "subscribeFeedMessage")
{
string success = execJson["data"]["success"].ToString(); //是否已订阅,ture:是 false:否
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
*/
if(event_type == "subscribeFeedMessage")
{
}
}
}
}
# 3.13.3 监听进入/退出小游戏事件
用于监听Feed流进入/退出小游戏事件,仅限推荐流游戏直出场景。
直玩订阅能力仅支持抖音、抖音Lite。
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "onFeedStatusChange")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
*/
if (event_type == "onFeedStatusChange")
{
string success = execJson["data"]["type"].ToString(); //为 feedEnter 时表示从Feed流进入小游戏,为 feedExit 时表示退出小游戏回到Feed流
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
*/
if (event_type == "onFeedStatusChange")
{
}
}
}
}
# 3.13.4 取消监听进入/退出小游戏事件
用于取消监听Feed流进入/退出小游戏事件,仅限推荐流游戏直出场景。
直玩订阅能力仅支持抖音、抖音Lite。
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "offFeedStatusChange")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
offFeedStatusChange - 退出监听进入/退出小游戏事件 */
if (event_type == "offFeedStatusChange")
{
string success = execJson["data"]["type"].ToString(); //为 feedEnter 时表示从Feed流进入小游戏,为 feedExit 时表示退出小游戏回到Feed流
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
offFeedStatusChange - 退出监听进入/退出小游戏事件
*/
if (event_type == "offFeedStatusChange")
{
}
}
}
}
# 3.13.5 获取游戏启动参数
用于获取游戏启动参数、启动场景值,以及自定义信息等,从而判断当前游戏启动是否是推荐流直出场景,并自动加载到相关的游戏场景。
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "getLaunchOptionsSync")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
offFeedStatusChange - 退出监听进入/退出小游戏事件
getLaunchOptionsSync – 获取游戏启动参数
*/
if (event_type == "getLaunchOptionsSync")
{
string scene = execJson["scene"].ToString(); //启动场景值,推荐流直出场景后四位为3041,例如203041
string feed_game_scene = execJson["query"]["feed_game_scene"].ToString(); //游戏场景类型:1-离线收益场景;2-体力恢复场景;3-重要事件掉落
string feed_game_content_id = execJson["query"]["feed_game_content_id"].ToString(); //本次启动对应的内容ID
string feed_game_channel = execJson["query"]["feed_game_channel"].ToString(); //渠道表示:1-复访用户;2-获客用户
string feed_game_extra = execJson["query"]["feed_game_extra"].ToString(); //游戏自定义扩展信息,可通过推荐流直出游戏能力SPI接入文档接口的extra字段进行赋值
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
offFeedStatusChange - 退出监听进入/退出小游戏事件
getLaunchOptionsSync – 获取游戏启动参数
*/
if (event_type == "getLaunchOptionsSync")
{
}
}
}
}
# 3.13.6 上报加载完成时机
游戏客户端完成对应游戏场景加载后,需调用此接口进行加载完成事件上报,否则游戏不会在用户的抖音推荐流中展示。
// 上报加载完成时机
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("sceneId", "7001") //必传,场景ID,固定为 7001,标识游戏场景加载完成,达到用户可交互状态
.put("costTime", "0") //选传,场景耗时,单位ms
.put("dimension", "{\"key1\":\"value\"}") //选传,自定义维度数据,只能传json字符串,且序列化后长度不超过 1024 个字符
.put("metric", "{\"key1\":\"value\"}") //选传,自定义指标数据,只能传json字符串,且序列化后长度不超过 1024 个字符
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "reportScene")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
offFeedStatusChange - 退出监听进入/退出小游戏事件
getLaunchOptionsSync – 获取游戏启动参数
reportScene 上报加载完成时机
*/
if (event_type == "reportScene")
{
string code = execJson["code"].ToString(); //相应状态码,0:接口调用成功;非0:接口调用失败
string data = execJson["data"].ToString(); //接口调用成功时返回开发者传入的原始数据,接口调用失败返回null
string message = execJson["message"].ToString(); //接口调用成功或失败对应的描述信息
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkFeedSubscribeStatus - 查阅直玩订阅状态
subscribeFeedMessage - 订阅直玩
onFeedStatusChange - 监听进入/退出小游戏事件
offFeedStatusChange - 退出监听进入/退出小游戏事件
getLaunchOptionsSync – 获取游戏启动参数
reportScene 上报加载完成时机
*/
if (event_type == "reportScene")
{
}
}
}
}
# 3.14 订阅消息
基于抖音的通知渠道,抖音小游戏为开发者提供了可以高效触达用户的订阅消息能力,以便实现服务的闭环并提供更佳的体验。开发者在游戏内,可向用户发起消息订阅。开发者需后台自行记录用户是否订阅成功及订阅成功的次数。
用户在小游戏中订阅指定的消息内容后,开发者可以在后台通过下发消息服务把一条模版消息发送给用户,用户最终在抖音的 “消息-游戏通知” 中收到。
用户成功订阅一次,开发者可在游戏认为场景合适的时机,向该用户发下一条模版消息。
# 3.14.1 一次性订阅消息
用于在游戏内打开一次性订阅消息界面,返回用户订阅消息的操作结果;若用户勾选了订阅面板中的“总是保持以上选择,不再询问”,或是点击了订阅面板中的 “拒绝,不再询问” ,模板消息会被添加到用户的游戏设置页,可通过 sdkInstance.getSetting() 接口获取用户对相关模板消息的订阅状态;当用户成功订阅一次,开发者可在游戏认为场景合适的时机,向该用户下发一条模版消息(了解更多可查看小游戏订阅消息能力介绍)。
string messageParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "message")
.put("tmplIds", "[\"tmpid1\",\"tmpid2\"]") //必传,需要订阅的消息模板 id 集合,一次调用最多可订阅 3 条消息;可登录《抖音开放平台控制台》后台,进入“运营 > 运营能力 > 订阅消息”栏目中配置及查看一次性订阅消息 id(MSG开头)
.toJson();
DHSDKHelper.subscribeAction(messageParam, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SUBSCRIBE_ACTION)
{
Debug.Log("订阅操作成功");
var subscribeJson = LitJson.JSON.Parse(resultData);
Debug.Log("subscribeJson:" + subscribeJson.ToString());
string action = subscribeJson["action"].ToString();
/*
action事件名称
message - 一次性订阅消息
systemMessage - 系统订阅消息
*/
if (action == "message")
{
Debug.Log("一次性订阅消息成功");
var data = subscribeJson["data"];
var TEMPLATE_ID = data["TEMPLATE_ID"];//[TEMPLATE_ID]是动态的键,即模板 id,值包括 accept、reject、ban、filter,其中 accept 表示用户同意订阅该条 id 对应的模板消息,reject 表示用户拒绝订阅该条 id 对应的模板消息,ban 表示已被后台封禁,filter 表示该条 id 对应的模板因为标题同名被后台过滤
}
else if (action == "subscribeLongestMessage")
{
Debug.Log("长期订阅消息成功");
var data = subscribeJson["data"];
var TEMPLATE_ID = data["TEMPLATE_ID"];//[TEMPLATE_ID]是动态的键,即模板 id,值包括 accept、reject、ban、filter,其中 accept 表示用户同意订阅该条 id 对应的模板消息,reject 表示用户拒绝订阅该条 id 对应的模板消息,ban 表示已被后台封禁,filter 表示该条 id
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SUBSCRIBE_ACTION)
{
Debug.Log("订阅操作失败");
var subscribeJson = LitJson.JSON.Parse(resultData);
Debug.Log("subscribeJson:" + subscribeJson.ToString());
string action = subscribeJson["action"].ToString();
/*
action事件名称
message - 一次性订阅消息
systemMessage - 系统订阅消息
*/
}
}
}
# 3.14.2 长期订阅消息
用于在游戏内打开长期订阅消息界面,返回用户订阅消息的操作结果;若用户勾选了订阅面板中的“总是保持以上选择,不再询问”,或是点击了订阅面板中的 “拒绝,不再询问” ,模板消息会被添加到用户的游戏设置页,可通过 sdkInstance.getSetting() 接口获取用户对相关模板消息的订阅状态;当用户成功订阅一次,开发者可长期下发多条消息(了解更多可查看小游戏订阅消息能力介绍)。
接口调用和一次性订阅基本一致,action修改为subscribeLongestMessage即可
string messageParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "subscribeLongestMessage")
.put("tmplIds", "[\"tmpid1\",\"tmpid2\"]") //必传,需要订阅的消息模板 id 集合,一次调用最多可订阅 3 条消息;可登录《抖音开放平台控制台》后台,进入“运营 > 运营能力 > 订阅消息”栏目中配置及查看一次性订阅消息 id(MSG开头)
.toJson();
DHSDKHelper.subscribeAction(messageParam, mUnionSdkCallback);
回调和一次性订阅消息一致
# 3.15 添加到桌面
# 3.15.1 判断是否已添加到手机桌面
用于判断小游戏快捷方式是否已添加到手机桌面上
仅支持 Android 设备
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "checkShortcut")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
checkShortcut - 判断是否已添加到手机桌面
*/
if (event_type == "checkShortcut")
{
string exist = execJson["data"]["status"]["exist"].ToString(); //是否已添加到手机桌面上
string needUpdate = execJson["data"]["status"]["needUpdate"].ToString(); ; //是否需要更新快捷方式
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
if (event_type == "checkShortcut")
{
}
}
}
}
}
# 3.15.2 添加到桌面
用于将小游戏快捷方式添加到手机桌面上
目前仅支持抖音或抖音Lite,请在其它app中做屏蔽
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "addShortcut")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
addShortcut - 添加到桌面
*/
if(event_type == "addShortcut")
{
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
addShortcut - 添加到桌面
*/
f(event_type == "addShortcut")
{
}
}
}
}
# 3.16 清理缓存并重启小游戏
点击弹出确认框,同意后清理缓存并重启微信小游戏。
//清理缓存并重启小游戏
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("title", "提示") //必传,弹窗标题
.put("content", "是否清理缓存,并重新启动?") //必传,弹窗内容
.put("confirmText", "确认") //必传 确认按钮文字
.put("cancelText", "取消") //必传 取消按钮文字
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "ClearAndRestart")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
# 3.17 一键加群
抖音一键加群相关接口 调用接口:
//检查是否可用一键加群
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "checkJoinGroupAvalibale")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//获取抖音群信息
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("openid", "1234567890") //必传,创建群的用户openid
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "checkGroupInfo")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//一键加群(必须在点击回调中调用)
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("openid", "groupid") //必传,后台创建的群id
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "joinGroup")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
*/
if(event_type == "checkJoinGroupAvalibale")
{
//支持一键加群
}
else if (event_type == "checkGroupInfo")
{
var groupData = execJson["data"];
var groupInfoList = groupData["groupInfoList"];//群聊列表
var groupInfo = groupInfoList[0];//第一个群聊
var group_id = groupInfo[“group_id”].ToString();//群ID
var group_name = groupInfo[“group_name”].ToString();//群名
var exist_num = groupInfo[“exist_num”].ToString();//群现有人数
var max_num = groupInfo[“max_num”].ToString();//群最大支持进入人数
var description = groupInfo[“description”].ToString();//群描述
var entry_limit = groupInfo[“entry_limit”];//群门槛string数组
var status = groupInfo[“status”].ToString();//群状态. 正常: Normal, 封禁: Ban, 已满: Full
var tags = groupInfo[“tags”];//群标签,string数组,如活跃群,群主近期发言
var avatar_uri = groupInfo[“avatar_uri”].ToString();//群头像
}
else if (event_type == "joinGroup")
{
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
*/
if(event_type == "checkJoinGroupAvalibale")
{
}
else if (event_type == "checkGroupInfo")
{
}
else if (event_type == "joinGroup")
{
}
}
}
}
# 3.18 工会一键加群
抖音工会一键加群相关接口
调用接口:
//检查是否可用工会一键加群
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "checkJoinUnionGroupAvalibale")
.toJson();b’b
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//工会一键加群(必须在点击回调中调用)
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("openid", "unionId") //必传,后台创建的工会id
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "joinUnionGroup")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//工会绑定群(仅限会长或特定成员)(必须在点击回调中调用)
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("openid", "unionId") //必传,后台创建的工会id
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "bindUnionGroup")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//工会解绑群(仅限会长或特定成员)(必须在点击回调中调用)
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("openid", "unionId") //必传,后台创建的工会id
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "unbindUnionGroup")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//获取工会信息
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("openid", "unionId") //必传,后台创建的工会id
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "getUnionGroupInfo")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
*/
if(event_type == "checkJoinUnionGroupAvalibale")
{
//支持工会一键加群
}
else if (event_type == "getUnionGroupInfo")
{
//获取公会群信息
var status = execJson["bindStatus"].ToString();//目前公会的绑定状态,true 则公会已绑定,false 则公会未绑定
}
else if (event_type == "joinUnionGroup")
{
//一键加入公会群
}
else if (event_type == "bindUnionGroup")
{
//绑定工会群
}
else if (event_type == "unbindUnionGroup")
{
//解绑工会群
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["methodName"].ToString();
/*
event_type事件名称
*/
if(event_type == "checkJoinUnionGroupAvalibale")
{
//不支持工会一键加群
}
else if (event_type == "getUnionGroupInfo")
{
//获取公会群信息
var status = execJson["bindStatus"].ToString();//目前公会的绑定状态,true 则公会已绑定,false 则公会未绑定
}
else if (event_type == "joinUnionGroup")
{
//一键加入公会群
}
else if (event_type == "bindUnionGroup")
{
//绑定工会群
}
else if (event_type == "unbindUnionGroup")
{
//解绑工会群
}
}
}
}