# 登录接口

# 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;
        }
    }
}

退出结果,回调数据说明如下:

回调数据为文本提示或其他结构,接入方无需解析

Last Updated: 2024/11/26 17:00:57