# 登录接口

WARNING

根据国家要求,国内发行的游戏接入新版本SDK时必须接入防沉迷功能,否则APP上架商店后有被下架的风险,海外版本暂时不需要。

# 1、登录

TIP

推荐登录逻辑流程: initLogin用来登录,logout+showLoginView用于登出切换账号,游客登录后,调用bindAccountWithChannel:target或者showBindListViewWithTarget用于游客绑定。 可以通过登录返回的logintype是否为”LoginType_Quick_Visitor”来判断是否当前为游客账号

首先导入头文件

#import "DHUnionConfig.h"
#import "DHUnionDelegate.h"
#import "DHUnionSDK.h"

导入登录回调协议方法

@interface ViewController ()<DHUnionLoginNewDelegate,DHUnionQuickLoginDelegate>

登录配置

//登录配置,登录前需要设置一下
DHUnionLoginConfigData *loginData = [[DHUnionLoginConfigData alloc] init];
loginData.memo = @"memo";                   //登录自定义参数
loginData.showLogout = YES;                 //用户中心是否显示登出按钮
loginData.showFloatViewAfterLogin = NO;     //登录成功后是否显示用户中心浮窗
loginData.showSwitchButton = YES;           //登录列表界面是否显示切换登录渠道的按钮
loginData.showList = YES;                   //快速登录当本地没有缓存账号时默认弹登录列表,否则游客登录
[DHUnionSDK configureLoginData:loginData];

# 1.1 、登录列表

用登录列表接口,显示所有可以登录的渠道界面

TIP

用于切换账号场景,和logout接口组合使用

[DHUnionSDK showLoginView:self];

# 1.2、 快速登录

调用快速登录接口,如果本地没有缓存账号,默认显示登录列表,登录成功后缓存当前账号

TIP

主要登录方式,用于游戏登录主界面登录

TIP

如果已经登录过,再次登录时会默认使用上次登录的账号,除非调用登出(logout)接口清除本地账号

[DHUnionSDK initLogin:self];

# 1.3、 登录回调协议方法

返回登录的结果,包括成功,失败,登出等。

TIP

有两个登录回调方法,用于处理不同的登录场景,游戏内做相同的逻辑处理即可,两种登录回调方法不会同时触发的

#pragma mark - DHUnionLoginNewDelegate
- (void)loginNewDidSuccess:(DHUnionLoginResultNew *)result
{
    NSLog(@"新版登录成功:%@  \n当前渠道号:%@",result,[DHUnionSDK currentChannel]);
    self.resultView.text = [NSString stringWithFormat:@"登录成功:accountId:%@ account:%@,guestId:%@,mobileInfo:%@",result.accountId,result.accountName,result.guestid,result.mobileinfo];
}

- (void)loginNewDidFailed:(NSError *)error
{
    NSLog(@"新版登录失败:%@",error);
    self.resultView.text = [NSString stringWithFormat:@"登录失败:%@",error];
}
#pragma mark - DHUnionQuickLoginDelegate
- (void)quickLoginDidSuccess:(DHUnionLoginResultNew *)result
{
    self.resultView.text = [NSString stringWithFormat:@"quick login success:\n%@",result];
}

- (void)quickLoginDidFialed:(NSError *)error
{
    self.resultView.text = [NSString stringWithFormat:@"quick login failed:/n%@",error];
}

WARNING

SDK登录成功返回用户accountid,token等信息后,游戏还需要去服务端校验这些信息,如果检验失败,需要调用SDK的logout接口,再根据情况重新调用SDK的登录接口,以防出现一直登录不上的问题。

注意

不建议游戏在SDK登录成功后一直缓存SDK的账号信息用于再次登录,否则一旦账号信息过期了会有一定可能导致玩家登录验证不通过无法登录,需要重启游戏等操作才行。

//登出接口
[DHUnionSDK logout]

# 1.4、 登录返回参数

登录成功的主要参数

参数名称 参数类型 参数含义
loginType NSString 登录类型
token NSString 账号token
accountName NSString SDK账号名
accountId NSString SDK账号ID,为数字组成
sign NSString 账号签名
expireTimestamp NSString 时间戳
userExtraInfo NSString 用户详细信息,如第三方授权登录头像,昵称等,依赖登录渠道,可能为空

logintype主要字段

登录类型字段 登录类型内容
LoginType_Quick_Visitor 游客(可用于判断游客绑定)
LoginType_Common 普通登录
LoginType_Reg 注册登录
LoginType_Quick_Tjl SDK TJL登录
LoginType_Quick_History 历史记录登录
LoginType_Binding 绑定登录
LoginType_Kd KDMSG登录

TIP

logintype字段主要用于判断是否是游客以及服务端校验,除了游客类型,其它类型不用特别在意,后续会补充更多的登录类型

失败的NSError错误码字段

错误码code 含义
2 取消登录
其它 其它登录错误

# 1.5 、登录逻辑示例

# 2、绑定账号

调用绑定接口的话,首先需要进行游客登录,可通过登录返回的logintype为” LoginType_Quick_Visitor”判断是否游客账号,然后才能调用该接口将游客账号进行绑定。 可通过传递的渠道名称来指定绑定渠道,比如”QQ”表示游客绑定QQ,也可直接打开SDK提供的绑定列表界面

导入头文件

#import "DHUnionConfig.h"
#import "DHUnionDelegate.h"
#import "DHUnionSDK.h"

导入绑定回调代理协议

@interface ViewController ()<DHUnionBindDelegate>

# 2.1、 指定具体某个渠道绑定

该方式需要游戏自行设置绑定按钮UI,直接进行渠道绑定

[DHUnionSDK bindAccountWithChannel:@"qq" target:self];

# 2.2、 弹出绑定列表

该方式会弹出SDK自己的绑定列表让玩家进行选择绑定

[DHUnionSDK showBindListViewWithTarget:self];

# 2.3、 绑定结果回调方法

- (void)bindDidSuccess:(DHUnionLoginResultNew *)result
{
    self.resultView.text = [NSString stringWithFormat:@"绑定成功:%@",result];
}

- (void)bindDidFailed:(NSError *)error
{
    self.resultView.text = [NSString stringWithFormat:@"绑定失败:%@",error];
}

# 2.4、 绑定成功返回参数

绑定成功返回的账号数据结构和登录返回的结构一致

# 2.5、 绑定逻辑流程

# 3、登出

调用登出接口后会清除当前缓存账号等信息,方便重新登录

[DHUnionSDK logout];

# 4、防沉迷(国内)

WARNING

为了响应国家政策,国内游戏现在必须接入防沉迷

WARNING

强烈建议在登录前调用防沉迷接口,以防部分防沉迷信息遗漏

打开防沉迷监听接口,监听SDK返回的防沉迷信息,然后根据SDK返回的防沉迷信息游戏进行相应的处理

导入头文件

#import "DHUnionConfig.h"
#import "DHUnionDelegate.h"
#import "DHUnionSDK.h"

开启防沉迷监听

[DHUnionSDK configIndulgeCompletion:^(NSError *error, DHUnionIndulgeResult *data) {
        //游戏处理防沉迷的逻辑
        NSLog(@"%@",data.action);
    }];

防沉迷参数(DHUnionIndulgeResult)

名称 类型 说明 游戏是否需要判断
gamePart NSString 游戏分类 不需要
account_id NSString 账号ID,如果不为空,则判断是否和当前登录账号ID是否一致,是则进入防沉迷 不需要
dev_uuid NSString 设备ID,如果不为空,判断是否和当前设备的ID一致,是则进入防沉迷 不需要
heartbeat_count NSString 心跳次数 不需要
action NSString 防沉迷操作:如logout 表明登出账号,下面有详细说明 需要

action参数类型

参数名称 含义
logout 游戏提示玩家进入防沉迷,并退出当前账号重新登录

# 5、移型码功能(海外)

移型码是玩家账号在不同设备间迁移的一种方式,主要用于日本地区,游戏接入移型码需要配置额外的流程。以下是相关接口和大致流程图。

导入头文件

#import "DHUnionConfig.h"
#import "DHUnionDelegate.h"
#import "DHUnionSDK.h"

设置代理回调

@interface ViewController ()<DHUnionDeviceCodeBindDelegate,DHUnionDeviceCodeCheckDelegate,DHUnionDeviceCodeSetPwdDelegate,DHUnionDeviceCodeSetPwdCheckDelegate>

# 5.1 检查当前设备是否绑定继承了移型码

游戏在登录界面可通过该接口判断设备是否绑定继承了移型码,如果没有绑定继承移型码,可以显示绑定移型码的按钮接口给玩家调用绑定。

+ (void)checkDeviceCodeBind:(id<DHUnionDeviceCodeCheckDelegate>)delegate;

检查移型码绑定状态回调(DHUnionDeviceCodeCheckDelegate)

- (void)dhUnionDeviceCodeCheckError:(NSError *)error
{
    NSLog(@"检查移型码失败:%@",error);
}

- (void)dhUnionDeviceCodeCheckBinded:(BOOL)isBinded accountInfo:(DHUnionLoginResultNew *)accountInfo deviceCode:(NSString *)code
{
    NSLog(@"检查移型码成功:%@ 是否绑定:%@",accountInfo,isBinded?@"是":@"否");
}

# 5.2 设备绑定继承移型码

游戏自己绘制移型码绑定继承界面,传入移型码和密码,调用该接口继承移型码对应的账号,返回继承的账号信息,从而实现移型码账号在不同设备的迁移。

+ (void)bindDeviceCode:(NSString *)deviceCode password:(NSString *)pwd target:(id<DHUnionDeviceCodeBindDelegate>)delegate;

移型码绑定继承的回调(DHUnionDeviceCodeBindDelegate)

- (void)dhUnionDeviceCodeBindSuccess:(DHUnionLoginResultNew *)accountInfo
{
    NSLog(@"绑定继承移型码账号成功,继承的账号信息:%@",accountInfo);
}

- (void)dhUnionDeviceCodeBindFailed:(NSError *)error
{
    NSLog(@"绑定继承移型码账号失败:%@",error);
}

# 5.3 移型码设置密码

移型码账号登录后,游戏自己绘制界面,显示移型码,让玩家输入设置移型码对应的密码,这样可以用移型码和密码在不同的设备上迁移账号。

+ (void)deviceCodeSetPwdWithdeviceCode:(NSString *)code password:(NSString *)pwd target:(id<DHUnionDeviceCodeSetPwdDelegate>)delegate;

设置移型码密码的回调(DHUnionDeviceCodeSetPwdDelegate)

- (void)dhUnionDeviceCodeSetPwdDidSuccess
{
    NSLog(@"设置移型码密码成功");
}

- (void)dhUnionDeviceCodeSetPwdDidFailled:(NSError *)error
{
    NSLog(@"设置移型码密码失败:%@",error);
}

# 5.4 判断当前设备是否能够设置移型码密码

只有当前设备登录的是移型码对应的账号才能进行移型码密码的设置,所以游戏需要通过该接口判断是否显示移型码密码设置页面。

+ (void)checkDeviceCodeCanSetPwd:(id<DHUnionDeviceCodeSetPwdCheckDelegate>)delegate;

能否设置移型码密码的回调(DHUnionDeviceCodeSetPwdCheckDelegate)

- (void)dhUnionDeviceCodeSetPwdCheckResult:(BOOL)canSet deviceCode:(NSString *)code
{
    if(canSet){
        NSLog(@"当前登录账号可以设置移型码密码,移型码:%@",code);
    }
    else{
        NSLog(@"当前登录账号不能设置移型码密码,移型码:%@",code);
    }
}

- (void)dhUnionDeviceCodeSetPwdCheckDidFailled:(NSError *)error
{
    NSLog(@"检查失败,错误码:%@",error);
}

# 5.5、移型码的大致流程图,可用于参考

# 6.账号注销功能

游戏需要在SDK登录成功进入游戏后提供注销账号按钮,建议放在设置页面显眼的地方,点击调用该方法,成功后需要退出游戏重新登录。

[DHUnionSDK userDestoryAccount:^(bool result) {
       dispatch_async(dispatch_get_main_queue(), ^{
            if(result){
                //注销成功,进行退出游戏重新登录操作
            }
            else{
                //注销失败
            }
        });
    }]; 

# 7.上报角色信息

游戏可在登录,升级,创角,退出时调用该接口上报用户相关角色信息,方便数据收集(如果是国内SDK必须要在登录,创角,升级时上报角色信息)

海外

NSDictionary *gameUserInfo = @{
        @"areaId":@"101",//大区ID
        @"areaName":@"新手大区1",//大区名称
        @"roleId":@"32214544",//角色ID
        @"roleName":@"新人1",//角色名称
        @"roleLevel":@"12",//角色等级
        @"roleVipLevel":@"0",//角色vip等级
        @"partyName":@"新手工会",//角色工会
        @"roleBalance":@"100",//角色虚拟币余额
        @"roleCreateTime":@"1514881870"//角色创建时间戳,单位秒
  };
[DHUnionSDK configGameUserInfo:gameUserInfo];

国内

NSDictionary *gameUserInfoDic = @{@"areaId":@"100",//大区ID , 纯数字
                                      @"areaName":@"火烧赤壁",// 大区名称
                                      @"roleId":@"1000010000",// 角色ID
                                      @"roleName":@"MESS",// 角色名称
                                      @"roleLevel":@"1",// 角色等级 , 纯数字
                                      @"roleVipLevel":@"0",// vip等级 , 纯数字 , 没有vip系统传"0"
                                      @"partyName":@"无",// 角色所属公会 , 无公会系统,传无
                                      @"roleBalance":@"0",// 角色虚拟币余额 . 纯数字
                                      @"roleCreateTime":@"1514881870"// 游戏角色创建时间
    };
    [DHUnionSDK configureGameUserInfo:@"LOGIN_GAME" params:gameUserInfoDic];

上传角色信息参数:

参数名称 参数类型 参数含义
areaId NSString 大区ID,纯数字内容
areaName NSString 大区名称
roleId NSString 角色ID
roleName NSString 角色名称
roleLevel NSString 角色等级,纯数字
roleVipLevel NSString VIP等级,纯数字,没有vip系统传”0”
partyName NSString 角色所属公会,无工会系统,传”无”
roleBalance NSString 角色虚拟币月,纯数字
roleCreateTime NSString 游戏角色创建时间

上传角色type类型:

type类型字段 type类型内容
CREATE_ROLE 创建角色
LEVEL_UP 升级
LOGIN_GAME 登录游戏
EXIT_GAME 退出游戏
Last Updated: 2024/9/5 15:48:55