一键登录流程
号码认证SDK对外提供的头文件SAuthLoginSDKLib,使用时需要先调用初始化SDK接口,然后再调用一键登录接口,流程:
- 需要先保证SDK已经初始化,调用过方法startSDKWithAppKey、secretKey、userInfo。
- 调用接口authLoginWithParameters:completion:进行一键登录。
- 判断手机开启流量的SIM对应的运营商,调用运营商SDK进行登录操作,弹出授权页面并点击授权登录。
- 完成一键登录,通过回调并在resultString结果中拿到返回的状态和数据。
注意:
1、可不调用预登录接口,直接调用一键登录接口
2、为优化用户体验,减少一键登录时间,可提 前调用预登录接口
接口说明
初始化SDK
保证在使用一键登录、号码认证功能前已经执行了初始化操作。
/**
* SDK初始化接口
@param appKey 初始化SDK需要的参数,需要提前申请
@param secretKey 初始化SDK需要的参数,需要提前申请
@param userInfo 初始化SDK需要的参数,用户的自定义参数
*/
+ (void)startSDKWithAppKey:(NSString *)appKey secretKey:(NSString *)secretKey userInfo:(NSDictionary *)userInfo;
参数说明
参数 | 类型 | 说明 |
---|---|---|
appKey | NSString | |
secretKey | NSString | |
userInfo | NSDictionary | 自定义参数 |
预登录
预登录接口进行运营商判断、网络状态判断,通过运营商能力获取后续进行一键登录的accessToken进行缓存,帮助后续一键登录流程减少等待时间。
通过设置参数 carrierType 进行运营商类型指定,默认SALoginCarrierTypeDefault为由SDK自主判断,指定类型时只按照此类型进行预登录、一键登录,类型不匹配则会返回固定错误码。
接口默认超时时间为8秒,传入大于0的 timeout ,可对接口超时时间进行限制。
typedef NS_ENUM(NSUInteger, SALoginCarrierType) { SALoginCarrierTypeDefault = 0, SALoginCarrierTypeChinaMobile = 1, // 中国移动 SALoginCarrierTypeChinaUnicom = 2, // 中国联通 SALoginCarrierTypeChinaTelecom = 3, //中国电信
};
/**
预登录接口
@param carrierType 指定登录运营商 @param timeout 接口响应超时时间 @param completion 回调结果
*/
+ (void)preAuthLoginWithCarrierType:(SALoginCarrierType)carrierType
timeout:(NSTimeInterval)timeout
completion:(void(^)(NSString *resultString))completion;
参数说明
参数 | 类型 | 说明 |
---|---|---|
carrierType | SALoginCarrierType | 指定一键登录类型 |
timeout | NSTimeInterval | 接口超时时间 |
completion | void(^)(NSString *resultString) | 返回结果,JSON String |
返回数据格式
{
"0": 0, // 主状态,0为成功
"1": 0, // 子状态,0为成功
"2": "3", // 运营商
"3": ""
}
一键登录
调用一键登录接口,会弹出授权⻚面,展示运营商信息和自定义的App相关信息,用户授权点击“登录”按钮后进行一键登录服务交互,结束后通过completion进行回调。
一键登录时传入 SAuthUICustomModel 对象进行登录界面的UI自定义配置,详细参考界面配置。
登录接口
@param customModel 自定义UI配置Model @param timeout 接口响应超时时间 @param jsonString 登录透传参数 @param completion 回调结果
*/
+ (void)authLoginWithCustomModel:(SAuthUICustomModel *)customModel
timeout:(NSTimeInterval)timeout
parameters:(NSString *)jsonString completion:(void(^)(NSString *resultString))completion;
参数说明
参数 | 类型 | 说明 |
---|---|---|
customModel | SAuthUICustomModel | 自定义界面配置 |
timeout | NSTimeInterval | 接口超时时间 |
completion | void(^)(NSString resultString) | 返回结果,JSON String |
返回数据格式举例:
{
"0": 0,
"1": 0,
"2": "3",
"3": "{\"data\":{...返回的数据内容...}"
}
关闭授权页面
一键登录结束会收到回调completion,需在收到回调时关闭授权⻚面。在未接收到回调前进行界面关闭操作,会影响到下次登录流程。
/**
关闭授权登录⻚
@param completion 关闭完成后回调
*/
+ (void)closeLoginViewControllerWithCompletion:(void (^)(void))completion;
参数说明
参数 | 类型 | 说明 |
---|---|---|
completion | void(^)(NSString *resultString) | 关闭⻚面后执行的代码 |
授权页面设置
通过设置SAuthUICustomModel类型的CustomModel,来改变弹出授权⻚面的内容和结构。授权⻚面 可以更改UI控件的样式和布局。
展现样式
包含全屏、底部弹出Sheet、中间弹出Alert三种方式。同时,针对全屏模式,可分为右侧弹出带导航 栏,和底部弹出Present无导航栏两种效果。
UI组件
- 状态栏:可设置为默认和LightContent样式
- 导航栏:可设置背景图片,标题样式,返回按钮等,只支持右侧弹出时设置
- Logo图片:可替换图片,设置图片frame,隐藏图片
- 电话号码:可设置文字样式,Y偏移,不可隐藏
- 登录按钮:可设置背景图片,文字样式等,不可隐藏
- 隐私协议:可设置协议内容,文字颜色,勾选状态等,不可隐藏
- Slogon:可设置是否隐藏,不可更改
- 自定义view:可添加各种自定义view组件
SAuthUICustomModel 属性
通过设置CustomModel参数,可以实现在授权⻚面上增加自定义试图,调整现有UI组件位置和属性。 当前VC:使用一键登录功能必传
/** 授权⻚面弹出的 */
@property (nonatomic,weak) UIViewController *currentVC;
展现形式
/** 授权⻚展现形式,默认为全屏 */
@property (nonatomic, assign) SAuthLoginShowStype authViewShowStyle;
/** Sheet形式弹出生效,弹出sheet高度 */
@property (nonatomic, strong) NSNumber *sheetHeight;
/** alert形式弹出时生效,圆⻆半径 */
@property (nonatomic, assign) CGFloat alertCornerRadius;
/** alert形式弹出时生效,宽相对屏幕比例,默认是0.8 */ @property (nonatomic,assign) CGFloat alertWidthScale; /** alert形式弹出时生效,高相对屏幕比例,默认0.6 */ @property (nonatomic,assign) CGFloat alertHeightScale;
/** 针对全屏时设置弹出方向 */
@property (nonatomic, assign) SAPresentationDirection presentType;
状态栏:
/** 状态栏样式,内部通过preferredStatusBarStyle实现 */
@property (nonatomic,assign) UIStatusBarStyle statusBarStyle;
导航栏:
只有全屏模式,右侧弹出时生效
/** 导航栏是否隐藏,右侧全屏出现时支持设置,默认不隐藏 */ @property (nonatomic, assign) BOOL navIsHidden;
/** 导航栏主题色 */
@property (nonatomic, strong) UIColor *navColor;
/** 导航栏标题,内容、字体、大小、颜色 */
@property (nonatomic, copy) NSAttributedString *navTitle;
/** 导航栏返回按钮图片 */
@property (nonatomic, strong) UIImage *navBackImage;
背景图片:
/** 登录⻚整体背景图片 */
@property (nonatomic,strong) UIImage *authPageBackgroundImage;
logo图片
/** 设置logo图片 */
@property (nonatomic, strong) UIImage *logoImage;
/** logo是否隐藏 */
@property (nonatomic, assign) BOOL logoIsHidden;
/** 设置logo展示的frame */
@property (nonatomic, copy) SAUIComponentFrameBlock logoImageFrameBlock;
号码
/** 手机号码文本的样式,设置文本内容不生效 */
@property (nonatomic, strong) NSAttributedString *phoneNumberText;
/** 设置手机号码Y偏移,超出显示区域不生效 */
@property (nonatomic, copy) NSNumber *phoneNumberOffY;
登录按钮
/** 登录按钮文本和样式 */
@property (nonatomic, strong) NSAttributedString *loginBtnText;
/** 登录按钮背景图片,@[激活状态的图片,失效状态的图片,高亮状态的图片]*/
@property (nonatomic, strong) NSArray *loginBtnImgs;
/** 设置登录按钮展示的frame,超出显示区域不生效 */
@property (nonatomic, copy) SAUIComponentFrameBlock
loginBtnFrameBlock;
隐私条款
/** 隐私条款复选框背景图片,@[选中状态图片,未选中状态图片] */ @property (nonatomic, strong) NSArray *checkboxImgs;
/** 隐私条款复选框边⻓ */
@property (nonatomic, strong) NSNumber *checkboxSize;
/** 隐私条款复选框默认状态 默认:NO */
@property (nonatomic, assign) BOOL privacyState;
/** 隐私条款文字对⻬方式 默认:左对⻬*/
@property (nonatomic, assign) NSTextAlignment appPrivacyAlignment;
/** 隐私条款名称两侧是否开启书名号 默认:不开启 */ @property (nonatomic, assign) BOOL privacySymbol;
/** 隐私条款字体 */
@property (nonatomic, strong) UIFont *privacyFont;
/** 协议1,[协议名称,协议Url],注:两个协议名称不能相同 */
@property (nonatomic, copy) NSArray<NSString *> *privacyFirst;
/** 协议2,[协议名称,协议Url],注:两个协议名称不能相同 */
@property (nonatomic, copy) NSArray<NSString *> *privacySecond;
/** 协议3,[协议名称,协议Url],注:三个协议名称不能相同 */
@property (nonatomic, copy) NSArray<NSString *> *privacyThird;
/** 隐私条款内容颜色数组,@[非点击文案颜色,点击文案颜色] */
@property (nonatomic, copy) NSArray<UIColor *> *privacyColors;
/** 隐私条款整体frame,包含前面复选框,注意height会根据文字自动计算,不会根据设置处理 */ @property (nonatomic, copy) SAUIComponentFrameBlock privacyFrameBlock;
slogan
/** slogon是否隐藏 */
@property (nonatomic, assign) BOOL slogonIsHidden;
自定义控件
/** 自定义控件设置,在block中创建自定义view,addSubView到containerView中 */ @property (nonatomic,copy) void(^customViewBlock)(UIView *containerView);
隐私协议web页面
/** web协议界面导航栏返回按钮图片 */
@property (nonatomic, strong) UIImage *webNavReturnImg;
/** web协议界面导航标题字体属性设置,如:@{NSForegroundColorAttributeName: [UIColor blackColor], NSFontAttributeName: [UIFont systemFontOfSize:20]} */
@property (nonatomic, strong) NSDictionary<NSAttributedStringKey, id> *webNavTitleAttrs;
/** web协议界面导航标题栏颜色 */
@property (nonatomic,strong) UIColor *webNavColor;
Frame设置方式
/** 设置UI控件Frame的block,screenSize为屏幕尺寸,containerViewSize为容器视图尺寸 */ typedef CGRect(^SAUIComponentFrameBlock)(CGSize screenSize, CGSize containerViewSize);