跳到主要内容

登录接口

1、接口说明

安卓登录接口为SDK统一登录接口。此接口根据meta-data配置的数据不同,显示界面和具体使用的渠道都不相同。

警告

调用登录接口前必须调用SDK初始化,并且登录接口和登出接口一起使用来完成切换账号的功能,游戏调用此接口后调用支付接口之前,请接入设置角色信息接口。

2、登录接口

2.1、执行登录(必接)

调用代码示例:

import com.dh.DHSDKHelper;

/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().login(activity, sdkCallback);

回调对象示例如下:

public class DHSDKCallback implements IDHSDKCallback {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_LOGIN:
// 登录结果
if (resultCode == DHSDKConst.RET_OK) {
// 登录成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 登录失败
}
break;
default:
// 其他结果
break;
}
}
}

返回的结果数据示例:

登录失败:

错误描述,纯字符串

登录成功:

{
"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,
"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的账号信息用于再次登录,否则一旦账号信息过期了会有一定可能导致玩家登录验证不通过无法登录,需要重启游戏等操作才行。

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

注意

国内不接入,海外必接

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

2.2.1 弹出绑定界面

警告

该接口适用于游戏对于绑定界面没有UI要求。

调用代码示例:

import com.dh.DHSDKHelper;

/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().link(activity, sdkCallback);
注意

请勿在游戏启动时,调用账号绑定接口。

登录接口返回的账号类型是LoginType_Quick_Visitor代表此账号是游客账号,游戏根据需要调用link()进行账号绑定,防止游客账号丢失.

回调对象示例如下:

public class DHSDKCallback implements IDHSDKCallback {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_LINK:
// 绑定结果
if (resultCode == DHSDKConst.RET_OK) {
// 绑定成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 绑定失败
}
break;
default:
// 其他结果
break;
}
}
}

返回的结果数据示例:

参数说明,请参照登录

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

2.3、退出登录(必接)

注意

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

调用代码示例:

import com.dh.DHSDKHelper;

/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().logout(activity, sdkCallback);
注意

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

回调对象示例如下:

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

返回的结果数据示例:

结果数据是文字提示,不用解析

2.4、切换账号(必接)

注意

UnionSDK并没有提供单独的切换账号接口,需要用登录、登出接口组合使用,接入者调用登陆接口进入游戏后,如果需要使用切换账号功能,先调用登出接口之后在调用登录接口就是切换账号功能。

2.5、上报角色(全部必接)

注意

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

调用代码示例:

import com.dh.DHSDKHelper;
import com.dh.framework.utils.DHJsonUtils;

import java.util.HashMap;

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

String gameUserInfo = DHJsonUtils.toJson(gameUserInfoMap);

/**
* @param activity 上下文
* @param type 上报类型
* @param gameUserInfo 角色数据
*/
DHSDKHelper.getInstance().getPlatform().setGameUserInfo(activity, type, gameUserInfo);

上报类型如下:

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

2.6、退出游戏(必接)

调用代码示例:

import com.dh.DHSDKHelper;

/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exit(activity, sdkCallback);
警告

应用需完全退出时调用,且只有在回调结果为DHSDKConst.RET_OK时才能关闭程序,否则会导致SDK异常,内存泄露等问题。该方法用于释放变量引用,以及某些渠道会有关闭确认对话框,需要用户确认后才能关闭程序,不用担心一直返回DHSDKConst.RET_FAIL而无法关闭程序。

回调对象示例如下:

public class DHSDKCallback implements IDHSDKCallback {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
switch (requestCode) {
case DHSDKConst.REQ_EXIT:
// 许可退出结果
if (resultCode == DHSDKConst.RET_OK) {
// 许可退出游戏
// 游戏清理资源

// 最后杀死进程
android.os.Process.killProcess(
android.os.Process.myPid()
);
}
break;
default:
// 其他结果
break;
}
}
}

返回的结果数据示例:

结果数据是文字提示,不用解析

3、移型码接口

3.1、移型码绑定

import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import com.dh.framework.utils.DHPluginParam;

String param = DHPluginParam.Builder()
.put("plugin_type", "jcode")
.put("unionsdk_type", "platform")
.put("event_type", "bindDeviceCode")
.toString();

/**
* @param activity 上下文
*/
DHSDKHelper.getInstance().exec(activity, param, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == 27) {
// resultData:
// {
// "result": 21,
// "resultInfo": "EDUOKVE",
// "data": {
// "account": "kra***@dianhun.cn",
// "accountid": 1696674719,
// "accountview": "kra***@dianhun.cn",
// "token": "dae3fe2ead24a42d98f7d1e3e3048ef3",
// "timestamp": "1583229600",
// "sign": "175251494bfe238d566eebf35463c2d2",
// "logintype": "LoginType_Common",
// "region": 1
// },
// "ValiCount": 0
// }
}
}
});

3.2、移型码设置密码

import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import com.dh.framework.utils.DHPluginParam;

String param = DHPluginParam.Builder()
.put("account", "123456")
.put("pwd", "123456")
.put("plugin_type", "jcode")
.put("unionsdk_type", "platform")
.put("event_type", "deviceCodeSetPwdWithDeviceCode")
.toString();

/**
* @param activity 上下文
*/
DHSDKHelper.getInstance().exec(activity, param, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == 28) {
// resultData:
// {
// "result": 21,
// "resultInfo": "EDUOKVE",
// "data": {
// "account": "kra***@dianhun.cn",
// "accountid": 1696674719,
// "accountview": "kra***@dianhun.cn",
// "token": "dae3fe2ead24a42d98f7d1e3e3048ef3",
// "timestamp": "1583229600",
// "sign": "175251494bfe238d566eebf35463c2d2",
// "logintype": "LoginType_Common",
// "region": 1
// },
// "ValiCount": 0
// }
}
}
});

3.3、移码绑定检查

import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import com.dh.framework.utils.DHPluginParam;

String param = DHPluginParam.Builder()
.put("plugin_type", "jcode")
.put("unionsdk_type", "platform")
.put("event_type", "checkDeviceCodeBind")
.toString();

/**
* @param activity 上下文
*/
DHSDKHelper.getInstance().exec(activity, param, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == 26) {
// resultData:
// {
// "result": 21,
// "resultInfo": "EDUOKVE",
// "data": {
// "account": "kra***@dianhun.cn",
// "accountid": 1696674719,
// "accountview": "kra***@dianhun.cn",
// "token": "dae3fe2ead24a42d98f7d1e3e3048ef3",
// "timestamp": "1583229600",
// "sign": "175251494bfe238d566eebf35463c2d2",
// "logintype": "LoginType_Common",
// "region": 1
// },
// "ValiCount": 0
// }
}
}
});

3.4、设备移型码查询

import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import com.dh.framework.utils.DHPluginParam;

String param = DHPluginParam.Builder()
.put("plugin_type", "jcode")
.put("unionsdk_type", "platform")
.put("event_type", "currentDeviceCode")
.toString();

/**
* @param activity 上下文
*/
DHSDKHelper.getInstance().exec(activity, param, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == 30) {
// resultData:
// {
// "result": 21,
// "resultInfo": "EDUOKVE",
// "data": {
// "account": "kra***@dianhun.cn",
// "accountid": 1696674719,
// "accountview": "kra***@dianhun.cn",
// "token": "dae3fe2ead24a42d98f7d1e3e3048ef3",
// "timestamp": "1583229600",
// "sign": "175251494bfe238d566eebf35463c2d2",
// "logintype": "LoginType_Common",
// "region": 1
// },
// "ValiCount": 0
// }
}
}
});

3.5、查询能否设置密码

信息

查询当前设备是否能够设置移型码密码

import com.dh.DHSDKHelper;
import com.dh.callback.IDHSDKCallback;
import com.dh.framework.utils.DHPluginParam;

String param = DHPluginParam.Builder()
.put("plugin_type", "jcode")
.put("unionsdk_type", "platform")
.put("event_type", "canSettingDeviceCodePwd")
.toString();

/**
* @param activity 上下文
*/
DHSDKHelper.getInstance().exec(activity, param, new IDHSDKCallback() {
@Override
public void onDHSDKResult(int requestCode, int resultCode, String resultData) {
if (requestCode == 41) {
// resultData:
// {
// "canSetPwd": "1",
// "code": ""
// }
// canSetPwd:1可以设置、0不可以设置;code:移型码
}
}
});