跳到主要内容

基本接口调用

接入须知

接入方用于统一接收Union SDK回调结果,通过onDHSDKResult()接收回调数据。 此回调尽量只创建一个统一处理所有功能的回调

信息

每个接口传入的回调对象,需要实现onDHSDKResult(requestCode, resultCode, resultData)处理回调。

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 游戏优先使用此回调
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);

// 初始化结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_INIT) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 初始化成功
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 初始化失败
}
}
// 屏幕变化通知
else if (requestCode == DHSDKHelper.DHSDKConst.REQ_SCREEN_CHANGED) {
if(resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 屏幕变化成功
// resultData示例:{"width":1920,"height":1080}
} else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 屏幕变化失败
}
}
}

public void onDHSDKResult(String requestCode, int resultCode, String resultData) {
// 此回调是为解决安卓模型机型上 requestCode 回调总是为0异常
// 此回调只有「安卓」会调用,游戏如果使用此接口需要判断是否是安卓手机,可以使用query接口判断
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
}
}

回调参数相应类型如下:

参数类型说明
requestCodeIntDHSDKConst.REQ_INIT初始化
DHSDKConst.REQ_EXIT退出游戏
DHSDKConst.REQ_LOGIN登录游戏
DHSDKConst.REQ_LOGIN_OUT退出登录
DHSDKConst.REQ_PAY支付
DHSDKConst.REQ_LINK游客账号绑定
105折叠屏幕变化
resultCodeIntDHSDKConst.RET_OK成功标志
DHSDKConst.RET_FAIL失败标志
resultDataString根据不同请求类型返回处理数据

1、初始化(必接)

SDK初始化是游戏或应用接入的第一个接口,SDK支持的所有登录支付、分享等插件都会在初始化时统一初始化,请接入者在初始化成功后进行其他插件接口调用

初始化示例:

// 全局回调对象
private static DHUnionSdkCallback mUnionSdkCallback = new DHUnionSdkCallback();

// 调用初始化接口
DHSDKHelper.init(mUnionSdkCallback);

插件表:

  1. 登录支付插件
  2. 数据统计插件
  3. 分享插件
  4. 广告插件
  5. 客服插件
  6. 推送通知插件
  7. 语音插件

返回成功数据:

init ok: { [1 : init ok] [2 : operation ok] [3 : No.3 plugin empty ] [4 : No.4 plugin empty ] [5 : No.5 plugin empty ] [6 : No.6 plugin empty ] [7 : No.7 plugin empty ] [8 : No.8 plugin empty ] }

返回失败数据:

init fail: { [1 : No.1 plugin empty] [2 :No.2 plugin empty] [3 : No.3 plugin empty ] [4 : No.4 plugin empty ] [5 : No.5 plugin empty ] [6 : No.6 plugin empty ] [7 : No.7 plugin empty ] [8 : No.8 plugin empty ] }

2、登录接口(必接)

调用代码示例:

DHSDKHelper.login(mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 登录结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LOGIN) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 登录成功
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 登录失败
}
}
}
}

返回的结果数据示例:

登录失败:

错误描述,纯字符串

登录成功:

{
"account": "kra***@dianhun.cn",
"accountid": "1696674719",
"accountview": "kra***@dianhun.cn",
"bindChannel": "[]",
"guestid": "",
"logintype": "LoginType_Quick_Visitor",
"memo": "",
"mobileinfo": "6e9ac84b95cf62f6ae2c9f9c732bdfdb",
"region": "1",
"sign": "175251494bfe238d566eebf35463c2d2",
"timestamp": "1583229600",
"token": "dae3fe2ead24a42d98f7d1e3e3048ef3",
"userinfo": { // 如果不是qq、wechat或者facebook等授权登录或者是国内防沉迷开启 此字段值可能为空json
"nickname": null,
"headimgurl": null,
"channel": 0,
"roleBindPhonePopValue":1, //登录后是否弹出绑定手机框,1:弹出,0:不弹出
"roleBindPhonePopLevel":-1, //弹出手机绑定框级别
"indulge": { // 国内防沉迷具体信息 国内游戏没有开启防沉迷时 此字段不存在 海外游戏登录数据没有此字段
"realNameAuthLevel": 1,
"indulgeLevel": 2,
"bindPhone": 0,
"indulge": 0,
"isRealNameAuth": 0, // 是否实名(0:未实名,1:实名)
"isAdult": 0, // 是否成年(0:未成年,1:成年
"age": 0,
"heartbeatValue": 1,
"sdkInfo": null,
"gameTime": 60 // 单位分钟 用户每天可以游戏时长,此时长为0时用户可能已经实名并且已成年或是渠道实名时无法判断
}
}
}
参数类型说明
tokenString登录凭证
logintypeString登录类型 当登录类型为LoginType_Quick_Visitor 需要调用账号绑定接口 ; 其他类型接入方不需处理, 直接传给服务器
accountidString账号ID 进行角色关联 相关数据查询时使用
accountString账号名称
guestidString兼容旧游客字段,请忽略
mobileinfoString兼容旧游客字段,请忽略
signString参考服务器文档
timestampString参考服务器文档
memoStringmemo为sdk传给客户端的自定义信息, 无须传给服务器验证
bindChannelString当前游客账号绑定的渠道号
userinfojson官方渠道包时返回 , 返回信息为 昵称 头像、防沉迷信息等 .
警告

guestid目前已经废弃使用,由于兼容老版本才做保留。请开发者全部使用accountid,无论游客或账号登录或三方登录

警告

SDK登录成功返回用户accountid、token等信息后,游戏还需要去服务端校验这些信息,如果检验失败,需要调用SDK的logout接口,再根据情况重新调用SDK的登录接口,以防出现一直登录不上的问题。

注意

不建议游戏在SDK登录成功后一直缓存SDK的账号信息用于再次登录,否则一旦账号信息过期了会有一定可能导致玩家登录验证不通过无法登录,需要重启游戏等操作才行。

3、上报角色(必接)

注意

设置角色数据:在创角、登录、退出、升级时需要调用;请注意:是在触发动作成功后上报。

string type = "LOGIN_GAME"; //登录游戏
string param = DHSDKHelper.DHJsonParam.Builder()
.put("zoneId", "1") // 大区ID。纯数字,若无值则传入"1"
.put("areaId", "100") // 大区下的服务器ID,纯数字
.put("areaName", "国服一区") // 大区名称
.put("roleId", "100002") // 角色ID
.put("roleName", "kraity") // 角色名称
.put("roleLevel", "1") // 角色等级,纯数字
.put("roleVipLevel", "0") // VIP等级,纯数字,若无VIP系统传"0"
.put("userGuild", "无") // 角色所属公会,纯文本,无公会系统则传"无"
.put("roleBalance", "0") // 角色虚拟币余额,纯数字,若无值则传入"0"
.put("roleCTime", "1583229600") // 游戏角色创建时间,纯数字,时间戳(尽量秒级),若无值则传入"0"
.toJson();

DHSDKHelper.setGameUserInfo(type, param);

上报类型如下:

typevalue
创建角色成功CREATE_ROLE
角色升级成功LEVEL_UP
登录游戏成功LOGIN_GAME
退出游戏成功EXIT_GAME

4、支付接口(必接)

注意

接入支付之前须先完成接入上报角色,否则拉起支付时出现异常。

须知

金额参数price必须以分为单位。国内是CNY(单位分),海外是USD(单位美分)!

Google Play 订阅类型的商品道具proId必须以.googlesubs为后缀(例如com.dh.test.googlesubs),否则无法正常订阅!

调用代码示例:

DHSDKHelper.DHSDKPayInfo payInfo = new DHSDKHelper.DHSDKPayInfo();

// 必填
payInfo.Uid = "1696674719"; // 用户ID,对应登录返回的accountid参数
payInfo.Uname = "kra***@dianhun.cn"; // 账号名,对应登录返回的account参数
payInfo.RoleId = "0"; // 角色ID,实在无值时不用传入
payInfo.ProId = "com.dh.test"; // 道具商品唯一ID
payInfo.ProNum = "1"; // 商品数量,默认:1
payInfo.Price = "30"; // 金额,必须以分为单位。国内是CNY(单位分),海外是USD(单位美分)!
payInfo.Currency = "CNY"; // 货币类型,国内是CNY,海外是USD
payInfo.ProName = "60钻石"; // 道具商品名称
// 重要参数说明 角色大区id 如果游戏存在大区概念 正式发布游戏时请填入角色大区id 测试环境填100 没有则 测试支付环境下填100 正式发布填1
payInfo.AreaId = "100";

// 可选
// memo透传参数,若是海外cp,为必要参数,传递cp订单号
// 请勿使用JSON字符串或JSON对象转换成的字符串,支付完成后服务器回调时将参数原样返回
payInfo.Memo = "This is gold"; // 附加信息

DHSDKHelper.pay(payInfo, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 支付结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_PAY) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 支付成功
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 支付失败
}
}
}
}
注意

返回的文字信息(resultData)不要直接展示给用户。

支付结果通过DHSDKConst.OKDHSDKConst.FAIL判断是否完成订单,但OK不代表支付成功,仅表示完整支付流程结束。接入方需在本地或服务器验证该笔支付的有效性。

5、退出登录(必接)

注意

某些渠道没有退出登录方法, 该接口会直接返回退出成功的回调。

调用代码示例:

DHSDKHelper.logout(mUnionSdkCallback);
注意

退出登录的是全局回调, 游戏收到退出成功回调时候需要返回到登录界面。接入方必须清理缓存的登录状态,进入游戏前须判断是否已登录,否则会导致串号串服等问题!

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 退出登录结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LOGOUT) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 退出登录成功
// TODO 退出成功后,游戏需要返回到登录界面。接入方必须清理缓存的登录状态,进入游戏前须判断是否已登录,否则导致串号串服等问题!
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 退出登录失败
}
}
}
}

6、退出游戏(必接)

调用代码示例:

DHSDKHelper.exit(mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 许可退出结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXIT) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 许可退出游戏
// 游戏清理资源
// 最后杀死进程
}
}
}
}

7、账号绑定(海外必接)

注意

国内不接入,海外必接。只有游客账号才能绑定渠道账号,国内游客可以绑定QQ,微信等渠道,海外游客可以绑定facebook,google等渠道。

可以通过登录类型判断当前账号是否是游客账号,即登录返回的logintypeLoginType_Quick_Visitor就是游客账号。

温馨提示:请勿在SDK登录过程中调用此接口。该接口应在用户已登录状态下,由游戏方在登录界面中显示绑定账号按钮,当用户主动点击该按钮时,才可调用此接口

调用代码示例:

无参数版,弹出绑定列表

/**
* 游客绑定接口,只有国内或者海外游客登录情况下才能调用
* 无参数版本,调用出来的是选择界面,一般接入方没有特别定制要求。默认国内:qq、wechat;海外:facebook、google等。
*/
DHSDKHelper.link(mUnionSdkCallback);

调用代码示例:

有参数版,绑定指定的渠道

/**
* 游客绑定接口,只有国内或者海外游客登录情况下才能调用
* 有参数版本,指定绑定第账号渠道,例如facebook、google等。
*/
DHSDKHelper.link("facebook", mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 绑定结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LINK) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 绑定成功
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 绑定失败
}
}
}
}

返回的结果数据示例:

参数说明,请参照登录

{
"account": "1696674719",
"accountid": "kra***@dianhun.cn",
"accountview": "kra***@dianhun.cn",
"bindChannel": "",
"guestid": "",
"logintype": "LoginType_QQ",
"memo": "",
"mobileinfo": "",
"region": "1",
"sign": "",
"timestamp": "",
"token": "711ba034c1ca6fc8258cf6be166"
}

8、分享接口(选接)

调用代码示例:

DHSDKHelper.DHSDKShareContent content = new DHSDKHelper.DHSDKShareContent();

// 1、share link
// content.Title = "来《光影对决》跟我一起打爆对面!";
// content.Desc = "我在玩超带感的动漫MOBA,姿势已摆好,来一个会喊666的队友!";
// content.ThumbImage = "/var/mobile/Containers/Data/Application/8A3C7EB1-E592-43ED-A6D2-09C7C989CB35/Documents/imag1.png";//缩略图本地图片文件路径
// content.ThumbImageUrl = "";//缩略图网络图片地址
// content.LinkUrl = " http://m.goodmoba.develop.icodemo.com/app/gy-startgame/?name=20059&type=1&id=20059";
// content.Type = DHSDKHelper.DHSDKShareType.shareType_image;
// content.Platform = DHSDKHelper.DHSDKSharePlatform.Platform_None;
// DHSDKHelper.share (content, mUnionSdkCallback);

// 2、share image
content.Desc = "Description 1";
// content.ThumbImage = "";//缩略图本地图片文件路径
// content.ThumbImageUrl = "";//缩略图网络图片地址
content.Image = "/storage/emulated/0/Download/image.jpg"; //本地图片文件路径
// content.ImageUrl = ""; //网络图片地址
content.Type = DHSDKHelper.DHSDKShareType.shareType_image;
content.Platform = DHSDKHelper.DHSDKSharePlatform.Platform_None;

DHSDKHelper.share(content, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 分享结果
// resultData:返回数据是文字提示
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SHARE) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 分享成功
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 分享失败
}
}
}
}

9、关联手机号(选接)

9.1.1、查询绑定

调用代码示例:

string param = DHSDKHelper.DHJsonParam.Builder()
.put("version", 2) // 若不指定则:version=1
// .put("connect", "bind") //(可选)关联角色登录:默认不传该字段,只收集手机号
.toJson();

DHSDKHelper.queryBindPhone(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 查询结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_QUERY_BIND_PHONE) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 解析数据
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 查询失败
}
}
}
}

请求成功时,示例如下

{"success":"2", "info":"没有绑定手机号码"}
{"success":"1", "info":"已绑定手机号码", "bindPhone":"131****0130"}
参数类型说明
infoString描述结果
successString1=已绑定,2=未绑定,其它失败
bindPhoneString绑定的手机号,131****0130,已绑定时,有此字段

9.1.2、查询是否绑定密保手机

调用代码示例:

string param = DHSDKHelper.DHJsonParam.Builder()
.put("version", 2) // 若不指定则:version=1
// .put("connect", "bind") //(可选)关联角色登录:默认不传该字段,只收集手机号
.toJson();

DHSDKHelper.querySecurityBindPhone(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 查询结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_QUERY_BIND_SECURITY_PHONE) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 解析数据
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 查询失败
}
}
}
}

请求成功时,示例如下

{"success":"2", "info":"没有绑定密保手机号码"}
{"success":"1", "info":"已绑定密保手机号码"}
参数类型说明
infoString描述结果
successString1=已绑定,2=未绑定,其它失败

9.2.1、发送短信(需自制界面)

调用代码示例:

string param = DHSDKHelper.DHJsonParam.Builder()
.put("mobile", "手机号")
.put("version", 2) // 若不指定则:version=1
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
// .put("month", "1") //(可选)是否月度发送短信验证,1:是,其余:否。是的话可以不传mobile字段
.toJson();

DHSDKHelper.sendSMS(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 发送结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_SEND_SMS) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 解析数据
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 发送失败
}
}
}
}

请求成功时,示例如下

{"success":"1", "info":"发送成功"}
{"success":"2", "info":"发送失败"}
参数类型说明
infoString描述信息
successString1=发送成功,2=发送失败,其它失败

9.2.2、绑定手机号码(需自制界面)

调用代码示例:

string param = DHSDKHelper.DHJsonParam.Builder()
.put("code", "验证码")
.put("mobile", "手机号")
.put("version", 2) // 若不指定则:version=1
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
// .put("month", "1") //(可选)是否月度短信验证吗验证,1:是,其余:否。是的话可以不传mobile字段
.toJson();

DHSDKHelper.bindPhone(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 绑定结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_BIND_PHONE) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 解析数据
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 绑定失败
}
}
}
}

请求成功时,示例如下

{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130"}
参数类型说明
infoString描述信息
successString1=绑定成功,2=绑定失败,其它失败
bindPhoneString绑定的手机号,例如:131****0130
{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130", "bindChange":"0","bindAccount":......}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130", "bindChange":"1","bindAccount":......}

绑定多端互通角色时有额外字段,游戏可以根据bindChange判断是否绑定后是新账号。

参数类型说明
bindChangeString绑定后是否新号,例如:1,新账号;0,未变动
bindAccountObject绑定后账号信息,详细数据结构请参考登录接口

9.2.3、绑定密保手机(需自制界面)

调用代码示例:

string param = DHSDKHelper.DHJsonParam.Builder()
.put("version", 2) // 若不指定则:version=1
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
.toJson();

DHSDKHelper.bindSecurityPhone(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 绑定结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_BIND_SECURITY_PHONE) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 解析数据
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 绑定失败
}
}
}
}

请求成功时,示例如下

{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功"}
参数类型说明
infoString描述信息
successString1=绑定成功,2=绑定失败,其它失败

9.3.1、委托发送、绑定(使用统一界面)

委托使用SDK统一界面,仅包含输入手机号发送验证码、输入验证码绑定手机号,不含查询

调用代码示例:

string param = DHSDKHelper.DHJsonParam.Builder()
.put("version", 2)
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
// .put("security", "1") //(可选)绑定成功后是否绑定密保手机,传1则绑定密保手机
.toJson();

DHSDKHelper.delegateBindPhone(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 绑定结果
if (requestCode == DHSDKHelper.DHSDKConst.REQ_BIND_PHONE) {
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
// 解析数据
} else if(resultCode == DHSDKHelper.DHSDKConst.RET_FAIL) {
// 绑定失败
}
}
}
}

请求成功时,示例如下

{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130"}
参数类型说明
infoString描述信息
successString1=绑定成功,2=绑定失败,其它失败
bindPhoneString绑定的手机号,例如:131****0130

绑定多端互通角色时有额外字段,请参考绑定手机号码接口。

参数类型说明
bindChangeString绑定后是否新号,例如:1,新账号;0,未变动
bindAccountObject绑定后账号信息,详细数据结构请参考登录接口

10、配置查询接口(OSS客户端数据中部分字段提供查询)

/**
* 查询sdk信息接口 所有需要向sdk查询的配置数据或者缓存数据都可以通过此接口查询
*/
String dh_channelId = DHSDKHelper.query("dh_channelId"); // 应用包渠道
// 以下展示OSS数据字段都是可以从SDK获取到 未展示的暂不提供获取
String dh_appId = DHSDKHelper.query("dh_appId"); // appid
String dev_os = DHSDKHelper.query("dev_os"); // 设备系统类型
String from_ch = DHSDKHelper.query("dh_channelId"); // 应用包渠道(一级渠道号),比如1058(官网安卓)、1029(小米)、1013(官方iOS)等
String ad_channel = DHSDKHelper.query("dh_mainchannel"); // 二级渠道号(cps主渠道)
String ad_subchannel = DHSDKHelper.query("dh_secochannel"); // 三级渠道号(cps次渠道)
String dev_uuid = DHSDKHelper.query("dev_uuid"); // 设备id

常用Key:

dev_os              设备系统
dev_uuid 设备唯一ID
dev_model 设备型号
dev_brand 设备品牌
login_channelId 登录渠道ID | 示例 1085 | 安卓/苹果Key相同
dh_channelId 渠道编号 | 示例 1058 | 安卓/苹果Key相同(一级渠道)
dh_channelName 渠道名称 | 示例 huaweiv4 | 安卓Key
dh_mainchannel CPS主渠道 | 示例 100001 | 玩家广告来源渠道(二级渠道)
dh_secochannel CPS次渠道 | 示例 100002 | 玩家广告来源渠道(三级渠道)
firebase_messaging_token firebase推送token
dh_mode 国内海外标识 | 国内为"1" ,海外为"0"

直接返回查询内容,类型为string,没有值得情况下会返回空字符。

11、数据统计(必接)

上传各种事件到后台进行统计

/*eventName:
login:登录
appstart:应用开启
pay:支付
logout:登出
ups_delay:ups-延迟,游戏上报
ups_fps:低帧,游戏上报

其它可参考具体的日志文档
其它自定义事件的话则传入自定义的事件名称
*/

/*eventParams:
具体参数可根据日志文档来配置
*/
DHSDKHelper.track(eventName, paramsDic);

11.1、新手引导(选接二级)

Dictionary<string, string> paramsDic = new Dictionary<string, string>();
// 必传参数
paramsDic.Add("track_platform","dianhun"); //固定值:dianhun
paramsDic.Add("zid","1"); //大区ID,若游戏无大区概念,则填1作为初始大区编号,和游戏服务器日志传值保持一致
paramsDic.Add("sid","1"); //大区的下一级,若游戏无服概念,则填1作为初始服编号,和游戏服务器日志传值保持一致
paramsDic.Add("role_id","7812312"); //角色ID,游戏内唯一(不同区服之间也不允许重复),建议纯数字。若游戏无角色概念,则填账号id
paramsDic.Add("step_id","10000"); //引导步骤ID
paramsDic.Add("step_state","2"); //引导步骤状态 1:进行中 2:已完成(不含跳过)3:跳过
// 可选参数
paramsDic.Add("step_type","pvp"); //引导步骤分类
paramsDic.Add("role_level","10"); //角色等级
paramsDic.Add("vip_level","10"); //角色VIP等级
paramsDic.Add("step_param","H001"); //引导步骤参数
paramsDic.Add("extend_param_json","{\"kills\":\"10\",\"deaths\":\"2\",\"assistant\":\"3\"}"); //扩展参数,json格式字符串
DHSDKHelper.track("guidestep", paramsDic);

11.2、按钮日志(选接二级)

Dictionary<string, string> paramsDic = new Dictionary<string, string>();
// 必传参数
paramsDic.Add("track_platform","dianhun"); //固定值:dianhun
paramsDic.Add("button_id","match_001"); //按钮ID
// 可选参数
paramsDic.Add("button_type","match"); //按钮分类
paramsDic.Add("page_id","main_page"); //按钮所在界面ID,用于分析用户操作路径
paramsDic.Add("opt_param","10"); //操作参数,比如是跳转到另外一个页面,就填写结果页ID;匹配按钮则可以填匹配时间
paramsDic.Add("zid","1"); //大区ID,若游戏无大区概念,则填1作为初始大区编号
paramsDic.Add("sid","1"); //大区的下一级,若游戏无服概念,则填1作为初始服编号
paramsDic.Add("role_id","7812312"); //角色ID,游戏内唯一(不同区服之间也不允许重复),建议纯数字。若游戏无角色概念,则填账号id
paramsDic.Add("extend_param_json","{\"online_durt_tot\":\"12020\"}"); //扩展参数,json格式字符串
DHSDKHelper.track("button", paramsDic);

11.3、自定义日志(选接二级)

Dictionary<string, string> paramsDic = new Dictionary<string, string>();
// 必传参数
paramsDic.Add("track_platform","dianhun"); //固定值:dianhun
paramsDic.Add("event","levelUp"); //自定义事件名
// 可选参数
paramsDic.Add("opt_obj","pay_btn"); //操作对象,如果是按钮点击事件,则对应按钮ID
paramsDic.Add("opt_res","real_page"); //操作结果
paramsDic.Add("opt_reason","login"); //操作原因
paramsDic.Add("zid","1"); //大区ID,若游戏无大区概念,则填1作为初始大区编号
paramsDic.Add("sid","1"); //大区的下一级,若游戏无服概念,则填1作为初始服编号
paramsDic.Add("role_id","7812312"); //角色ID,游戏内唯一(不同区服之间也不允许重复),建议纯数字。若游戏无角色概念,则填账号id
paramsDic.Add("extend_param_json","{\"kills\":\"0\",\"deaths\":\"0\",\"assistant\":\"0\"}"); //扩展参数
DHSDKHelper.track("custom", paramsDic);

11.4、流程统计上报(新版三合一接口,包括日志上报、adjust、Firebase)

信息
  1. eventName: 事件ID,详细请参考流程统计事件ID命名规则
  2. eventValue: 必须包含如下三个必填字段和任意自定义键值对
// 流程统计及日志游戏启动就可以上报,无需调用SDK初始化,其他数据统计使用此接口需要SDK初始化
Dictionary<string, string> paramsDic = new Dictionary<string, string>();
// 必传参数
paramsDic.Add("track_platform","log"); // 默认 无需修改
paramsDic.Add("log","dianun test"); // 日志内容 必填
paramsDic.Add("log_level","d"); // d 普通日志或流程统计事件 e异常日志 事件ID数据编号必须为000000开头 必填
paramsDic.Add("key","value");
DHSDKHelper.track("000000::SDK_CLIENT_TEST", paramsDic);

12、客服(选接)

打开客服页面,需要登录后才能打开

/*faqParams:
必传:
nick: 角色昵称
level: 角色等级
role_id:角色id

非必传:
token: sdk login接口 返回json数据中token字段值
userid: sdk login接口 返回json数据中accountid字段值
*/
DHSDKHelper.showFAQ(paramsDic);

示例:

Dictionary<string, string> paramsDic = new Dictionary<string, string>();
paramsDic.Add("nick", "昵称"); //角色昵称,string类型,必填
paramsDic.Add("level", "6"); // 角色等级,string类型纯数字,必填
paramsDic.Add("role_id", "12345678"); //游戏角色id,string类型纯数字,必填

// 可选参数:是否上传指定的Replay文件
// paramsDic.Add("uploads_replay_path", "/yourfilepath.replay"); // 绝对路径
// paramsDic.Add("uploads_replay_alert", "是否上传最近一次录像文件"); // 提示文案(必须指定文案)

DHSDKHelper.showFAQ(paramsDic);

13、Google应用内评价(安卓谷歌包,选接)

// unity  requestCode = 40
string param = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "google")
.put("unionsdk_type", "platform")
.put("event_type", "review")
.toJson();
DHSDKHelper.exec(param,mUnionSdkCallback);

14、合规相关协议接口(国内必接)

14.1、个人信息与隐私保护、个人信息收集清单

警告

示例参数areaIdroleIdserverId必须全部替换为游戏自己的大区ID、角色ID、服务器ID

调用示例:

string jsonStr = DHSDKHelper.DHJsonParam.Builder()              
.put("areaId", "100") // 大区ID
.put("roleId", "1000010000") // 角色ID
.put("serverId", "1") // 服务器ID
.toJson();

/**
event_key
个人信息收集清单:"serviceCenter"
个人信息与隐私保护:"personalInformation"
*/
string param = DHSDKHelper.DHJsonParam.Builder()
.put("event_type", "showWebviewByKey")
.put("event_key", "personalInformation")
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("jsonstring", jsonStr)
.toJson();

DHSDKHelper.exec(param, mUnionSdkCallback);

14.2、用户协议、隐私政策、儿童隐私保护指引和第三方SDK目录共享清单 调用示例:

/**
event_key
网络用户服务协议:"dh_user_server"
网络用户隐私政策:"dh_user_private"
儿童隐私保护指引:"dh_child_private"
第三方SDK目录共享清单:"other_sdk_menu"
*/
string param = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools") // 固定字段
.put("unionsdk_type", "platform") // 固定字段
.put("event_type", "showPolicyDialogByKey") // 固定字段
.put("event_key", "dh_user_server")
.toJson();

DHSDKHelper.exec(param, mUnionSdkCallback);

15、问卷调查(选接)

string jsonStr = DHSDKHelper.DHJsonParam.Builder()              
.put("area_id", "100") // 大区ID
.put("role_id", "1000010000") // 角色ID
.put("server_id", "1") // 服务器ID
.put("level", "8") // 等级
.put("nick", "昵称") // 服务器ID
.put("survey_id", "1011223") // 问卷ID
.put("isLandscape", "0") // "0":竖屏,"1":横屏
.toJson();
string param = DHSDKHelper.DHJsonParam.Builder()
.put("event_type", "showWebviewByKey") //打开相关信息页面
.put("event_key", "questionnaire")
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(param, mUnionSdkCallback);

16、Taptap强制更新接口(选接)

// unity  requestCode = 106
string param = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools")
.put("unionsdk_type", "platform")
.put("event_type", "forceUpdateGame")
.toJson();
DHSDKHelper.exec(param,mUnionSdkCallback);

17、MTR网络检测(选接)

注意

玩家无法连接服务时可调用该接口,正常游戏千万不能调用,否则会带来卡顿。 调用接口之前,游戏最好自定义弹窗提示收集玩家网络信息,可能带来卡顿。玩家同意后再调用

string jsonStr = DHSDKHelper.DHJsonParam.Builder()              
.put("appid", "") // appid
.put("areaid", "") // 大区ID或者服务器ID
.put("uid", "1") // 角色id
.put("host", "www.test.cn") // 服务器域名 例如 www.test.cn,禁止带https或接口路径
.toJson();
string param = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools") //固定字段
.put("unionsdk_type", "platform") //固定字段
.put("event_type", "mtr") //固定字段
.put("event_key", "") //固定字段
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(param, mUnionSdkCallback);

18、邮箱收集(选接)

18.1、打开邮箱收集页面(研发不需要提供收集界面)

string param = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools") //固定字段
.put("unionsdk_type", "platform") //固定字段
.put("event_type", "sendemail") //固定字段
.toJson();
DHSDKHelper.exec(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC) {
try{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
JsonData resultJson = JsonMapper.ToObject(resultData);
if (resultJson.Keys.Contains("event_type"))
{
string eventType = (string)resultJson["event_type"];
if(eventType == "sendemail")
{
//设置成功
}
}
}
}catch(Exception e)
{
Debug.LogError(e.ToString());
}
}
}
}

18.2、上报邮箱信息(研发提供收集界面,前提已收集到用户邮箱)

string jsonStr = DHSDKHelper.DHJsonParam.Builder()              
.put("nickname", "昵称") // 昵称
.put("email", "玩家真实的邮箱") // 邮箱信息
.toJson();

string param = DHSDKHelper.DHJsonParam.Builder()
.put("plugin_type", "tools") //固定字段
.put("unionsdk_type", "platform") //固定字段
.put("event_type", "sendemail") //固定字段
.put("jsonstring", jsonStr)
.toJson();
DHSDKHelper.exec(param, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC) {
try{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
JsonData resultJson = JsonMapper.ToObject(resultData);
if (resultJson.Keys.Contains("event_type"))
{
string eventType = (string)resultJson["event_type"];
if(eventType == "sendemail")
{
//设置成功
}
}
}
}catch(Exception e)
{
Debug.LogError(e.ToString());
}
}
}
}

19、推送接口

注意

国内:因国内合规政策原因无法使用推送功能;

海外:默认使用Firebase推送,研发无需额外接入,开放平台打包自动打入,如需定制推送主题可接入如下方法。

19.1、订阅推送主题

DHSDKHelper.setAlias("subtheme");

alias: 订阅的主题名称

19.2、取消订阅主题

DHSDKHelper.delAlias("subtheme");

alias: 已订阅过的主题名称

20、广告接口

播放广告相关接口

Dictionary<string, string> adInfo = DHSDKHelper.DHParam.Builder()
.put("uid", "123456") //广告位id
.put("adType", "1") // 广告类型
.put("event_type", "couldPlayAd") // couldPlayAd 是否可以播放 playAd 播放广告
.toDictionary();

DHSDKHelper.playAd(adInfo, mUnionSdkCallback);

回调对象示例如下:

public class DHUnionSdkCallback: DHSDKHelper.IDHSDKUnityCallback {
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD) {
//播放广告回调
try{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
JsonData resultJson = JsonMapper.ToObject(resultData);
}
}catch(Exception e)
{
Debug.LogError(e.ToString());
}
}
else if (requestCode == DHSDKHelper.DHSDKConst.REQ_AD_READY){
//广告是否准备好回调
try{
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK) {
JsonData resultJson = JsonMapper.ToObject(resultData);

}
}catch(Exception e)
{
Debug.LogError(e.ToString());
}
}
}