iOS实战:移动一键登录SDK封装

很久没有更新博客了,近期接到了集成移动一键登录功能,因此做了一个一键登录工具类,把UI设置和功能都封装到工具类中。

移动一键登录

现在的移动一键登录SDK只有两个主要功能,分别是本机号码校验和获取用户信息功能。

个人理解:前者的作用是验证本次登陆的手机账号是否为手机中插着的手机号。后者的作用是用于登陆。

因此,本次的工具类是基于后者提供的功能开发的。

工具类提供的接口

业务逻辑相关的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
单例获取

@return 单例
*/
+ (instancetype)shareManager;


/**
初始化参数
*/
- (void)initialize;


/**
是否为移动
*/
- (BOOL)isCMCC;


/**
获取Msgid
*/
- (NSString *)TYRZSDKMsgid;

/**
获取Appid
*/
- (NSString *)TYRZSDKAppid;

/**
预取号 在显式登录之前的操作,目的为提前获取本机手机号,节省显式登录时间。 手
机号会缓存五分钟,五分钟之内显式登录可以免 获取资料 步骤

@param success void
@param failure des = 失败描述
*/
- (void)preGetPhonenumberSuccess:(void (^)(void))success
failure:(void (^)(NSString *des))failure;


/**
显式登录

@param vc 展示移动一键登录的控制器
@param success token = 获得的token authTypeDes = 登录的认证方式 0:其他;1:WiFi下网关鉴权;2:网关鉴权;3:短信上行鉴权;7:短信验证码登录
@param failure des = 失败描述
*/
- (void)getTokenExpWithController:(UIViewController *)vc
success:(void (^)(NSString *token, NSString *authTypeDes))success
failure:(void (^)(NSDictionary *context))failure;

@end

调用-(void)getTokenExpWithController方法后进入一键登录界面,但是进入的过程是这样的:

会先进入一个获取手机号界面如下图1,然后几秒钟后再跳转到一键登录界面。

获取手机号

跳转

一键登录界面

接下里说一下预取号方法。当在调用-(void)getTokenExpWithController方法之前,先调用-(void)preGetPhonenumberSuccess方法,会预先获取到本机手机号。因此可以节省下几秒钟的时间。

大致解释如何使用该功能

在调用-(void)preGetPhonenumberSuccess方法后,用户点击一键登录按钮后,会回调回token字段。这个token的作用是去获取用户信息的。

在移动的开发文档中,有提供获取用户信息的接口:

获取用户信息接口

该接口所需的参数中有一个token参数,返回的数据中有登陆的手机号字段。

因此大致做法是,本地调用一键登录接口,获取token参数,再把token以及其他相关的参数传给后台,让后台去调用获取用户信息接口,获得手机号后进行比较,如果是同一个,登陆成功,再去数据库中获取用户数据返回给前端。

UI设置接口

在新的SDK中,移动提供了开发者自定义UI功能。但是当前版本提供的可修改的界面仍不是很多。

移动的接口如下:

1
2
+ (void)customUIWithParams:(NSDictionary *)customUIParams
customViews:(void(^)(NSDictionary *customAreaView))customViews;

customUIParams字典键值对在开发文档中有写。

我对UI自定义功能也进行了二次封装,将这些方法放在了HXTYRZManager的分类中。举例如下:

1
2
3
- (void)setNavBarLeftImage:(UIImage *)image; //层级1
- (void)setNavBarBackgroundColor:(UIColor *)color; //层级1
- (void)setNavBarTitle:(NSString *)title; //层级暂定1

其中的实现:

1
2
3
4
5
6
7
- (void)setNavBarLeftImage:(UIImage *)image //层级1
{
if ([self isNil:image]) {
return;
}
[self.customUIParams setObject:image forKey:UAPageNavLeftLogo];
}

本质为在工具类中设置字典,跳过外部设置。并且,我在工具类的显示登陆方法实现中,调用了移动的-(void)customUIWithParams方法。因此,你需要在调用我的显示登陆接口之前,先设置好UI。

SDK下载地址

SDK下载地址

工具类地址

一键登录工具类

请我吃一块黄金鸡块