# 微信小游戏模块
# 1. 接入说明
# 1.1 谁来接入此文档
接入SDK的开发人员。
# 1.2 注意事项
- SDK集成了微信小游戏登录,支付,广告,数据上报等模块
- 微信小游戏后台相关配置可以参考以下文档(仅参考后台配置部分,接口部分按照本文档接口接入): 微信小游戏后台配置文档 (opens new window)
- Unity WebGL 微信小游戏适配可以参考官方指引: 微信官方Unity WebGL适配指引 (opens new window)
- 如果接入腾讯广告,则必须接入分享,收藏接口,测试前手动调用一下。还需要上传PAY_SUCCESS的角色信息,在服务端通知支付到账后,客户端通知不准确。
# 1.3 接入步骤
# 1.3.1 导入Unity SDK 资源文件

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

# 1.3.3 导出微信小游戏工程
根据指引导出微信小游戏工程

导出的微信小程序示例

# 1.3.4 添加电魂JS SDK
然后在微信小游戏工程中添加提供的电魂JS SDK脚本文件,可以放在game.js同级目录下

# 1.3.5 在game.js中导入电魂JS SDK文件
示例如下,具体JS SDK 名称后缀版本号根据实际提供的JS SDK文件来决定
import DHMiniSDK from "./dh-mini-sdk-for-wx-2.1.8";
添加结果如下

# 1.3.6 在game.js中的方法中添加代码
示例如下
window.DHMiniSDK = DHMiniSDK;

# 2. 功能调用
# 2.1 设置游戏参数
需要在游戏初始化,调用其他SDK接口前调用
string param = DHSDKHelper.DHJsonParam.Builder()
.put("login", "https://sz-sdk-login-cn.sztemp.com") // 必传,登录服务接口地址
.put("order", "https://sz-hsdk-order-cn.sztemp.com") //必传,支付下单服务接口地址
.put("pay", "https://sz-sdk-pay-cn.sztemp.com") //必传,支付服务接口地址(跳转小游戏客服支付)
.put("midas", "https://sz-hsdk-notify-cn.sztemp.com") // 必传,支付服务接口地址(米大师支付)
.put("customerService", "https://sz-mservice-cn.sztemp.com") // 必传,H5客服系统服务接口地址
.put("survey", "https://sz-sdk-mservice-cn.sztemp.com") // 必传,问卷调查服务接口地址
.put("gameClub", "https://sz-sdk-sec-cn.sztemp.com") //必传,游戏圈服务接口地址
.put("log", "https://sz-ups-sdk-log-cn.sztemp.com") // 必传,数据上报服务接口地址
.put("errorLog", "https://sz-ups-sdk-error-cn.sztemp.com") // 必传,日志上报服务接口地址
.put("dyb", "") // 上架至冰柠乐渠道必传,冰柠乐渠道服务接口地址
.put("gameAppId", "wx123456") // 必传,小游戏的 AppID(于微信公众平台注册小游戏时生成的ID)
.put("appId", "123456") // 必传,小游戏的 AppID(于SDK平台注册小游戏时生成的ID)
.put("packageName", "com.dianhun.demo") // 必传,小游戏的应用包名
.put("appVersion", "1.0.0") // 必传,小游戏的版本号
.put("channel", "1398") // 必传,渠道ID
.put("mainChannel", "100761") // 必传,推广主渠道ID
.put("secondChannel", "100762") //必传,推广次渠道ID
.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中台系统配置服务端上报相关参数,否则可能导致双端付费事件上报丢失或重复!!!)
.put("tencentUserActionId", "") //选传,腾讯广告平台相关联的 数据源ID,如 100001,于《腾讯广告平台》 后台“数据源接入 > 新建数据源 > 查看密钥”处获取(注意:若填写此项则表示启用SDK内部集成的腾讯广告数据上报服务;启用腾讯广告数据上报需要将 https://api.datanexus.qq.com 添加为 request 合法域名)
.put("tencentSecretKey", "") //选传,腾讯广告平台相关联的 加密密钥secret_key,于《腾讯广告平台》 后台“数据源接入 > 新建数据源> 查看密钥”处获取(注意:若填写此项则表示启用SDK内部集成的腾讯广告数据上报服务;启用腾讯广告数据上报需要将 https://api.datanexus.qq.com 添加为 request 合法域名)
.put("tencentDebug", "true") //选传,显式开启或关闭腾讯广告平台数据上报的调试模式,默认根据游戏当前的体验环境自动设置,正式版下为 false,开发版或体验版下为 true
.toJson();
DHSDKHelper.setHostPlatformParam(param);
# 2.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处理者即可
}
}
}
# 2.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 账号名
openId: 用户微信唯一标识(openId)
*/
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();
uid = loginJson["accountId"].ToString();
uname = loginJson["accountName"].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)
{
//登录失败
}
}
}
# 2.4 获取微信用户信息
用于获取微信用户的个人信息,如昵称、头像等。
注意,一般通过此服务获取微信用户的昵称、头像,用来作为玩家在游戏内的昵称、头像,如果无此需求,此服务可不对接!
先判断用户是否授权,如授权,则直接调用获取用户信息接口,如未授权,先创建获取用户授权按钮,申请用户授权。
# 判断用户是否授权获取用户信息
调用接口:
DHSDKHelper.getSetting(mUnionSdkCallback);
接口回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GET_SETTING)
{
/**
判断是否获取用户信息 返回调用
*/
Debug.Log("user setting:" + resultData);
//已授权获取用户信息
//需要调用getUserInfo接口获取用户信息
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GET_SETTING)
{
//未获取用户信息,需要调用创建获取用户信息按钮接口
}
}
}
# 创建获取用户授权按钮
个人信息是用户的敏感数据,首次获取用户信息需要用户同意授权,具体方法为,使用本方法创建一个引导用户点击的按钮,并在点击并同意授权后获取(授权相关说明可以参考微信官方文档的权限章节)。
由于微信的策略限制,首次获取用户信息必须使用本API创建指定按钮,并在点击并同意授权后获取。但往往小游戏拥有自己的视觉设计体系,而该API创建的按钮不符合美术需求,遇到这种情况可通过以下两种方式解决:
- 设置 type 为 text 时,将按钮文本、边框颜色及背景颜色均置空,以便创建一个视觉透明的按钮,并利用宽高及横纵坐标将其覆盖在小游戏原生按钮上;
- 设置 type 为 image 时,将小游戏的按钮图片素材作为背景图片。
调用接口:
string param = DHSDKHelper.DHJsonParam.Builder()
.put("withCredentials", "true") //选传,获取个人信息时是否携带登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData、iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData、iv 等敏感信息
.put("lang", "zh_CN") //选传,描述用户信息的语言 en - 英文 zh_CN - 简体中文 zh_TW - 繁体中文
.put("type", "text") // 必传,按钮类型 text - 文本按钮,允许自定义背景色及文本 image - 图片按钮,仅允许设置背景贴图,背景贴图会直接拉伸至按钮的宽高
.put("text", "获取用户信息") // 选传,文本按钮的文本,仅当 type 为 text 时有效
.put("image", "") // 选传,图片按钮的背景图片,仅当 type 为 image 时有效
.put("top", "376") // 必传,按钮左上角纵坐标
.put("left", "100") //必传,按钮左上角横坐标
.put("width", "100") // 必传,按钮宽度
.put("height", "32") //必传,按钮高度
.put("backgroundColor", "#07c160") // 必传,角色所属公会 , 无公会系统,传无
.put("borderWidth", "0") // 必传,按钮边框宽度
.put("borderColor", "#07c160") // 必传,按钮边框颜色,格式为 6 位 16 进制数
.put("borderRadius", "0") //必传,按钮边框圆角
.put("color", "#ffffff") //必传,按钮文本颜色,格式为 6 位 16 进制数
.put("fontSize", "12") //必传,按钮文本字号
.put("textAlign", "center") //必传,按钮文本水平居中方式 left - 居左 center - 居中 right - 居右
.put("lineHeight", "32") //必传,按钮文本行高
.toJson();
DHSDKHelper.createUserInfoButton(param,mUnionSdkCallback);
接口回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_CREATE_USER_INFO_BUTTON)
{
/**
创建按钮成功后 用户点击同意返回信息
json 数据格式
返回信息示例
{"code":"0", "data":"{"encryptedData":"k3yMy/IHZ2rru7IeOLD1hGfx12342ozs0E8ErWTheIb/AX2J606Crvlb+1ZZfkWGeOgSuSGYZbMDnvUs9XH/261I4WCVkgWf3JYdKL6NuAiOgqXgYdM87e2qgxCxHuyPI0UCundXNK98tyS5hbXuvtN7NlmPcF/69uoo3gAm+dwUuIuOeTMVJRC0a830eebdvV6SMG//KymseI4OYdNscTkhnZblRtV/09ppzaqIHiLLHj9lA/EUyS87X5Cg6nsEQZbwbUuYLZDQmw8w8f3LZSPjnBM0uRMJIvqXWKCmMLa+NNTC6TJ2vfoT31rpf47N02suWsGOEPrDdHyrCcNoKvb8XFON6vsR8w/qgNYIGDQyanagnKg8nKq865RL9nyJjkRPw2R7++9Rs3R7z4jAVg8WFuhgL3L8mt69EO5/x9zf65dWICFrpKbMh/xkofBueMdDxLccbzrXmf6jr3Z0MHfCn1dpd/S+9SjalZpgcEkHqERNVat0OuEg8Zn7bttCLiMT59LvU/rPdyjcHSMb29b8n/sszX36cz0de9dUQpk=", "iv":"vZUenkxHRoyYJYDjuxqT3g==", "signature":"ab0984ce5124ca295ade65392fe6a067f4c8661e", "userInfo":"{"nickName":"辰", "gender":"0", "language":"zh_CN", "avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/u9p3ibvl90RpEct1xiauAdX3a12321aVn4JSKJLGgpC763mUVyEeHfqZIHibWA2hibTCqUd6uMruh6mCLZ6qicmhoiaBexAibibPiaic4Td3eib8zcWNh8/132"}", "rawData":"{\"nickName\":\"辰\",\"gender\":0,\"language\":\"zh_CN\",\"city\":\"\",\"province\":\"\",\"country\":\"\",\"avatarUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/u9p3ibvl90RpEct1xiauAdX3a6YibGV12321JSKJLGgpC763mUVyEeHfqZIHibWA2hibTCqUd6uMruh6mCLZ6qicmhoiaBexAibibPiaic4Td3eib8zcWNh8/132\"}", "errMsg":"getUserInfo:ok"}", "message":"获取用户信息成功"}
*/
Debug.Log("user agree:" + 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_CREATE_USER_INFO_BUTTON)
{
//创建获取用户信息按钮返回失败
}
}
}
# 操作用户信息按钮
操作用户信息按钮接口,包括隐藏,显示,删除上一步创建的用户信息按钮
string actionType = "hide"; //操作类型,show: 显示,hide:隐藏,destroy:删除按钮
DHSDKHelper.userInfoButtonAction(actionType);
# 获取用户信息
如果用户已经授权过个人信息给小游戏,开发者可以把用户的个人信息记录在业务后台;但用户有可能修改昵称头像,为了保证个人信息不出现过期失效的情况,需要再次获取用户信息,可以调用本接口直接获取。
调用接口:
//获取微信小游戏用户信息
string param = DHSDKHelper.DHJsonParam.Builder()
.put("withCredentials", "true") //选传,获取个人信息时是否携带登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData、iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData、iv 等敏感信息
.put("lang", "zh_CN") //选传,描述用户信息的语言 en - 英文 zh_CN - 简体中文 zh_TW - 繁体中文
.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)
{
/**
获取用户信息成功后 返回调用
示例
{"code":"0", "data":"{"encryptedData":"k3yMy/IHZ2rru7IeOLD1hGfx12342ozs0E8ErWTheIb/AX2J606Crvlb+1ZZfkWGeOgSuSGYZbMDnvUs9XH/261I4WCVkgWf3JYdKL6NuAiOgqXgYdM87e2qgxCxHuyPI0UCundXNK98tyS5hbXuvtN7NlmPcF/69uoo3gAm+dwUuIuOeTMVJRC0a830eebdvV6SMG//KymseI4OYdNscTkhnZblRtV/09ppzaqIHiLLHj9lA/EUyS87X5Cg6nsEQZbwbUuYLZDQmw8w8f3LZSPjnBM0uRMJIvqXWKCmMLa+NNTC6TJ2vfoT31rpf47N02suWsGOEPrDdHyrCcNoKvb8XFON6vsR8w/qgNYIGDQyanagnKg8nKq865RL9nyJjkRPw2R7++9Rs3R7z4jAVg8WFuhgL3L8mt69EO5/x9zf65dWICFrpKbMh/xkofBueMdDxLccbzrXmf6jr3Z0MHfCn1dpd/S+9SjalZpgcEkHqERNVat0OuEg8Zn7bttCLiMT59LvU/rPdyjcHSMb29b8n/sszX36cz0de9dUQpk=", "iv":"vZUenkxHRoyYJYDjuxqT3g==", "signature":"ab0984ce5124ca295ade65392fe6a067f4c8661e", "userInfo":"{"nickName":"辰", "gender":"0", "language":"zh_CN", "avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/u9p3ibvl90RpEct1xiauAdX3a12321aVn4JSKJLGgpC763mUVyEeHfqZIHibWA2hibTCqUd6uMruh6mCLZ6qicmhoiaBexAibibPiaic4Td3eib8zcWNh8/132"}", "rawData":"{\"nickName\":\"辰\",\"gender\":0,\"language\":\"zh_CN\",\"city\":\"\",\"province\":\"\",\"country\":\"\",\"avatarUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/u9p3ibvl90RpEct1xiauAdX3a6YibGV12321JSKJLGgpC763mUVyEeHfqZIHibWA2hibTCqUd6uMruh6mCLZ6qicmhoiaBexAibibPiaic4Td3eib8zcWNh8/132\"}", "errMsg":"getUserInfo:ok"}", "message":"获取用户信息成功"}
*/
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)
{
//获取用户信息返回失败
}
}
}
# 2.5 支付
对于需要开通支付的小游戏,可以选择合适的支付方式进行接入。SDK支持的支付方式如下所示:
- midas: 小游戏内米大师支付(注意,该支付方式仅支持Android设备)
- customer-service: 跳转小游戏客服支付
注意,由于微信的策略限制,在iOS环境下小游戏内不能直接进行支付,包括:
- iOS环境下小游戏内无法直接发起虚拟支付(即米大师支付,安卓环境下无此限制);
- iOS环境下使用跳转小程序进行支付时,小程序一旦被封禁,将导致无法充值。
如果小游戏内支付需对Android或iOS等环境做区分处理,请自行参阅微信开放接口进行判断,或者根据 DHSDKHelper.query("system.platform") 返回值进行判断。
调用接口:
DHSDKHelper.DHSDKPayInfo payInfo = new DHSDKHelper.DHSDKPayInfo();
payInfo.AreaId = "100"; //选传,游戏大区ID,若游戏无大区概念,可不填,需要数字内容的字符串,且长度不可超过int32
payInfo.AreaName = "1"; //选传,游戏大区名称,若游戏无大区概念,可不填,默认值为 1
payInfo.RoleId = "1"; //选传,角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
payInfo.RoleName = "1"; //选传,角色昵称
payInfo.RoleLevel = "1"; //选传,角色等级,若游戏无角色等级概念,可传关卡或vip等级
payInfo.CardMessageImage = ""; //选传,进入微信客服会话时,会话窗口右下角浮动消息卡片的图片路径,仅在使用跳转小游戏客服支付时必填(设计制作一张引导玩家充值的图片并上传至CDN,引用图片CDN地址即可)
payInfo.CardMessageTitle = "title"; //选传,进入微信客服会话时,会话窗口右下角浮动消息卡片的标题,仅在使用跳转小游戏客服支付时必填(建议填写当前所购物品的中文名称,如:我要充值68元首充礼包)
payInfo.Rate = "10"; //必传,游戏币兑换汇率,用于计算游戏币购买数量;例如:后台配置为 1:10,则 rate 为 10;可登录《微信公众平台》后台,进入“功能 > 虚拟支付 > 基本配置 > 游戏币配置”栏目中查看
payInfo.ItemId = "123"; //必传,商品ID
payInfo.ItemName = "goods"; //必传,商品名称
payInfo.ItemNum = "1"; //选传,商品数量,默认值为 1
payInfo.ItemPrice = "600"; //必传,商品单价,单位为分,请注意换算!!!
payInfo.Currency = "CNY"; //选传,货币类型,默认为 CNY
payInfo.Ios = "h5"; //选传,iOS设备中使用的支付方式,可选值为 h5
payInfo.Android = "midas"; //选传,Android设备中使用的支付方式,可选值为 h5、midas
payInfo.Windows = "midas"; //选传,Windows设备中的支付方式,可选值为 h5、midas
payInfo.Devtools = "midas"; //选传,微信小游戏开发者工具中使用的支付方式,可选值为 h5、midas
payInfo.Mac = "h5"; //选传,macOS设备中使用的支付方式,可选值为 h5(暂不支持打开小游戏,此选项可忽略)
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)
{
//支付失败
}
}
}
# 2.6 广告
当前SDK支持在小游戏内创建并嵌入激励视频广告,接入之前需登录《微信公众平台》后台,进入"推广 > 流量主 > 广告管理 > 广告位管理",新建"激励广告"并获取广告位ID。
可在游戏初始化后调用创建广告接口,提前拉取广告,每个广告单元只需创建一次即可,后续可多次拉取和播放广告,创建时会自动拉取一次广告视频。
# 创建激励视频广告实例
//创建广告实例,可以创建多个广告实例,使用adUnitId 来判断区分
Dictionary<string, string> adInfo = DHSDKHelper.DHParam.Builder()
.put("adUnitId", "asdcv123123") //必传,广告位ID
.put("event_type", "createAd") // 必传,createAd 创建广告实例,loadAd 加载广告,couldPlayAd 是否可以播放 playAd 播放广告
.put("adPlatform", "weixin") //选传,广告平台
.put("adPosition", "") //选传,广告展示位置,预留参数,有就填写
.toDictionary();
DHSDKHelper.playAd(adInfo, mUnionSdkCallback);
# 加载广告视频
用于加载激励视频广告;一般情况下,创建广告后,广告数据会默认加载一次,如果拉取失败,可在适当位置重新加载。
//加载广告,根据广告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);
# 判断是否能播放广告
//判断是否能播放广告,根据广告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);
# 播放广告
//播放广告,根据广告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);
# 广告回调接口
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();
}
}
}
# 2.7 数据统计相关接口
为了针对小游戏上线或买量投放后,能够更精准的分析和评估游戏的业务数据及广告投放效果(如登录、注册、创角及充值等数据表现),小游戏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);
# 自定义事件上报
上报其它自定义事件(除启动、登录、充值等行为以外的自定义事件,如角色升级等);自定义事件的名称、参数无固定格式,非必接,请结合游戏业务需要或运营需求自行上报
调用接口:
/自定义事件上报
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);
# 角色信息上报(SDK内部统计使用)
当有用户登录游戏服成功、创角成功、角色升级(如游戏无角色等级概念,则为关卡等级)、充值成功时,均需调用此接口进行数据上报。
注意:如果需要使用腾讯广告并且记录付费事件,PAY_SUCCESS事件必须接入,需要依赖服务端通知支付成功再调用,客户端回调不准确
调用接口:
//上报角色信息
Dictionary<string, string> roleInfoParamsDic = new Dictionary<string, string>();
roleInfoParamsDic.Add("type", "LOGIN_GAME"); // 必传,上报类型 LOGIN_GAME - 登录游戏服 CREATE_ROLE - 创角 LEVEL_UP - 升级 PAY_SUCCESS – 充值成功
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);
# 2.8 查询接口
用户获取登录后用户信息,系统信息等参数,示例如下
//V2版本
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 deviceId = DHSDKHelper.query("deviceOS"); //设备类型,如minigame_android、minigame_ios、minigame_devtools等
string launchOptions = DHSDKHelper.query("launchOptions");
string query = DHSDKHelper.query("launchOptions.query");
//小游戏的启动参数,详情请参考 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
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)
# 2.9 意见反馈
由于微信的策略限制,跳转意见反馈页面的动作无法由小游戏自制按钮触发,必须使用上述API创建指定按钮,并在点击时自动跳转。但往往小游戏拥有自己的视觉设计体系,而该API创建的按钮不符合美术需求,遇到这种情况可通过以下两种方式解决:
- 设置 type 为 text 时,将按钮文本、边框颜色及背景颜色均置空,以便创建一个视觉透明的按钮,并利用宽高及横纵坐标将其覆盖在小游戏原生按钮上;
- 设置 type 为 image 时,将小游戏的按钮图片素材作为背景图片。
# 创建意见反馈按钮
用于在小游戏内创建意见反馈按钮,并在点击时跳转至意见反馈页面;管理员可登录《微信公众平台》后台,进入"管理 > 用户反馈"栏目中查看或回复用户提交的内容。
调用接口:
string param = DHSDKHelper.DHJsonParam.Builder()
.put("type", "text") // 必传,按钮类型 text - 文本按钮,允许自定义背景色及文本 image - 图片按钮,仅允许设置背景贴图,背景贴图会直接拉伸至按钮的宽高
.put("text", "") // 选传,文本按钮的文本,仅当 type 为 text 时有效
.put("image", "") // 选传,图片按钮的背景图片,仅当 type 为 image 时有效
.put("top", "376") // 必传,按钮左上角纵坐标
.put("left", "100") //必传,按钮左上角横坐标
.put("width", "100") // 必传,按钮宽度
.put("height", "32") //必传,按钮高度
.put("backgroundColor", "#07c160") // 必传,角色所属公会 , 无公会系统,传无
.put("borderWidth", "0") // 必传,按钮边框宽度
.put("borderColor", "#07c160") // 必传,按钮边框颜色,格式为 6 位 16 进制数
.put("borderRadius", "0") //必传,按钮边框圆角
.put("color", "#ffffff") //必传,按钮文本颜色,格式为 6 位 16 进制数
.put("fontSize", "12") //必传,按钮文本字号
.put("textAlign", "center") //必传,按钮文本水平居中方式 left - 居左 center - 居中 right - 居右
.put("lineHeight", "32") //必传,按钮文本行高
.toJson();
DHSDKHelper.createFeedbackButton(param, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst. REQ_CREATE_FEEDBACK_BUTTON)
{
Debug.Log("创建意见反馈成功,用户点击触发");
Debug.Log( resultData);
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst. REQ_CREATE_FEEDBACK_BUTTON)
{
Debug.Log("创建意见反馈按钮失败");
}
}
}
# 操作意见反馈按钮
用于对前面创建的意见反馈按钮进行显示,隐藏,删除等操作
string actionType = "hide"; //操作类型,show: 显示,hide:隐藏,destroy:删除按钮
DHSDKHelper.feedbackButtonAction(actionType);
# 2.10 客服
用于从游戏内跳转至H5客服系统。
调用接口:
//faq相关参数
Dictionary<string, string> paramsDic = new Dictionary<string, string>();
paramsDic.Add("areaId", "1"); //选传,游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
paramsDic.Add("roleId", "111231423"); //选传,角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
paramsDic.Add("roleName", "昵称"); //选传,角色昵称
paramsDic.Add("roleLevel", "1"); //选传,角色等级,若游戏无角色及等级概念,可填关卡等级或不填,默认值为 1
DHSDKHelper.showFAQ(paramsDic,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("打开客服失败");
}
}
}
# 2.11 问卷调查
用于从游戏内跳转至问卷调查页面(小程序版)
调用接口:
Dictionary<string, string> paramsDic = new Dictionary<string, string>();
paramsDic.Add("areaId", "1"); //选传,游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
paramsDic.Add("roleId", "111231423"); //选传,角色ID,若游戏无角色概念,可不填,默认值同 accountId 账号ID
paramsDic.Add("roleName", "昵称"); //选传,角色昵称
paramsDic.Add("roleLevel", "1"); //选传,角色等级,若游戏无角色及等级概念,可填关卡等级或不填,默认值为 1
paramsDic.Add("surveyId", ""); //必传,问卷ID,由相关运营人员负责提供
DHSDKHelper.showSurvey(paramsDic, mUnionSdkCallback);
回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst. REQ_SURVEY)
{
Debug.Log("打开问卷调查成功");
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst. REQ_SURVEY)
{
Debug.Log("打开问卷调查失败");
}
}
}
# 2.12 分享
注意:如果启用腾讯广告,必须接入这个接口,测试前需要手动调用一下才行
# 启用转发或分享按钮(被动分享)
用于启用小游戏右上角菜单中的转发或分享按钮:「转发给朋友」、「分享至朋友圈」,并同步设置其点击时的分享参数。
调用接口:
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.ImageUrlId = ""; //选填,自定义 imageUrl 时,审核通过后其对应的图片编号
miniContent.imagePreviewUrl = ""; //选填,朋友圈的预览图链接,不填时默认使用当前游戏的画面截图
miniContent.imagePreviewUrlId = ""; //选填,自定义 imagePreviewUrl 时,审核通过后其对应的图片编号,详情请查看使用审核通过的转发图片
miniContent.Path = ""; //选填,独立分包路径
string queryStr = DHSDKHelper.DHJsonParam.Builder()
.put("key", "value") //自定义参数
.toJson();
miniContent.Query = queryStr; //选填,自定义查询字符串,必须是json字符串 的格式,可通过 DHSDKHelper.query("launchOptions.query"") 获取 query 查询字符串
DHSDKHelper.share(miniContent, mUnionSdkCallback);
# 主动分享
用于主动唤起微信通讯录列表选择好友进行分享。
调用接口:
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.ImageUrlId = ""; //选填,自定义 imageUrl 时,审核通过后其对应的图片编号
miniContent.Path = ""; //选填,独立分包路径
string queryStr = DHSDKHelper.DHJsonParam.Builder()
.put("key", "value") //自定义参数
.toJson();
miniContent.Query = queryStr; //选填,自定义查询字符串,必须是json字符串 的格式,可通过 DHSDKHelper.query("launchOptions.query"") 获取 query 查询字符串
DHSDKHelper.share(miniContent, mUnionSdkCallback);
# 转发自定义图片
用于打开分享图片弹窗,将自定义图片发送到朋友、收藏或保存到相册,可结合用户截屏场景使用。
调用接口:
DHSDKHelper.DHSDKShareContent miniContent = new DHSDKHelper.DHSDKShareContent();
//转发朋友圈
miniContent.Type = DHSDKHelper.DHSDKShareType.shareType_minigame_shareImageMenu;
miniContent.Platform = DHSDKHelper.DHSDKSharePlatform.Platform_MiniGame;
miniContent.Path = ""; //必填,要分享的图片地址,必须为本地路径或临时路径
DHSDKHelper.share(miniContent, mUnionSdkCallback);
# 分享回调
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SHARE)
{
/**
分享成功
*/
Debug.Log("share info:" + resultData);
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SHARE)
{
//分享失败
}
}
}
# 2.13 游戏对局回放
用于录制游戏画面来生成对局回放,并可以将对局回放分享给朋友,或分享至朋友圈、游戏圈,收到分享链接的微信用户可点击链接查看回放,或进入游戏等。
注意,该功能暂不支持使用微信开发者工具调试,请使用真机预览测试!
# 查询录制相关信息
// 检查是否支持录制游戏画面,返回一个字符串值"true"为是,"false"为否
string isFrameSupported = DHSDKHelper.query("isFrameSupported");
// 检查是否支持录制游戏画面时,同步录制游戏音频信息,返回一个字符串值"true"为是,"false"为否
string isSoundSupported = DHSDKHelper.query("isSoundSupported");
// 检查是否支持调节录制视频的音量,返回一个字符串值"true"为是,"false"为否
string isVolumeSupported = DHSDKHelper.query("isVolumeSupported");
// 检查是否支持调节录制视频的播放速率,返回一个字符串值"true"为是,"false"为否
string isAtempoSupported = DHSDKHelper.query("isAtempoSupported");
# 录制视频相关接口
string param = DHSDKHelper.DHJsonParam.Builder()
.put("action", "create") // 必传,操作字段,create:创建视频回放录制器,addListener:添加监听器,removeListener:取消监听器,start:开始录制,pause:暂停录制,resume:继续录制,stop:结束录制,abort:取消录制
.put("fps", "24") // 选传,action为start的参数,视频帧率(fps)
.put("bitrate", "10000") // 选传,action为start的参数,视频比特率(kbps),最小值 600,最大值 3000
.put("gop", "12") // 选传,action为start的参数,视频关键帧间隔
.put("duration", "7200") // 选传,action为start的参数,视频时长限制,单位为秒;最小值 5,最大值 7200,到达指定时长后不会再录制,但仍然需要手动调用 GameRecorder.stop() 来结束录制
.put("hookBgm", "true") // 选传,action为start的参数,是否录制游戏音效(仅iOS支持)
.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事件名称
start - 录制开始事件
pause - 录制暂停事件
resume - 录制恢复事件
stop - 录制结束事件
abort - 录制取消事件
timeUpdate - 录制时间更新事件,在录制过程中触发该事件
error - 错误事件,当录制和分享过程中发生错误时触发该事件
*/
if(action == "stop")
{
string duration = recordJson["duration"].ToString();
}
else if(action == "timeUpdate")
{
string currentTime = recordJson["currentTime"].ToString();
}
else if(action == "error")
{
string code = recordJson["code"].ToString();
string message = recordJson["message"].ToString();
}
}
}
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事件名称
start - 录制开始事件
pause - 录制暂停事件
resume - 录制恢复事件
stop - 录制结束事件
abort - 录制取消事件
timeUpdate - 录制时间更新事件,在录制过程中触发该事件
error - 错误事件,当录制和分享过程中发生错误时触发该事件
*/ }
}
}
# 分享对局回放
游戏对局回放的分享可以通过调用接口 DHSDKHelper.gameRecordShare 触发,或在用户点击"游戏对局回放分享按钮"时发起。
如果使用接口触发(推荐),则可以支持分享给朋友,或分享至朋友圈、游戏圈。
如果使用分享按钮触发,则需要调用 DHSDKHelper.createGameRecordShareButton 创建游戏对局回放分享按钮,且仅支持分享给朋友。
# 创建分享回放按钮
// 创建录制回放分享按钮
string param = DHSDKHelper.DHJsonParam.Builder()
.put("icon", "") // 选传,按钮图标的 url,支持 http/https 开头的网络资源和 wxfile:// 开头的本地资源,如果不设置则使用默认图标
.put("image", "24") // 选传,按钮背景图片的 url,支持 http/https 开头的网络资源和 wxfile:// 开头的本地资源,如果不设置则使用默认图片
.put("text", "") // 选传,按钮文本
.put("top", "0") // 选传,按钮左上角纵坐标,单位逻辑像素
.put("left", "0") // 选传,按钮左上角横坐标,单位逻辑像素
.put("height", "40") // 选传,按钮高度,最小 40 逻辑像素
.put("paddingLeft", "16") // 选传,按钮的左内边距,最小 16 逻辑像素
.put("paddingRight", "16") // 选传,按钮的右内边距,最小 16 逻辑像素
.put("color", "#ffffff") // 选传,按钮文本颜色,格式为 6 位 16 进制数
.put("fontSize", "17") // 选传,按钮文本字号,最小值 17,最大值 22
.put("iconMarginRight", "8") // 选传,图标和文本之间的距离,最小 8 逻辑像素
.put("path", "") // 选传,分享的对局回放打开后跳转小游戏的独立分包路径
.put("query", "") // 选传,分享的对局回放打开后跳转小游戏的自定义查询字符串
.put("bgm", "") // 选传,对局回放背景音乐的地址
.put("timeRange", "") // 选传,对局回放的剪辑区间,是一个二维数组json字符串,单位毫秒,内部都是字符串,如 "["["1000", "3000"]", "["4000", "5000"]"] "表示剪辑已录制对局回放的 1-3 秒和 4-5 秒最终合成为一个 3 秒的对局回放;对局回放剪辑后的总时长最多 60 秒,即 1 分钟
.put("volume", "1") // 选传,对局回放的音量大小,最小值 0,最大值 1
.put("atempo", "1") // 选传,对局回放的播放速率,只能设置以下几个值:0.3、0.5、1、1.5、2、2.5、3;其中1表示原速播放,小于 1 表示减速播放,大于 1 表示加速播放
.put("audioMix", "false") // 选传,如果原始视频文件中有音频,是否与新传入的 bgm 混音,默认为 false,表示不混音,只保留一个音轨,值为 true 时表示原始音频与传入的 bgm 混音
.toJson();
DHSDKHelper.createGameRecordShareButton(param, mUnionSdkCallback);
# 分享回放按钮操作
//操作录制回放分享按钮
string action = "hide";//操作类型,hide:隐藏,show:显示,destroy:移除
DHSDKHelper.gameRecordShareButtonAction(action);
# 分享回放
//分享录制的回放
string shareParam = DHSDKHelper.DHJsonParam.Builder()
.put("title", "标题") // 选传,分享的对局回放打开后的标题内容
.put("desc", "内容") // 选传,分享的对局回放打开后的描述内容
.put("path", "") // 选传,分享的对局回放打开后跳转小游戏的独立分包路径
.put("query", "") // 选传,分享的对局回放打开后跳转小游戏的自定义查询字符串
.put("bgm", "") // 选传,对局回放背景音乐的地址
.put("timeRange", "") // 选传,对局回放的剪辑区间,是一个二维数组json字符串,单位毫秒,内部都是字符串,如 "["["1000", "3000"]", "["4000", "5000"]"] "表示剪辑已录制对局回放的 1-3 秒和 4-5 秒最终合成为一个 3 秒的对局回放;对局回放剪辑后的总时长最多 60 秒,即 1 分钟
.put("volume", "1") // 选传,对局回放的音量大小,最小值 0,最大值 1
.put("atempo", "1") // 选传,对局回放的播放速率,只能设置以下几个值:0.3、0.5、1、1.5、2、2.5、3;其中1表示原速播放,小于 1 表示减速播放,大于 1 表示加速播放
.put("audioMix", "false") // 选传,如果原始视频文件中有音频,是否与新传入的 bgm 混音,默认为 false,表示不混音,只保留一个音轨,值为 true 时表示原始音频与传入的 bgm 混音
.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());
}
}
}
# 2.14 游戏圈
通过游戏圈组件,可以在小游戏内为用户提供游戏交流、用户互动、反馈收集等社区能力;同时,游戏圈内容也会在微信各场景(例如:发现-游戏)被用户看见。
# 准备事项
在微信官方平台申请相应插件,用于补充小游戏一些额外的游戏圈基础功能。
申请插件权限
登录《微信公众平台》,申请插件权限。
在配置中声明使用插件
在小游戏的 game.json 文件中申明使用插件,如下所示:
"plugins": {
"MiniGameCommon": {
"version": "latest",
"provider": "wxaed5ace05d92b218",
"contexts": [
{
"type": "isolatedContext"
}
]
}
}
基础库最低可用版本
- 请确保游戏基础库最低可用版本不低于 2.0.3(设置路径:《微信公众平台》 > 设置 > 基本设置 > 版本设置 > 基础库最低可用版本),因 createGameClubButton 接口的部分参数要求,这里建议选择不低于 2.30.3 的版本;
- 请在小游戏项目根目录下的
project.config.json配置中,将 libVersion 选项设置为《微信公众平台》后台选择的版本号; - 如果小游戏项目根目录中存在
project.private.config.json配置文件,且其中也包含 libVersion 选项(无则忽略),同样需要将其设置为《微信公众平台》后台选择的版本号。
以上针对基础库最低可用版本的三点说明,请确保设置正确,否则将可能导致游戏圈的部分功能不可用!
# 创建游戏圈入口
用于在小游戏内创建游戏圈按钮,并在点击时跳转至游戏圈主页。
注意,由于微信的策略限制,跳转游戏圈的动作无法由小游戏自制按钮触发,必须使用上述API创建指定按钮,并在点击时自动跳转。但往往小游戏拥有自己的视觉设计体系,而该API创建的按钮不符合美术需求,遇到这种情况可通过以下两种方式解决:
- 设置 type 为 text 时,将按钮文本、边框颜色及背景颜色均置空,以便创建一个视觉透明的按钮,并利用宽高及横纵坐标将其覆盖在小游戏原生按钮上;
- 设置 type 为 image 时,将小游戏的按钮图片素材作为背景图片。
注意,该要求用户客户端基础库版本不低于 2.0.3(若传递了 openlink 参数,则要求用户客户端基础库版本不低于 2.30.3);低于该版本时,调用此接口将弹出升级提示,并返回 undefined,需要游戏研发对返回值做兼容处理!
调用接口:
// 创建游戏圈按钮
string param = DHSDKHelper.DHJsonParam.Builder()
.put("type", "text ") // 必传,按钮类型 text - 文本按钮,允许自定义背景色及文本 image - 图片按钮,仅允许设置背景贴图,背景贴图会直接拉伸至按钮的宽高
.put("icon", "") // 选传,图片按钮的图标,仅当 type 为 image 时有效 green - 绿色图标 white - 白色图标 dark - 有黑色圆角背景的白色图标 light - 有白色圆角背景的绿色图标
.put("image", "") // 选传,图片按钮的背景图片,仅当 type 为 image 时有效
.put("text", "") // 选传,文本按钮的文本,仅当 type 为 text 时有效
.put("top", "0") // 必传,按钮左上角纵坐标
.put("left", "0") // 必传,按钮左上角横坐标
.put("width", "100") // 必传,按钮宽度
.put("height", "32") //必传,按钮高度
.put("backgroundColor", "#07c160") // 必传,角色所属公会 , 无公会系统,传无
.put("borderWidth", "0") // 必传,按钮边框宽度
.put("borderColor", "#07c160") // 必传,按钮边框颜色,格式为 6 位 16 进制数
.put("borderRadius", "0") //必传,按钮边框圆角
.put("color", "#ffffff") //必传,按钮文本颜色,格式为 6 位 16 进制数
.put("fontSize", "12") //必传,按钮文本字号
.put("textAlign", "center") //必传,按钮文本水平居中方式 left - 居左 center - 居中 right - 居右
.put("lineHeight", "32") //必传,按钮文本行高
.put("openlink", "") //选传,设置后可以跳转到对应的活动页面,可登录《微信公众平台》后台,进入“功能 > 游戏运营工具箱 > 游戏圈 > 管理”,由帖子或话题的"游戏内跳转ID"生成;不设置时默认跳转至游戏圈主页(注意,该参数必须设置为真实有效的值,没有的情况下请直接去除该参数,不允许留空,否则将导致点击按钮时报错)
.put("hasRedDot", "true") //选传,当传递了openlink 值时,此字段生效,决定创建的按钮是否显示红点
.toJson();
DHSDKHelper.createGameClubButton(param, mUnionSdkCallback);
按钮点击调用回调:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_CREATE_GAME_CLUB_BUTTON)
{
Debug.Log("游戏圈按钮点击打开游戏圈");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_CREATE_GAME_CLUB_BUTTON)
{
Debug.Log("创建游戏圈按钮失败,或者游戏圈按钮点击打开游戏圈失败");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
}
# 游戏圈按钮操作
用于操作游戏圈入口按钮,包括显示,隐藏和移除
//操作游戏圈按钮
string gameClubAction = "hide";//游戏圈操作类型,show:显示,hide:隐藏,destroy:移除
DHSDKHelper.gameClubButtonAction(gameClubAction);
# 游戏圈分享
分享网络图片到游戏圈
//分享网络图片到游戏圈
string param = DHSDKHelper.DHJsonParam.Builder()
.put("type", "image") // 必传,分享类型,image:网络图片分享,canvas:canvas分享
.put("title", "") // 选传,分享标题
.put("content", "") // 必传,分享文案
.put("url", "") // 选传,分享图片的网络路径,其对应的域名需要添加至“服务器域名(downloadFile 合法域名)”中
.toJson();
DHSDKHelper.gameClubShare(param, mUnionSdkCallback);
分享Canvas截图到游戏圈
//分享Canvas截图到游戏圈
string param2 = DHSDKHelper.DHJsonParam.Builder()
.put("type", "canvas") // 必传,分享类型,image:网络图片分享,canvas:canvas分享
.put("title", "") // 选传,分享标题
.put("content", "") // 必传,分享文案
.put("x", "0") // 选传,截取 canvas 的左上角横坐标
.put("y", "0") // 选传,截取 canvas 的左上角纵坐标
.put("width", "") // 选传,截取 canvas 的宽度
.put("height", "") // 选传,截取 canvas 的高度
.put("destWidth", "") // 选传,目标文件的宽度,会将截取的部分拉伸或压缩至该数值
.put("destHeight", "") // 选传,目标文件的高度,会将截取的部分拉伸或压缩至该数值
.put("fileType", "png") // 选传,目标文件的类型 png - PNG图片 jpg - JPG图片
.put("quality", "1.0") // 选传,JPG图片的质量,仅当 fileType 为 jpg 时有效;取值范围为 0.0 ~ 1.0,不含 0,不在范围内时视作 1.0
.toJson();
DHSDKHelper.gameClubShare(param2, mUnionSdkCallback);
回调方法:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_SHARE)
{
Debug.Log("游戏圈分享成功");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
string type = gameClubJson["type"];
if(type == "image")
{
//分享网络图片
}
else if(type == "canvas")
{
//分享canvas
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_SHARE)
{
Debug.Log("游戏圈分享失败");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
string type = gameClubJson["type"];
if (type == "image")
{
//分享网络图片
}
else if (type == "canvas")
{
//分享canvas
}
}
}
}
# 推送小游戏动态
//推送小游戏动态
string param = DHSDKHelper.DHJsonParam.Builder()
.put("eventId", "image") // 必传,事件(素材)ID
.put("query", "") // 选传,自定义查询字符串,必须是 key1=val1&key2=val2 的格式
.toJson();
DHSDKHelper.gameClubPushSeed(param, mUnionSdkCallback);
回调方法:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_PUSH_SEED)
{
Debug.Log("推送小游戏动态成功");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_PUSH_SEED)
{
Debug.Log("推送小游戏动态失败");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
}
# 展示R活动
//展示R活动
string param = DHSDKHelper.DHJsonParam.Builder()
.put("offerId", "123123") // 必传,在米大师侧申请的应用ID;可登录《微信公众平台》后台,进入“功能 > 虚拟支付 > 基本配置 > 基本配置”栏目中查看
.put("exchangeRate", "1") // 必传,游戏币兑换比例,表示1人民币可以兑换多少游戏币,可选值为 1、10、100(要跟开通虚拟支付时选择的比例保持一致);请登录《微信公众平台》后台,进入“功能 > 虚拟支付 > 基本配置 > 游戏币配置”栏目中查看
.put("levelList", "[\"1\",\"2\"]") // 选传,标记该用户当前已购买了哪些 level 的礼包
.put("zoneId", "1") // 选传,分区ID
.toJson();
DHSDKHelper.gameClubShowActivity(param, mUnionSdkCallback);
回调方法:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_SHOW_ACTIVITY)
{
Debug.Log("展示R活动成功");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_SHOW_ACTIVITY)
{
Debug.Log("展示R活动失败");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
}
# 获取玩家游戏圈数据
用于在小游戏内获取玩家游戏圈数据,该接口需要在用户授权登录成功后调用。
//获取游戏圈参数
string param = DHSDKHelper.DHJsonParam.Builder()
.put("dataTypeList", "[{\"type\":\"1\",\"subKey\":\"\"},{\"type\":\"3\",\"subKey\":\"\"}]") // 必传,需要获取的数据指标对象数组
.toJson();
DHSDKHelper.gameClubGetData(param, mUnionSdkCallback);
/*参数解析
* dataTypelist为一个json字符串,结构为包含若干Dictionary的数组
* Dictionary中字段说明
type 说明 subKey
1 加入该游戏圈时间,秒级Unix时间戳 无需传入
3 用户禁言状态;0:正常,1:禁言 无需传入
4 当天(自然日)点赞贴子数 无需传入
5 当天(自然日)评论贴子数 无需传入
6 当天(自然日)发表贴子数 无需传入
7 当天(自然日)发表视频贴子数 无需传入
8 当天(自然日)点赞官方贴子数 无需传入
9 当天(自然日)评论官方贴子数 无需传入
10 当天(自然日)发表到本圈子话题的贴子数 传入话题ID,从微信公众平台后台-游戏圈话题管理处获取
*/
回调方法:
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_GET_DATA)
{
Debug.Log("获取游戏圈数据成功");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
var data = gameClubJson["data"];
var signature = data["signature"];//使用 sha1(rawData sessionkey) 得到的字符串,用于校验用户信息
var encryptedData = data["encryptedData"];//包括 GameClubData 在内的加密数据,详见加密数据解密算法
var iv = data["iv"];//加密算法的初始向量
var cloudID = data["cloudID"];//敏感数据对应的云ID,开通云开发的小游戏才会返回,可通过云调用直接获取开放数据
var dataList = data["dataList"];//经过解密处理的 GameClubData 数据
//响应数据 encryptedData 解密后得到的 GameClubData 的结构示例
//{"dataList":[{"dataType":{"type":"1","subKey":""},"value":"1"},{"dataType":{"type":"2","subKey":""},"value":"2"}]}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_GAME_CLUB_GET_DATA)
{
Debug.Log("获取游戏圈数据失败失败");
var gameClubJson = LitJson.JSON.Parse(resultData);
Debug.Log("gameclubJson:" + gameClubJson.ToString());
}
}
}
# 2.15 视频号
# 打开视频号主页
//打开视频号主页
string profileParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "openUserProfile") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("finderUserName", "sph111") // 必选,视频号ID,以“sph”开头的ID,可在视频号助手获取
.toJson();
DHSDKHelper.videoChannelAction(profileParam, mUnionSdkCallback);
# 打开视频号互动页
//打开视频号活动页
string eventParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "openEvent") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("finderUserName", "sph111") // 必选,视频号ID,以“sph”开头的ID,可在视频号助手获取
.put("eventId", "111") // 必选,活动ID
.toJson();
DHSDKHelper.videoChannelAction(eventParam, mUnionSdkCallback);
# 打开视频号视频
//打开视频号视频
string activityParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "openActivity") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("finderUserName", "sph111") // 必选,视频号ID,以“sph”开头的ID,可在视频号助手获取
.put("feedId", "111") // 必选,视频feedId
.toJson();
DHSDKHelper.videoChannelAction(activityParam, mUnionSdkCallback);
# 打开视频号直播
//打开视频号直播
string liveParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "openLive") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("finderUserName", "sph111") // 必选,视频号ID,以“sph”开头的ID,可在视频号助手获取
.put("feedId", "") // 选填,直播feedId,通过 action 为getLiveInfo 方法获取
.put("noticeId", "") // 选填,直播nonceId,通过 action 为getLiveInfo 方法获取
.toJson();
DHSDKHelper.videoChannelAction(liveParam, mUnionSdkCallback);
# 预约视频号直播
//预约视频号直播
string reserveParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "reserveLive") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("noticeId", "") // 必填,预告ID,通过 action 为getLiveInfo 方法获取
.toJson();
DHSDKHelper.videoChannelAction(reserveParam, mUnionSdkCallback);
# 视频号直播预告信息
//视频号直播预告信息
string getLiveNoticeParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "getLiveNoticeInfo") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("finderUserName", "sph111") // 必填,视频号ID,以“sph”开头的ID,可在视频号助手获取
.toJson();
DHSDKHelper.videoChannelAction(getLiveNoticeParam, mUnionSdkCallback);
# 视频号直播信息
//视频号直播信息
string getLiveParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "getLiveInfo") // 必传,视频号方法类型,openUserProfile:打开视频号主页,openEvent:打开视频号活动页,openActivity:打开视频号视频,openLive:打开视频号直播,reserveLive:预约视频号直播,getLiveNoticeInfo:获取视频号直播预告信息,getLiveInfo:获取视频号直播信息
.put("finderUserName", "sph111") // 必填,视频号ID,以“sph”开头的ID,可在视频号助手获取
.put("startTime", "0") // 选填,起始时间,筛选指定时间段的直播;若设置了 endTime,未设置 startTime,则 startTime 默认为 0
.put("endTime", "") // 选填,结束时间,筛选指定时间段的直播;若设置了 startTime,未设置 endTime,则 endTime 默认取当前时间
.toJson();
DHSDKHelper.videoChannelAction(getLiveParam, mUnionSdkCallback);
# 视频号回调
包含打开视频号,获取视频号视频等回调(注意:预约视频号直播接口3.15.5没有回调通知)
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_CHANNEL_ACTION)
{
Debug.Log("视频号操作成功");
var channelJson = LitJson.JSON.Parse(resultData);
Debug.Log("channelJson:" + channelJson.ToString());
string action = channelJson["action"].ToString();
/*
action事件名称
openUserProfile - 打开视频号主页
openEvent - 打开视频号活动页
openActivity - 打开视频号视频
openLive - 打开视频号直播
getLiveNoticeInfo - 获取视频号直播预告信息
getLiveInfo - 获取视频号直播信息
*/
if(action == "openUserProfile")
{
Debug.Log("打开视频号主页成功");
}
else if(action == "openEvent")
{
Debug.Log("打开视频号活动页成功");
}
else if (action == "openActivity")
{
Debug.Log("打开视频号视频成功");
}
else if (action == "openLive")
{
Debug.Log("打开视频号直播成功");
}
else if (action == "getLiveNoticeInfo")
{
Debug.Log("获取视频号直播预告信息成功");
var data = channelJson["data"];
var noticeId = data["noticeId"];//预告ID
var status = data["status"];//预告状态:0 可用、1 取消、2 已用
var startTime = data["startTime"];//开始时间
var headUrl = data["headUrl"];//直播封面
var nickname = data["nickname"];//视频号昵称
var reservable = data["reservable"];//是否可预约
var otherInfos = data["otherInfos"];//除最近的一条预告信息外,其他的预告信息列
}
else if (action == "getLiveInfo")
{
Debug.Log("获取视频号直播信息成功");
var data = channelJson["data"];
var feedId = data["feedId"];//直播feedId
var noticeId = data["noticeId"];//直播nonceId
var description = data["description"];//直播主题
var status = data["status"];//直播状态:2 直播中、3 直播结束
var replayStatus = data["replayStatus"];//直播回放状态:0 未生成、1 已生成、3 生成中、6 已过期
var nickname = data["nickname"];//视频号昵称
var headUrl = data["headUrl"];//视频号头像
var otherInfos = data["otherInfos"];//除最近的一条预告信息外,其他的预告信息列
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_CHANNEL_ACTION)
{
Debug.Log("视频号操作失败");
var channelJson = LitJson.JSON.Parse(resultData);
Debug.Log("channelJson:" + channelJson.ToString());
string action = channelJson["action"].ToString();
/*
action事件名称
openUserProfile - 打开视频号主页
openEvent - 打开视频号活动页
openActivity - 打开视频号视频
openLive - 打开视频号直播
getLiveNoticeInfo - 获取视频号直播预告信息
getLiveInfo - 获取视频号直播信息
*/
}
}
}
# 2.16 订阅消息
# 一次性订阅消息
用于在小游戏内打开订阅消息界面,返回用户订阅消息的操作结果。
//一次性订阅消息
string messageParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "message") // 必传,订阅方法类型,message:一次性订阅消息,systemMessage:系统订阅消息
.put("tmplIds", "[\"tmpid1\",\"tmpid2\"]") // 必选,需要订阅的消息模板 id 集合,一次调用最多可订阅 3 条消息;可登录《微信公众平台》后台,进入“功能 > 订阅消息”栏目中配置及查看消息模板 id,每个 tmplId 对应的模板标题需要不同,否则会被过滤
.toJson();
DHSDKHelper.subscribeAction(messageParam, mUnionSdkCallback);
# 系统订阅消息
用于在小游戏内打开系统订阅消息界面,返回用户订阅消息的操作结果。
//系统订阅消息
string systemParam = DHSDKHelper.DHJsonParam.Builder()
.put("action", "systemMessage") // 必传,订阅方法类型,message:一次性订阅消息,systemMessage:系统订阅消息
.put("msgTypeList", "[\"SYS_MSG_TYPE_INTERACTIVE\"]") // 必选,系统订阅消息类型列表,一次调用最多可订阅 3 条消息 SYS_MSG_TYPE_INTERACTIVE - 好友互动提醒 SYS_MSG_TYPE_RANK - 排行榜好友超越提醒 SYS_MSG_TYPE_WHATS_NEW - 游戏更新提醒,基础库 2.32.1 版本开始支持
.toJson();
DHSDKHelper.subscribeAction(systemParam, 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 == "systemMessage")
{
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();
string code = subscribeJson["code"].ToString();
/*
action事件名称
message - 一次性订阅消息
systemMessage - 系统订阅消息
*/
}
}
}
# 2.17 获取玩家基础信息 (当前仅冰柠乐渠道使用)
用于获取玩家基础信息,如 openId、adFlag 等,需在登录成功后调用,一般在上架至冰柠乐渠道时必接。
调用接口:
//获取玩家基础信息
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "getUserData")
.put("event_key", "")
.put("jsonstring", "")
.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["event_type"].ToString();
/*
event_type事件名称
getUserData - 获取玩家基础信息
*/
if(event_type == "getUserData")
{
string openId = execJson["openId"].ToString(); //用户在微信侧的唯一标识(openId)
string adFlag = execJson["adFlag"].ToString(); //用户来源 0 - 自然量 1 - 广告量 unknown - 未知
}
}
}
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["event_type"].ToString();
/*
event_type事件名称
getUserData - 获取玩家基础信息
*/
if(event_type == " getUserData")
{
}
}
}
}
# 2.18 内容安全识别(当前仅冰柠乐渠道使用)
包含文本内容安全识别,图片内容安全识别,视频内容安全识别
调用接口:
//文本内容安全识别
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("msg", "") //必传,待检测的文本内容
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "checkMsgSecurity")
.put("event_key", "")
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//图片内容安全识别
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("imgPath", "") //必传,待检测的图片路径(本地路径)
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "checkImgSecurity")
.put("event_key", "")
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//音频内容安全识别
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("mediaUrl", "") //必传,待检测的音频地址(网络 URL 地址)
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "checkMediaSecurity")
.put("event_key", "")
.put("jsonstring", 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 sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + sceneJson.ToString());
string event_type = sceneJson["event_type"].ToString();
/*
event_type事件名称
checkMsgSecurity - 文本内容安全识别
checkImgSecurity - 图片内容安全识别
checkMediaSecurity - 音频内容安全识别
*/
if(action == "checkMsgSecurity")
{
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + sceneJson.ToString());
string event_type = sceneJson["event_type"].ToString();
/*
event_type事件名称
checkMsgSecurity - 文本内容安全识别
checkImgSecurity - 图片内容安全识别
checkMediaSecurity - 音频内容安全识别
*/
if(action == "checkMsgSecurity")
{
}
}
}
}
# 2.19 绑定第三方平台
上报信息到指定第三方平台。
调用接口:
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("type", "GRAVITY_ENGINE") //必传,上报类型 GRAVITY_ENGINE - 引力引擎
.put("accountId", "AID123456") //必传,当前用户的数数账户 ID
.put("distinctId", "DID123456") //必传 当前用户的数数访客 ID
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "bindThirdPlatform")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
# 2.20 复制到剪切板
将指定信息复制到剪切板。
调用接口:
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("data", "abcdefg") //必传,复制的内容
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "setClipboard")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
# 2.21 设备方向监听
包含开启设备监听,停止设备监听,设置监听回调
调用接口:
//开启设备回调监听
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("interval", "game") //必传,间隔,game:适用于更新游戏的回调评率,20ms/次左右;ui:适用于更新UI的回调频率,60ms/次左右;normal:普通的回调频率,200ms/次左右
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "startDeviceMotionListening")
.put("event_key", "")
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//停止设备监听
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "stopDeviceMotionListening")
.put("event_key", "")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//设置监听回调
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "onDeviceMotionChange")
.put("event_key", "")
.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 sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + sceneJson.ToString());
string event_type = sceneJson["event_type"].ToString();
/*
event_type事件名称
startDeviceMotionListening
- 开启设备监听
stopDeviceMotionListening
- 停止设备监听
onDeviceMotionChange
- 设备监听回传结果
*/
if(action == "onDeviceMotionChange")
{
//设备变化回调通知
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + sceneJson.ToString());
string event_type = sceneJson["event_type"].ToString();
/*
event_type事件名称
startDeviceMotionListening
- 开启设备监听
stopDeviceMotionListening
- 停止设备监听
onDeviceMotionChange
- 设备监听回传结果
*/
if(action == "onDeviceMotionChange")
{
}
}
}
}
# 2.22 图片预览
传入图片url,展示预览的图片,仅支持2.18.0以上微信版本
调用接口:
//开启设备回
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("interval", "game") //必传,间隔,game:适用于更新游戏的回调评率,20ms/次左右;ui:适用于更新UI的回调频率,60ms/次左右;normal:普通的回调频率,200ms/次左右
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "startDeviceMotionListening")
.put("event_key", "")
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//停止设备监听
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "stopDeviceMotionListening")
.put("event_key", "")
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
//设置监听回调
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "onDeviceMotionChange")
.put("event_key", "")
.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 sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + sceneJson.ToString());
string event_type = sceneJson["event_type"].ToString();
/*
event_type事件名称
startDeviceMotionListening
- 开启设备监听
stopDeviceMotionListening
- 停止设备监听
onDeviceMotionChange
- 设备监听回传结果
*/
if(action == "onDeviceMotionChange")
{
//设备变化回调通知
}
}
}
else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
// 所有接口失败返回调用逻辑 所有失败信息请游戏接入方测试时log打印记录并反馈给sdk方 方便排查问题
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var sceneJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + sceneJson.ToString());
string event_type = sceneJson["event_type"].ToString();
/*
event_type事件名称
startDeviceMotionListening
- 开启设备监听
stopDeviceMotionListening
- 停止设备监听
onDeviceMotionChange
- 设备监听回传结果
*/
if(action == "onDeviceMotionChange")
{
}
}
}
}
# 2.23 获取本地图片
拍摄或从手机相册中选择图片或视频
调用接口:
//获取本地图片
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("count", "1") //选填,最多可以选择的文件个数,基础库2.25.0前,最多可支持9个文件,2.25.0及以后最多可支持20个文件
.put("maxDuration", "10") //选填,所选视频的最大时长,单位秒
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "chooseMedia")
.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事件名称
chooseMedia
- 本地拍照或相册选择
*/
if(event_type == "chooseMedia")
{
string type = execJson["type"].ToString(); //文件类型,有效值有 image 、video、mix
var tempFiles = execJson["tempFiles"]; //本地临时文件列表
var selectFile = tempFiles[0]; //第一个文件,一般第一个
string tempFilePath = selectFile["tempFilePath"].ToString(); //本地临时文件路径 (本地路径)
string size = selectFile["size"].ToString(); //本地临时文件大小,单位 B
string duration = selectFile["duration"].ToString(); //视频的时间长度
string height = selectFile["height"].ToString(); //视频的高度
string width = selectFile["width"].ToString(); //视频的宽度
string thumbTempFilePath = selectFile["thumbTempFilePath"].ToString(); //视频缩略图临时文件路径
string fileType = selectFile["fileType"].ToString(); //文件类型;image:图片 video:视频
}
}
}
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 ["method"].ToString();
/*
event_type事件名称
chooseMedia
- 本地拍照或相册选择
*/
if(action == "chooseMedia")
{
}
}
}
}
# 2.24 打开SVIP
用于从游戏内跳转至SVIP会员中心;SVIP会员中心是一个增值服务系统,为玩家提供专属特权和服务,如充值、礼包、代金券及专属客服等。
调用接口:
//打开SVIP
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("cardMessageTitle", "title") //必传,进入微信客服会话时,会话窗口右下角浮动卡片的标题,如:点击下方链接进入SVIP
.put("cardMessageImage", "https://xxx.png") //必传,进入微信客服会话时,会话窗口右下角浮动卡片的图片路径;建议设计制作一张引导点击的图片并上传至CDN,引用图片CDN地址即可,点击查看图片样例
.put("areaId", "1") //选传 游戏大区ID,若游戏无大区概念,可不填,默认值为 1,表示初始大区编号
.put("roleId", "123") //必传 角色ID
.put("roleName", "name") //必传 角色昵称
.put("roleLevel", "1") //选传 角色等级,若游戏无角色及等级概念,可填关卡等级或不填,默认值为 1
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "openSvip")
.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事件名称
openSvip
- 打开SVIP
*/
if(event_type == "openSvip")
{
//打开SVIP成功
}
}
}
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 ["method"].ToString();
/*
event_type事件名称
openSvip
- 打开SVIP
*/
if(action == "openSvip")
{
}
}
}
}
# 2.25 设置收藏
注意:如果启用腾讯广告,必须接入这个接口,测试前需要手动调用一下才行
用于启用游戏右上角•••菜单中的「收藏」按钮,并同步设置其点击时的收藏参数;建议在SDK初始化完成后立即调用此接口进行设置。
调用接口:
string jsonStr = DHSDKHelper.DHJsonParam.Builder()
.put("title", "") //选传,收藏标题,不填时默认使用当前游戏的名称
.put("imageUrl", "https://xxx.png") //选传,转发时显示的图片链接,可以是网络图片路径,或本地图片文件路径,亦或相对代码包根目录的图片文件路径,建议长宽比为 5:4,不填时默认使用当前游戏的ICON图标
.put("query", "{\"key1\":\"val1\",\"key2\":\"val2\"}") //选传,收藏时携带的额外参数,Dictionary转的json字符串;从收藏进入游戏后,可通过 DHSDKHelper.query("launchOptions.query")获取该信息
.put("disableForward", "false") //选传,禁止收藏后长按转发,默认为 false
.toJson();
string jsonParamStr = DHSDKHelper.DHJsonParam.Builder()
.put("pluginName", "tools")
.put("pluginType", "platform")
.put("methodName", "setFavorite")
.put("methodParam", jsonStr)
.toJson();
DHSDKHelper.exec(jsonParamStr, mUnionSdkCallback);
# 2.26 清理缓存并重启小游戏
点击弹出确认框,同意后清理缓存并重启微信小游戏。
调用接口:
//清理缓存并重启小游戏
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);
其它功能、类型具体可以参考 UIMain.CS 文件
← PC 通用 SDK 接入 抖音小游戏模块 →