# 登录接口
# 1、接口说明
此接口为SDK统一登录接口。国内和海外登录均使用此接口,具体使用方式则根据meta-data
配置(由开放平台出包,接入者无需关心此配置)。
WARNING
调用接口前必须调用SDK初始化,并且登录接口和登出接口应配合使用以实现账号切换功能。游戏在调用此接口后,在调用支付接口之前,请先接入上报角色接口。
# 2、登录接口
# 2.1、拉起登录(统一必接)统一必接
调用代码示例如下:
import com.dh.DHSDKHelper;
/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().login(activity, 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_LOGIN:
// 登录回调
if (resultCode == DHSDKConst.RET_OK) {
// 登录成功
// 数据解析:resultData
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 登录失败
// 异常描述:resultData
}
break;
default:
// 其他结果
break;
}
}
}
登录成功,回调数据示例如下:
{
"accountName": "131****0130",
"accountId": 1696674719,
"accountView": "131****0130",
"sign": "3edf1c178506041e54bcf58b0ede45e2",
"token": "0e9c17aeeacd4d8abc61ec4261e4cdfb",
"region": 1,
"loginType": 1,
"userExtraInfo": {
"avatar": "",
"nickName": ""
},
"loginTimestamp": 1719763200,
"expireTimestamp": 1720627200
}
账号信息,主要参数说明如下:
参数 | 类型 | 必传字段 | 统一字段 | 说明 |
---|---|---|---|---|
accountName | String | 是 | 是 | 账号名称 |
accountId | int | 是 | 是 | 账号ID,唯一标识 |
accountView | String | 是 | 是 | 账号缩略,用于界面显示,例如顶部登录欢迎弹窗 |
sign | String | 是 | 是 | 登录签名,参考服务器文档 |
token | String | 是 | 是 | 登录令牌,参考服务器文档 |
region | int | 是 | 是 | 所属地区,1 :中国大陆;0 :港澳台及海外 |
loginType | int | 是 | 是 | 登录类型:当值为10时即游客类型,需要调用账号绑定接口。其他类型接入方无需处理,直接传送给服务器 |
userExtraInfo | JsonObject | 是 | 是 | 用户额外信息,接入方一般无需关注 |
loginTimestamp | int | 是 | 是 | 登录时间,秒级时间戳,参考服务器文档 |
expireTimestamp | int | 是 | 是 | 登录失效时间,秒级时间戳,参考服务器文档 |
操作危险
- 不能将accountName或者accountView作为用户的唯一ID,这些通常为账号名称。如果用其作为唯一标识,必将导致串号。
- 不建议游戏在SDK登录成功后长期缓存SDK的账号信息用于再次登录。否则,一旦账号信息过期,可能导致玩家登录验证失败而无法登录,需重启游戏等操作才能解决。
WARNING
SDK登录成功后回调的accountId、token等数据需要游戏服务端进行校验。如校验失败,需调用SDK的logout接口,并根据具体情况重新调用SDK的登录接口,以防止出现持续无法登录的问题。
# 2.2、账号绑定(海外必接)海外必接
TIP
国内不接入,海外必接,同时请勿在游戏启动时,调用账号绑定接口。
注意
- 登录接口返回的账号类型
loginType
等于10
时,代表该账号是游客账号。游戏可根据需要调用此接口进行账号绑定,以防止游客账号丢失。 - 请勿在SDK登录过程中调用此接口。该接口应在用户已登录状态下,由游戏方在登录界面中显示绑定账号按钮,当用户主动点击该按钮时,才可调用此接口。
# 2.2.1 弹出绑定界面
TIP
该接口适用于游戏对绑定界面没有UI要求的情况。
调用代码示例如下:
import com.dh.DHSDKHelper;
/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().link(activity, 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_LINK:
// 绑定回调
if (resultCode == DHSDKConst.RET_OK) {
// 绑定成功
// 数据解析:resultData
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 绑定失败
// 异常描述:resultData
}
break;
default:
// 其他结果
break;
}
}
}
绑定成功,回调数据说明如下:
绑定回调数据结构与登录回调数据结构相同,请参考拉起登录接口。
# 2.3、退出登录(统一必接)统一必接
WARNING
注意该接口为退出登录,指的是退出账号登录,并非注销账号或退出游戏。某些渠道没有退出登录功能,调用此接口将直接回调退出成功的回调。
调用代码示例如下:
import com.dh.DHSDKHelper;
/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().getPlatform().logout(activity, gameUnifiedCallback);
DANGER
接入方的退出登录回调监听必须为全局回调,当游戏收到退出成功回调时(requestCode = DHSDKConst.REQ_LOGIN_OUT)
,需要返回到登录界面。接入方必须清理缓存的登录状态,进入游戏前须判断是否已登录,否则会导致串号串服等问题!
回调对象示例如下:
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_LOGIN_OUT:
// 登出回调
if (resultCode == DHSDKConst.RET_OK) {
// 登出成功
} else if (resultCode == DHSDKConst.RET_FAIL) {
// 登出失败
}
break;
default:
// 其他结果
break;
}
}
}
绑定结果,回调数据说明如下:
回调数据为文本提示或其他结构,接入方无需解析
# 2.4、账号切换(统一必接)统一必接
DANGER
- SDK未提供单独的切换账号接口,需要使用拉起登录和退出登录组合实现。
- 接入者在调用登录接口进入游戏后,如果需要使用切换账号功能,应先调用登出接口,之后再调用登录接口,即可完成切换账号功能。
# 2.5、上报角色(统一必接)统一必接
DANGER
上报角色数据:在创角、登录、退出、升级时需要调用。请注意,需在触发动作成功后进行上报。
调用代码示例如下:
import com.dh.DHSDKHelper;
import org.json.JSONObject;
String gameUserInfo = "{}";
try {
gameUserInfo = new JSONObject()
.put("areaId", 100) // 大区ID
.put("areaName", "国服一区") // 大区名称
.put("roleId", "100002") // 角色ID
.put("roleName", "kraity") // 角色名称
.put("roleLevel", 143) // 角色等级
.put("roleVipLevel", 0) // VIP等级
.put("roleType", "法师") // 角色职业
.put("rolePower", 10000) // 角色战力值
.put("partyId", 0) // 角色公会ID
.put("partyName", "无") // 角色公会名称
.put("roleBalance", 0) // 角色虚拟币余额
.put("roleCreateTime", 1719763200) // 游戏角色创建时间
.toString();
} catch (Throwable e) {
e.printStackTrace();
}
/**
* @param activity 上下文
* @param type 上报类型
* @param gameUserInfo 角色数据
*/
DHSDKHelper.getInstance().getPlatform().setGameUserInfo(activity, type, gameUserInfo);
上报类型,主要类型示例如下:
type | value |
---|---|
创建角色成功 | CREATE_ROLE |
角色升级成功 | LEVEL_UP |
登录游戏成功 | LOGIN_GAME |
退出游戏成功 | EXIT_GAME |
WARNING
特别注意:创建角色后,上报创角事件的同时还需要上报登录事件。
角色信息,主要参数说明如下:
参数 | 类型 | 必传字段 | 统一字段 | 说明 |
---|---|---|---|---|
areaId | int | 是 | 是 | 大区ID |
areaName | String | 是 | 是 | 大区名称 |
roleId | String | 是 | 是 | 角色ID |
roleName | String | 是 | 是 | 角色名称 |
roleLevel | int | 否 | 是 | 角色等级,城堡等级、钻石等级等 |
roleVipLevel | int | 否 | 是 | VIP等级 |
roleType | String | 否 | 是 | 角色职业 |
rolePower | int | 否 | 是 | 角色战力值 |
partyId | int | 否 | 是 | 角色公会ID |
partyName | String | 否 | 是 | 角色公会名称 |
roleBalance | int | 否 | 是 | 角色虚拟币余额 |
roleCreateTime | int | 是 | 是 | 游戏角色创建时间,秒级时间戳 |
# 2.6、退出游戏(统一必接)统一必接
调用代码示例:
import com.dh.DHSDKHelper;
/**
* @param activity 上下文
* @param sdkCallback 回调对象
*/
DHSDKHelper.getInstance().exit(activity, gameUnifiedCallback);
DANGER
- 应用需完全退出时调用,且只有在回调结果为
DHSDKConst.RET_OK
时才能关闭程序,否则会导致SDK异常、内存泄漏等问题。 - 该方法用于释放变量引用。此外,通常情况下渠道会显示关闭确认对话框,需要用户确认后才能关闭程序。因此,不用担心一直返回
DHSDKConst.RET_FAIL
而无法关闭程序。
回调对象示例如下:
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_EXIT:
// 退出回调
if (resultCode == DHSDKConst.RET_OK) {
// 许可退出游戏
// 游戏清理资源
// 最后杀死进程
android.os.Process.killProcess(
android.os.Process.myPid()
);
}
break;
default:
// 其他结果
break;
}
}
}
退出结果,回调数据说明如下:
回调数据为文本提示或其他结构,接入方无需解析