iOS实战:移动一键登录SDK封装
很久没有更新博客了,近期接到了集成移动一键登录功能,因此做了一个一键登录工具类,把UI设置和功能都封装到工具类中。
移动一键登录
现在的移动一键登录SDK只有两个主要功能,分别是本机号码校验和获取用户信息功能。
个人理解:前者的作用是验证本次登陆的手机账号是否为手机中插着的手机号。后者的作用是用于登陆。
因此,本次的工具类是基于后者提供的功能开发的。
工具类提供的接口
业务逻辑相关的接口
/**
单例获取
@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,然后几秒钟后再跳转到一键登录界面。
一键登录1.PNG一键登录2.PNG
一键登录3.PNG
接下里说一下预取号方法。当在调用-(void)getTokenExpWithController
方法之前,先调用-(void)preGetPhonenumberSuccess
方法,会预先获取到本机手机号。因此可以节省下几秒钟的时间。
大致解释如何使用该功能
在调用-(void)preGetPhonenumberSuccess
方法后,用户点击一键登录按钮后,会回调回token
字段。这个token
的作用是去获取用户信息的。
在移动的开发文档中,有提供获取用户信息的接口:
获取用户信息接口.png该接口所需的参数中有一个token
参数,返回的数据中有登陆的手机号字段。
因此大致做法是,本地调用一键登录接口,获取token
参数,再把token
以及其他相关的参数传给后台,让后台去调用获取用户信息接口,获得手机号后进行比较,如果是同一个,登陆成功,再去数据库中获取用户数据返回给前端。
UI设置接口
在新的SDK中,移动提供了开发者自定义UI功能。但是当前版本提供的可修改的界面仍不是很多。
移动的接口如下:
+ (void)customUIWithParams:(NSDictionary *)customUIParams
customViews:(void(^)(NSDictionary *customAreaView))customViews;
customUIParams
字典键值对在开发文档中有写。
我对UI自定义功能也进行了二次封装,将这些方法放在了HXTYRZManager的分类中。举例如下:
- (void)setNavBarLeftImage:(UIImage *)image; //层级1
- (void)setNavBarBackgroundColor:(UIColor *)color; //层级1
- (void)setNavBarTitle:(NSString *)title; //层级暂定1
其中的实现:
- (void)setNavBarLeftImage:(UIImage *)image //层级1
{
if ([self isNil:image]) {
return;
}
[self.customUIParams setObject:image forKey:UAPageNavLeftLogo];
}
本质为在工具类中设置字典,跳过外部设置。并且,我在工具类的显示登陆方法实现中,调用了移动的-(void)customUIWithParams
方法。因此,你需要在调用我的显示登陆接口之前,先设置好UI。