# 其他接口
# 1、邮箱收集
# 1.1、创建回调对象
import org.json.JSONObject;
import com.dh.callback.IDHSDKCallback;
IDHSDKCallback sendEmailCallback = new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_EXEC:
if (resultCode == DHSDKConst.RET_OK) {
// 成功结果
try {
// {"methodName":"sendemail","data":"设置成功"}
JSONObject callback = new JSONObject(resultData);
switch (callback.optString("methodName")) {
case "sendemail": { // 固定
Object data = callback.opt("data");
}
}
} catch (Throwable e) {
e.printStackTrace();
}
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 失败结果
}
break;
default:
// 其他结果
break;
}
}
}
# 1.2、打开收集页面(研发不需要提供收集界面)
import com.dh.DHSDKHelper;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "sendemail") // 固定
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
DHSDKHelper.getInstance().exec(activity, params, sendEmailCallback);
# 1.3、上报邮箱信息(研发提供收集界面,前提已收集到用户邮箱)
import com.dh.DHSDKHelper;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "sendemail") // 固定
.put("methodParam", new JSONObject()
.put("nickname", "昵称") // 昵称
.put("email", "玩家真实的邮箱") // 电子邮箱
.toString())
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
DHSDKHelper.getInstance().exec(activity, params, sendEmailCallback);
# 2、关联手机号
WARNING
账号关联手机号码接口仅限中国大陆
# 2.1、查询绑定
新版接口:
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "bindUserPhone") // 固定
.put("methodEvent", "query") // 固定
.put("methodParam", new JSONObject()
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
.toString())
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case 101:
// 查询结果
if (resultCode == DHSDKConst.RET_OK) {
// JSONObject result = new JSONObject(resultData);
// String state = result.getString("success"); // 1=已绑定,2=未绑定,其它失败
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 查询失败
}
break;
default:
// 其他结果
break;
}
}
});
请求成功时,示例如下:
{"success":"2", "info":"没有绑定手机号码"}
{"success":"1", "info":"已绑定手机号码", "bindPhone":"131****0130"}
参数 | 类型 | 说明 |
---|---|---|
info | String | 描述结果 |
success | String | 1=已绑定,2=未绑定,其它失败 |
bindPhone | String | 绑定的手机号,131****0130,已绑定时,有此字段 |
# 2.2、游戏自制界面
# 2.2.1、发送短信(需自制界面)
新版接口:
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "bindUserPhone") // 固定
.put("methodEvent", "send") // 固定
.put("methodParam", new JSONObject()
.put("mobile", "手机号") // 手机号
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
.toString())
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case 102:
// 发送结果
if (resultCode == DHSDKConst.RET_OK) {
// JSONObject result = new JSONObject(resultData);
// String state = result.getString("success"); // 1=发送成功,2=发送失败,其它失败
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 发送失败
}
break;
default:
// 其他结果
break;
}
}
});
请求成功时,示例
{"success":"1", "info":"发送成功"}
{"success":"2", "info":"发送失败"}
参数 | 类型 | 说明 |
---|---|---|
info | String | 描述信息 |
success | String | 1=发送成功,2=发送失败,其它失败 |
# 2.2.2、绑定手机号码(需自制界面)
新版接口:
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "bindUserPhone") // 固定
.put("methodEvent", "bind") // 固定
.put("methodParam", new JSONObject()
.put("code", "验证码") // 验证码
.put("mobile", "手机号") // 手机号
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
.toString())
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case 103:
// 绑定结果
if (resultCode == DHSDKConst.RET_OK) {
// JSONObject result = new JSONObject(resultData);
// String state = result.getString("success"); // 1=绑定成功,2=绑定失败,其它失败
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 绑定失败
}
break;
default:
// 其他结果
break;
}
}
});
请求成功时,示例如下
{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130"}
参数 | 类型 | 说明 |
---|---|---|
info | String | 描述信息 |
success | String | 1=绑定成功,2=绑定失败,其它失败 |
bindPhone | String | 绑定的手机号,例如:131****0130 |
{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130", "bindChange":"0","bindAccount":......}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130", "bindChange":"1","bindAccount":......}
绑定多端互通角色时有额外字段,游戏可以根据bindChange
判断是否绑定后是新账号。
参数 | 类型 | 说明 |
---|---|---|
bindChange | String | 绑定后是否新号,例如:1,新账号;0,未变动 |
bindAccount | Object | 绑定后账号信息,详细数据结构请参考登录接口 |
# 2.3、使用SDK统一界面
注意
委托使用SDK统一界面,仅包含输入手机号发送验证码、输入验证码绑定手机号,不含查询。
# 2.3.1、委托发送、绑定(使用统一界面)
新版接口:
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "bindUserPhone") // 固定
.put("methodEvent", "delegate") // 固定
.put("methodParam", new JSONObject()
// .put("connect", "bind") //(可选)绑定多端互通角色:默认不传该字段,只收集手机号
.toString())
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case 103:
// 绑定结果
if (resultCode == DHSDKConst.RET_OK) {
// 绑定成功
// JSONObject result = new JSONObject(resultData);
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 绑定失败
}
break;
default:
// 其他结果
break;
}
}
});
请求成功时,示例如下
{"success":"2", "info":"绑定失败"}
{"success":"1", "info":"绑定成功", "bindPhone":"131****0130"}
参数 | 类型 | 说明 |
---|---|---|
info | String | 描述信息 |
success | String | 1=绑定成功,2=绑定失败,其它失败 |
bindPhone | String | 绑定的手机号,例如:131****0130 |
绑定多端互通角色时有额外字段,请参考绑定手机号码接口。
参数 | 类型 | 说明 |
---|---|---|
bindChange | String | 绑定后是否新号,例如:1,新账号;0,未变动 |
bindAccount | Object | 绑定后账号信息,详细数据结构请参考登录接口 |
# 3、谷歌本地货币查询(选接)
注意
- 本地货币查询接口,海外选接,但谷歌包必接!
- 接入时请特别注意,此接口返回的货币和价格仅用于游戏界面展示。此外,调用支付接口时传入
price
为道具原价(并非是productPrice
),currency
固定是USD
(并非是productCurrency
) - ResultData:返回的JSON是一个包含多个对象的JSON数组。游戏方需要根据
productId
从该数组中搜索对应的JSON对象。如果找到匹配的productId
,则展示对应的价格productPrice
;如果没有匹配到任何JSON对象,则游戏需要展示默认的货币价格。
调用代码示例如下:
import com.dh.DHSDKHelper;
import java.util.ArrayList;
ArrayList<String> skus = new ArrayList<>();
skus.add("com.dh.test");
/**
* @param activity 上下文
* @param skus SKUS
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().querySkus(PayActivity.this, skus, gameUnifiedCallback);
回调对象示例如下:
import com.dh.DHSDKConst;
import com.dh.callback.IDHSDKCallback;
public class GameUnifiedCallback implements IDHSDKCallback {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_SKUS:
// 查询结果
if (resultCode == DHSDKConst.RET_OK) {
// 查询成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 查询失败
}
break;
default:
// 其他结果
break;
}
}
}
GooglePlay示例:requestData
[
{
"originalData": "{\"productId\":\"com.dianhun.mdzz.c150\",\"type\":\"inapp\",\"price\":\"US$4.99\",\"price_amount_micros\":4990000,\"price_currency_code\":\"USD\",\"title\":\"新春新生礼 (BarbarQ)\",\"description\":\"购买后可获得150宝石与新春宠物:吉祥\"}",
"productCurrency": "USD",
"productDescription": "购买后可获得150宝石与新春宠物:吉祥",
"productId": "com.dianhun.mdzz.c150",
"productName": "新春新生礼 (BarbarQ)",
"productPrice": "US$4.99",
"productTitle": "新春新生礼 (BarbarQ)"
},
{
"originalData": "{\"productId\":\"com.dianhun.mdzz.b28\",\"type\":\"inapp\",\"price\":\"US$3.99\",\"price_amount_micros\":3990000,\"price_currency_code\":\"USD\",\"title\":\"超值月卡 (BarbarQ)\",\"description\":\"花费28元,立即获得150原谅宝石;购买后30天内,每天额外获得20原谅宝石。\"}",
"productCurrency": "USD",
"productDescription": "花费28元,立即获得150原谅宝石;购买后30天内,每天额外获得20原谅宝石。",
"productId": "com.dianhun.mdzz.b28",
"productName": "超值月卡 (BarbarQ)",
"productPrice": "US$3.99",
"productTitle": "超值月卡 (BarbarQ)"
}
]
参数 | 类型 | 说明 |
---|---|---|
originalData | String | 渠道返回的原始数据 , 一般情况下不用解析,根据不同发行渠道不同 . |
productCurrency | String | 货币码 |
productId | String | 道具ID |
productName | String | 道具名称 |
productPrice | String | 道具价格 |
productTitle | String | 道具标题 |
# 4、谷歌商店应用评价(选接)
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "google") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "review") // 固定
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case 40:
// 评价结果
if (resultCode == DHSDKConst.RET_OK) {
// 评价成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 评价失败
}
break;
default:
// 其他结果
break;
}
}
});
# 5、Taptap强制更新(选接)
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "forceUpdateGame") // 固定
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case 106:
// 强更结果
if (resultCode == DHSDKConst.RET_FAIL) {
// 强更失败,用户取消强制更新,或者调用失败
}
break;
default:
// 其他结果
break;
}
}
});
# 6、MTR网络检测
注意
玩家无法连接服务时可调用该接口,正常游戏千万不能调用,否则会带来卡顿。 调用接口之前,游戏最好自定义弹窗提示收集玩家网络信息,可能带来卡顿。玩家同意后再调用
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "mtr") // 固定
.put("methodParam", new JSONObject()
.put("appId", "") // appId
.put("areaId", "") // 大区ID
.put("roleId", "1") // 角色ID
.put("host", "kat.plus") // 服务器域名,禁止带https或接口路径
.toString())
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param params 接口参数
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, params, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 无回调
}
});
# 7、游戏网络检测功能
该功能旨在检测用户设备连接游戏服的网络状况(TCP/WS/DNS/MTR/HTTP),并自动上报检测结果。通过此功能,用户可以轻松查询是否能够连接到游戏服,同时也为运维人员快速排查问题提供便利。
TIP
游戏方仅需调用提供的接口,相关检测项目需提前在开放平台进行动态配置。
import com.dh.DHSDKConst;
import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import org.json.JSONObject;
String params = "{}";
try {
params = new JSONObject()
.put("pluginName", "tools") // 固定
.put("pluginType", "platform") // 固定
.put("methodName", "networkCheck") // 固定
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exec(activity, param, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
// 无回调
}
});
DANGER
游戏方可在登录界面、设置界面等场景提供入口按钮。还可以在登录、支付失败多次等场景自动触发弹窗检测。