# 其他接口

# 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

游戏方可在登录界面、设置界面等场景提供入口按钮。还可以在登录、支付失败多次等场景自动触发弹窗检测。

Last Updated: 2024/12/30 16:06:35