- 此 SDK 整合了三大运营商的网关认证能力,为开发者提供了一键登录功能,优化用户注册/登录、号码验证体验,提高安全性
- 主要场景: 注册, 登陆, 验证
- 目前 SDK 只支持iOS 8以上版本的手机系统
###接入配置
手动导入 SDK 到工程中:
拖动 demo 中的 Frameworks
文件夹到自己的工程中, 勾选 Copy items if needed
注: Frameworks
文件夹 含有
QuickLogin.framework
, TYRZSDK.framework
, EAccountApiSDK.framework
, account_login_sdk_noui_core.framework
, OAuth.framework
为工程添加相应的Frameworks,需要为项目添加的Frameworks如下
CoreLocation.framework
CFNetwork.framework
CoreFoundation.framework
libresolv.tbd
libz.tbd
libc++.1.tbd
CoreTelephony.framework
SystemConfiguration.framework
Security.framework
CoreGraphics.framework
libsqlite3.tbd
MobileCoreServices.framework
TYRZSDK.framework
account_login_sdk_noui_core.framework
EAccountApiSDK.framework
QuickLogin.framework
OAuth.framework
工程配置 配置-ObjC 设置工程 TARGETS -> Build Settings -> Other Links Flags, 设置 -ObjC
配置支持Http传输 右键打开工程plist文件,加入以下代码
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
配置资源
如有需要. 请将演示 Demo 中 Assets.xcassets
图片资源复制到自己的工程。
###接入使用
Swift 接入 创建桥接头文件 如果你的Swift工程还未引入过Objective-C文件,需要创建一个以工程名称-Bridging-Header.h文件
配置路径 设置工程 TARGETS -> Build Settings -> Objective-C Bridging Header, 设置桥接文件工程名称-Bridging-Header.h的相对路径
引入头文件 在工程名称-Bridging-Header.h文件中引入头文件
Objective-C 接入
需要引用 #import <QuickLogin/QLHelper.h>
头文件, 并进行初始化
UPAuthConfig *config = [[UPAuthConfig alloc] init];
config.appKey = @"appkey";
config.timeout = 5000;
config.authBlock = ^(NSDictionary *result) {
NSLog(@"初始化结果 result:%@", result);
};
[QLHelper setupWithConfig:config];
###运行Demo
下载 Demo 后. 修改 bundle id
和 appkey
为自己的, 直接运行
###相关 API
- QLHelper, SDK 入口
- UPAuthConfig, 应用配置信息类
- UPUIConfig, 登录界面UI配置基类
- UPLayoutConstraint, 认证界面控件布局类
- UPLayoutItem, 布局参照枚举
/// 初始化 SDK
+ (void)setupWithConfig:(UPAuthConfig *)config;
/**
初始化过程是否完成
* 完成YES, 未完成NO
*/
+ (BOOL)isSetupClient;
/**
获取手机号校验token。和+ (void)getToken:(void (^)(NSDictionary *result))completion;实现的功能一致
@param timeout 超时。单位ms,默认为5000ms。合法范围(0,10000]
@param completion token相关信息。
*/
+ (void)getToken:(NSTimeInterval)timeout completion:(void (^)(NSDictionary *result))completion;
/**
授权登录 预取号
@param timeout 超时。单位ms,默认为5000ms。合法范围(0,10000]
@param completion 预取号结果
*/
+ (void)preLogin:(NSTimeInterval)timeout completion:(void (^)(NSDictionary *result))completion;
/**
授权登录
@param vc 当前控制器
@param hide 完成后是否自动隐藏授权页。
@param animationFlag 拉起授权页时是否需要动画效果,默认YES
@param timeout 超时。单位毫秒,合法范围是(0,30000],默认值为10000。此参数同时作用于拉起授权页超时 ,以及点击授权页登录按钮获取LoginToken超时
@param completion 登录结果
@parm actionBlock 授权页事件触发回调。 type事件类型,content事件描述。详细见文档
*/
+ (void)getAuthorizationWithController:(UIViewController *)vc
hide:(BOOL)hide
animated:(BOOL)animationFlag
timeout:(NSTimeInterval)timeout
completion:(void (^)(NSDictionary *result))completion
actionBlock:(void(^)(NSInteger type, NSString *content))actionBlock;
/**
隐藏登录页.当授权页被拉起以后,可调用此接口隐藏授权页。当一键登录自动隐藏授权页时,不建议调用此接口
@param flag 隐藏时是否需要动画
@param completion 授权页隐藏完成后回调。
*/
+ (void)dismissLoginControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
/*!
* @abstract 设置是否打印sdk产生的Debug级log信息, 默认为NO(不打印log)
*
* SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志.
*
* 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志.
* 请在发布产品时改为NO,避免产生不必要的IO
*/
+ (void)setDebug:(BOOL)enable;
/*!
* @abstract 判断当前手机网络环境是否支持认证
* YES 支持, NO 不支持
*/
+ (BOOL)checkVerifyEnable;
/*!
* @abstract 清除预取号缓存
*/
+ (void)clearPreLoginCache;
/**
自定义登录页UI样式参数
@param UIConfig UIConfig对象实例。仅使用UPUIConfig类型对象
@param customViewsBlk 添加自定义视图block
*/
+ (void)customUIWithConfig:(UPUIConfig *)UIConfig customViews:(void(^)(UIView *customAreaView))customViewsBlk;
注意: 开发者不得通过任何技术手段将授权页面的隐私协议栏、slogan隐藏或者覆盖,对于接入一键认证SDK并上线的应用,我方会对上线的应用授权页面做审查,如果发现未按要求设计授权页面,将关闭应用的一键登录服务。
UPUIConfig *config = [[UPUIConfig alloc] init];
[QLHelper customUIWithConfig:config customViews:^(UIView *customAreaView) {
}];
/// 详细具体的使用.
/// 建议参考 demo 中的 ViewController.m 中 customFullScreenUI 和 customWindowUI 方法
授权界面UI配置属性说明:
- 授权页面设置
参数名称 | 参数类型 | 参数说明 |
---|---|---|
authPageBackgroundImage | UIImage | 授权界面背景图片 |
autoLayout | BOOL | 是否使用autoLayout,默认YES, |
shouldAutorotate | BOOL | 是否支持自动旋转 默认YES |
orientation | UIInterfaceOrientation | 设置进入授权页的屏幕方向,不支持UIInterfaceOrientationPortraitUpsideDown |
modalTransitionStyle | UIModalTransitionStyle | 授权页弹出方式,弹窗模式下不支持 UIModalTransitionStylePartialCurl |
dismissAnimationFlag | BOOL | 关闭授权页是否有动画。默认YES,有动画。参数仅作用于以下两种情况:1、一键登录接口设置登录完成后,自动关闭授权页 2、用户点击授权页关闭按钮,关闭授权页 |
- 导航栏
参数名称 | 参数类型 | 参数说明 |
---|---|---|
navCustom | BOOL | 是否隐藏导航栏(适配全屏图片) |
navColor | UIColor | 导航栏颜色 |
preferredStatusBarStyle | UIStatusBarStyle | 授权页 preferred status bar style,取代barStyle参数 |
navText | NSAttributedString | 导航栏标题 |
navReturnImg | UIImage | 导航返回图标 |
navControl | UIBarButtonItem | 导航栏右侧自定义控件 |
prefersStatusBarHidden | BOOL | 竖屏情况下,是否隐藏状态栏。默认NO.在项目的Info.plist文件里设置UIViewControllerBasedStatusBarAppearance为YES.注意:弹窗模式下无效,是否隐藏由外部控制器控制 |
navTransparent | BOOL | 导航栏是否透明,默认不透明。此参数和navBarBackGroundImage冲突,应避免同时使用 |
navReturnHidden | BOOL | 导航栏默认返回按钮隐藏,默认不隐藏 |
navReturnImageEdgeInsets | UIEdgeInsets | 导航栏返回按钮图片缩进,默认为UIEdgeInsetsZero |
navDividingLineHidden | BOOL | 导航栏分割线是否隐藏,默认隐藏 |
navBarBackGroundImage | UIImage | 导航栏背景图片.此参数和navTransparent冲突,应避免同时使用 |
- LOGO
参数名称 | 参数类型 | 参数说明 |
---|---|---|
logoImg | UIImage | LOGO图片 |
logoWidth | CGFloat | LOGO图片宽度 |
logoHeight | CGFloat | LOGO图片高度 |
logoOffsetY | CGFloat | LOGO图片偏移量 |
logoConstraints | NSArray | LOGO图片布局对象 |
logoHorizontalConstraints | NSArray | LOGO图片 横屏布局,横屏时优先级高于logoConstraints |
logoHidden | BOOL | LOGO图片隐藏 |
- 登录按钮
参数名称 | 参数类型 | 参数说明 |
---|---|---|
logBtnText | NSString | 登录按钮文本 |
logBtnOffsetY | CGFloat | 登录按钮Y偏移量 |
logBtnConstraints | NSArray | 登录按钮布局对象 |
logBtnHorizontalConstraints | NSArray | 登录按钮 横屏布局,横屏时优先级高于logBtnConstraints |
logBtnTextColor | UIImage | 登录按钮文本颜色 |
logBtnFont | UIFont | 登录按钮字体,默认跟随系统 |
logBtnImgs | UIColor | 登录按钮背景图片添加到数组(顺序如下) @[激活状态的图片,失效状态的图片,高亮状态的图片] |
- 手机号码
参数名称 | 参数类型 | 参数说明 |
---|---|---|
numberColor | UIColor | 手机号码字体颜色 |
numberSize | CGFloat | 手机号码字体大小 |
numberFont | UIFont | 手机号码字体,优先级高于numberSize |
numFieldOffsetY | CGFloat | 号码栏Y偏移量 |
numberConstraints | NSArray | 号码栏布局对象 |
numberHorizontalConstraints | NSArray | 号码栏 横屏布局,横屏时优先级高于numberConstraints |
- checkBox
参数名称 | 参数类型 | 参数说明 |
---|---|---|
uncheckedImg | UIImage | checkBox未选中时图片 |
checkedImg | UIImage | checkBox选中时图片 |
checkViewConstraints | NSArray | checkBox布局对象 |
checkViewHorizontalConstraints | NSArray | checkBox横屏布局,横屏优先级高于checkViewConstraints |
checkViewHidden | BOOL | checkBox是否隐藏,默认不隐藏 |
privacyState | BOOL | 隐私条款check框默认状态 默认:NO |
- 隐私协议栏
参数名称 | 参数类型 | 参数说明 |
---|---|---|
appPrivacyOne | NSArray | 隐私条款一:数组(务必按顺序)@[条款名称,条款链接] |
appPrivacyTwo | NSArray | 隐私条款二:数组(务必按顺序)@[条款名称,条款链接] |
appPrivacyColor | UIImage | 隐私条款名称颜色 @[基础文字颜色,条款颜色] |
privacyTextFontSize | CGFloat | 隐私条款字体大小,默认12 |
privacyOffsetY | CGFloat | 隐私条款Y偏移量(注:此属性为与屏幕底部的距离) |
privacyComponents | NSArray | 隐私条款拼接文本数组 |
privacyConstraints | NSArray | 隐私条款布局对象 |
privacyHorizontalConstraints | NSArray | 隐私条款 横屏布局,横屏下优先级高于privacyConstraints |
privacyTextFontSize | CGFloat | 隐私条款字体大小,默认12 |
privacyTextAlignment | NSTextAlignment | 隐私条款文本对齐方式,目前仅支持 left、center |
privacyShowBookSymbol | BOOL | 隐私条款是否显示书名号,默认不显示 |
privacyLineSpacing | CGFloat | 隐私条款行距,默认跟随系统 |
customPrivacyAlertViewBlock | Block类型 | 自定义Alert view,当隐私条款未选中时,点击登录按钮时回调。当此参数存在时,未选中隐私条款的情况下,登录按钮可以被点击,block内部参数为自定义Alert view可被添加的控制器,详细用法可参见示例demo |
- 隐私协议页面
参数名称 | 参数类型 | 参数说明 |
---|---|---|
agreementNavBackgroundColor | UIColor | 协议页导航栏背景颜色 |
agreementNavText | NSAttributedString | 运营商协议的协议页面导航栏标题 |
firstPrivacyAgreementNavText | NSAttributedString | 自定义协议1的协议页面导航栏标题 |
secondPrivacyAgreementNavText | NSAttributedString | 自定义协议2的协议页面导航栏标题 |
agreementNavReturnImage | UIImage | 协议页导航栏返回按钮图片 |
agreementPreferredStatusBarStyle | UIStatusBarStyle | 协议页 preferred status bar style,取代barStyle参数 |
- slogan
参数名称 | 参数类型 | 参数说明 |
---|---|---|
sloganOffsetY | CGFloat | slogan偏移量Y |
sloganConstraints | NSArray | slogan布局对象 |
sloganHorizontalConstraints | NSArray | slogan 横屏布局,横屏下优先级高于sloganConstraints |
sloganTextColor | UIColor | slogan文字颜色 |
sloganFont | UIFont | slogan文字font,默认12 |
- loading
参数名称 | 参数类型 | 参数说明 |
---|---|---|
loadingConstraints | NSArray | loading布局对象 |
loadingHorizontalConstraints | NSArray | 默认loading 横屏布局,横屏下优先级高于loadingConstraints |
customLoadingViewBlock | Block类型 | 自定义loading view,当授权页点击登录按钮时回调。当此参数存在时,默认loading view不会显示,需开发者自行设计loading view。block内部参数为自定义loading view可被添加的父视图,详细用法可参见示例demo |
- 弹窗
参数名称 | 参数类型 | 参数说明 |
---|---|---|
showWindow | BOOL | 是否弹窗,默认no |
windowBackgroundImage | UIImage | 弹框内部背景图片 |
windowBackgroundAlpha | CGFloat | 弹窗外侧 透明度 0~1.0 |
windowCornerRadius | CGFloat | 弹窗圆角数值 |
windowConstraints | NSArray | 弹窗布局对象 |
windowHorizontalConstraints | NSArray | 弹窗横屏布局,横屏下优先级高于windowConstraints |
windowCloseBtnImgs | NSArray | 弹窗close按钮图片 @[普通状态图片,高亮状态图片] |
windowCloseBtnConstraints | NSArray | 弹窗close按钮布局 |
windowCloseBtnHorizontalConstraints | NSArray | 弹窗close按钮 横屏布局,横屏下优先级高于windowCloseBtnConstraints |
code | 描述 | 备注 |
---|---|---|
1000 | verify consistent | 手机号验证一致 |
1001 | verify not consistent | 手机号验证不一致 |
1002 | unknown result | 未知结果 |
1003 | token expired | token失效 |
1004 | sdk verify has been closed | SDK发起认证未开启 |
1005 | AppKey 不存在 | 请到官网检查 Appkey 对应的应用是否已被删除 |
1006 | frequency of verifying single number is beyond the maximum limit | 同一号码自然日内认证消耗超过限制 |
1007 | beyond daily frequency limit | appKey自然日认证消耗超过限制 |
1008 | AppKey 非法 | 请到官网检查此应用详情中的 Appkey,确认无误 |
1009 | 当前的 Appkey 下没有创建 iOS 应用;你所使用的 JCore 版本过低 | 请到官网检查此应用的应用详情;更新应用中集成的 JCore 至最新。 |
1010 | verify interval is less than the minimum limit | 同一号码连续两次提交认证间隔过短 |
2000 | token request success | 获取token 成功 |
2001 | fetch token error | 获取token失败 |
2002 | sdk init failed | sdk初始化失败 |
2003 | netwrok not reachable | 网络连接不通 |
2004 | get uid failed | 极光服务注册失败 |
2005 | request timeout | 请求超时 |
2006 | fetch config failed | 获取配置失败 |
2008 | Token requesting, please wait | 正在获取token中,稍后再试 |
2009 | verifying, please try again later | 正在认证中,稍后再试 |
2014 | internal error while requesting token | 请求token时发生内部错误 |
2015 | rsa encode failed | rsa加密失败 |
2016 | network type not supported | 当前网络环境不支持认证 |
2017 | carrier config invalid | 运营商配置无效 |
4001 | 参数错误。请检查参数,比如是否手机号格式不对 | |
4009 | 解密rsa失败 | |
4014 | appkey is blocked | 功能被禁用 |
4018 | 没有足够的余额 | |
4031 | 不是认证用户 | |
4032 | 获取不到用户配置 | |
4033 | Login feature is not available | 未开启一键登录 |
6000 | loginToken request success | 获取loginToken成功 |
6001 | fetch loginToken failed | 获取loginToken失败 |
6002 | login cancel | 用户取消登录 |
6003 | UI load error | UI加载异常 |
6004 | authorization requesting, please try again later | 正在登录中,稍候再试 |
6006 | prelogin scrip expired | 预取号信息过期,请重新预取号 |
7000 | preLogin success | 预取号成功 |
7001 | preLogin failed | 预取号失败 |
7002 | preLogin requesting, please try again later | 取号中 |
8000 | init success | 初始化成功 |
8004 | init failed | 初始化失败 |
8005 | init timeout | 初始化超时 |