iOS一键登录

1. 概述

容联云一键登录SDK 为移动应用提供完善的三网(移动、联通、电信)一键登录&本机号码验证功能开发框架,屏蔽其 
内部复杂细节,对外提供较为简洁的 API 接口,方便第三方应用快速集成一键登录功能。 
注意事项: 
  • 网络取号时候请务必开启手机蜂窝网络 
    1.  电信只支持4G网络取号 
    2.  移动, 联通支持4G, 3G, 2G网络取号,但在非4G网络情况下容易取号失败 
  • 针对双卡双待手机只取当前流量卡号
  • SDK包含一键登录和本机号码校验两个不同的功能,使用场景不一样,无需一起使用。 
  • 当前版本:1.2.2 (增加支持armv7指令)

2. Demo快速体验 

  • DEMO下载
  • 确保已在容联服务端开通并申请了一键登录服务,获取到了相应的appID(即子账号Id)。 
  • 替换 ArgsDefine.h 文件中 APPID 宏的值为申请的appID,并确保 appID 和 bundleID 相对应。
  • 如只是调起授权界面,则进行上面的修改即可。如果想验证是否能登录成功,则需要自行完善 NetworkManager.m 中的以下方法: 
    • requestMobileLoginQuery: token: completion: 
    • requestMobileVerify: token: mobile: completion: 
    • 或者根据您的服务器请求自行编写

3. 接入SDK的工作配置

3.1 前期准备

  • 确保您的终端设备已经开启了4G网络。 
  • 确保已经在容联服务端开通了一键登录服务并创建了对应的账号。 
  • 下载SDK后进行解压,解压后包含3个文件(夹)是: 
    • RLVerification.framework 
    • MobileSupportSDK 
    • Bundle

3.2 环境要求

在您集成容联云 SDK 前环境要求如下: 
  • 支持的iOS版本:9.0+ 

3.3 导入sdk

注意事项:目前仅支持手动导入
3.3.1 引入文件
  • 将RLVerification文件夹(包含RLVerification.framework、MobileSupportSDK、Bundle三个子文件)拖入您的项目目录内。
  • 如图所示在弹出的窗口选择“Copy items if needed”,“Create groups”,“Add to targets”选择您的目标工程。
3.3.2 添加静态库
  • 查询工程是否添加了RLVerification.framework、TYRZSDK.framework、EAccountHYSDK.framework、account_login_sdk_core.framework文件。 
  • 步骤:点击工程项目,点击目标TARGETS,选择Build Phases,展开Link Binary With Libraries,查看是否存在这四个文件) 
  • 如果缺少某个文件,则需要手动添加:展开添加的SDK文件夹MobileSupportSDK,将其中的framework文件直接拖入即可)
3.3.3 添加动态依赖库
  • libz.1.2.8.tbd 
  • libc++.1.tbd
3.3.4 添加资源文件
  • 添加Bundle文件夹下的几个bundle文件到工程内,否则一键登录授权页面默认的图片或icon将会显示异常 
  • 步骤:点击工程项目,点击目标TARGETS,选择Build Phases,展开Copy Bundle Resources
3.3.5 配置支持HTTP传输
  • 在Info.plist文件中,新增App Transport Security Settings键,默认类型即可(Dictionary) 
  • 在App Transport Security Settings下新增一项kev-value对 
  • Allow Arbitrary Loads : YES
3.3.6 使用Apple登录(可选)
  • 在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不通过。 
  • 集成步骤如下: 
    • 选择项目 TARGETS -> Signing & Capabilities,单击Capability(如下图) 
    • 在弹出框中搜索Sign in with Apple,双击添加,即可启⽤Apple 登录 
    • 登录开发者中心,在需要启用 Sign in with Apple 的 Apple ID中勾选 Sign in with Apple
    • 最后更新配置文件即可使用

3.4 编译配置

点击TARGETS(目标工程名),点击“Build Settings”,搜索框内搜索Other Linker Flags,在“Other Linker Flags”选项后添加-ObjC,如果项目仍有问题,可以再添加-all_load。

4. SDK接口说明

4.1 获取单例实例

注:以下实例方法的调用,都是基于本单例的
  • /** 获取单例实例 */
  • + (instancetype)sharedInstance;

4.2 初始化

  • 使用一键登录功能前,必须使用开发者自己的 appID 进行初始化SDK 
  • 建议放在 AppDelegate中的 application: didFinishLaunchingWithOptions: 方法中 
  • 此方法已默认调用了一次预取号方法
方法原型:
  • /**
  •  * @param appID 用户在容联平台申请的应用识别号
  •  */
  • - (void)setupWithAppID:(NSString *)appID;

  • /**
  •  * 启动初始化
  •  * @param appID 用户申请的应用ID
  •  * @param compHandler 初始化结果回调 YES/NO
  •  * @param failReason 初始化失败的回调
  •  */
  • - (void)setupWithAppID:(NSString *)appID
  •  withCompletionHandler:(void (^)(void))compHandler
  •             failReason:(RLFailReason)failReason;
请求参数说明:
参数类型约束说明
appIDNSString必选客户在容联后台申请的子账户ID/AppID
compHandlerBlock非必选初始化成功回调
failReasonBlock非必选初始化失败回调
响应参数说明:
参数类型约束说明
resultRLResult必选初始化失败原因
注解:
  • RLFailReason 
  • /** 失败原因回调Block */ 
  • typedef void (^RLFailReason)(RLResult *result); 
  • RLResult
参数类型说明
codeNSString状态码
messageNSString状态码描述
示例代码:
  • - (BOOL)application:(UIApplication *)application
  • didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  •      // 设置debug模式(可以打印更多debug信息,务必在发布时候关闭)
  •      [RLVerification sharedInstance].debug = YES;
  •      // 容联⼀键登录SDK初始化
  •      [[RLVerification sharedInstance] setupWithAppID:APPID];
  •  
  •  // coding ...
  •  
  •  [self.window makeKeyAndVisible];
  •  
  •  return YES; 
  • }

4.3 预取号

  • 验证当前运营商网络是否可以进行一键登录操作,该方法会缓存取号信息,提高一键登录效率。 建议发起一键登录前先调用此方法(SDK在使⽤ setupWithAppID: 方法初始化时,已调用了一次)
方法原型:
  • /**
  •  * 一键登录预取号
  •  *
  •  * @param listener 预取号结果回调Block,信息用 RLResultModel 存放
  •  * @param failReason 失败结果回调
  •  */
  • - (void)getAccessCode2Login:(RLResultBlock)listener
  •                  failReason:(RLFailReason)failReason;

请求参数说明:
参数类型说明
listenerBlock

初始化状态回调

failReasonBlock

初始化失败回调

响应参数说明:
参数类型说明
rlResultRLResultModel

预取号结果回调

resultRLResult

预取号失败原因回调

注解:
  • RLResultBlock
  • * 结果 回调Block/
  • typedef void (^RLResultBlock)(RLResultModel *rlResult);
  • RLFailReason
  • /** 失败原因回调Block */
  • typedef void (^RLFailReason)(RLResult *result);
  • RLResult
参数类型说明
codeNSString状态码
messageNSString状态码描述
  • RLResultModel
参数类型说明
resultRLResult状态码及描述的模型
traceIdNSString流水号(联通运营商定位问题时使用,如返回成功该字段为空)
authCodeNSString授权码(只有电信使用)
openIdNSStringopenId(只有移动使用)

4.4 拉起授权页 - 全屏

  • 如果需要自定义UI,需要在调用授权页之前设置
  • 具体设置请参照 本页 - 授权页面设计条目
  • 由于没有自动关闭授权页,所以使用完毕需要主动调用 关闭授权页 方法
  • /**
  •  * 一键登录-全屏
  •  *
  •  * @param listener 登录结果回调Block,信息用 RLResult 存放
  •  * @param failReason 失败结果回调,失败原因 + 失败状态码
  •  */
  • - (void)doLogin:(RLResultBlock)listener
  •      failReason:(RLFailReason)failReason;
请求参数说明:
参数类型说明
listenerBlock

初始化状态回调

failReasonBlock

初始化失败回调

响应参数说明:
参数类型说明
rlResultRLResultModel

预取号结果回调

resultRLResult

预取号失败原因回调

示例代码:
  • /// 一键登录 全屏
  • - (void)oneKeyLoginWithFullScreen {
  •  __weak typeof(self) weakSelf = self;
  •  
  •  // 初始化默认UI配置
  •  RLUIConfig *config = [[RLUIConfig alloc] init];
  •  // 需要定制化 在这里调整参数
  •  [RLVerification sharedInstance].uiConfig = config;
  •  
  •  [[RLVerification sharedInstance] doLogin:^(RLResult *rlResult) {
  •      NSString *token = rlResult.token;
  •      NSLog(@"%@", rlResult.description);
  •  } failReason:^(NSString * _Nonnull reason, NSString * _Nonnull code) {
  •      NSLog(@"%@, %@", code, reason);
  •  }];
  • }

4.5 拉起授权页 - 弹窗

  • 如果需要自定义UI,需要在调用授权页之前设置
  • 具体设置请参照 本页 - 授权页面设计条目
  • 由于没有自动关闭授权页,所以使用完毕需要主动调用 关闭授权页 方法
  • /**
  •  * 一键登录-弹窗
  •  *
  •  * @param listener 验证结果回调Block,信息用 RLResult 存放
  •  * @param failReason 失败结果回调,失败原因 + 失败状态码
  •  */
  • - (void)doLoginPopup:(RLResultBlock)listener
  •           failReason:(RLFailReason)failReason;

请求参数说明:
参数类型说明
listenerBlock

初始化状态回调

failReasonBlock

初始化失败回调

响应参数说明:
参数类型说明
rlResultRLResultModel

预取号结果回调

resultRLResult

预取号失败原因回调

4.6 退出授权页

  • /**
  •  * 关闭一键登录页面
  •  *
  •  * @param completion 关闭后回调
  •  */
  • - (void)dismissLoginWithCompletion:(void (^ __nullable)(void))completion;
请求参数说明:
参数类型说明
completionBlock关闭授权页回调
示例代码:
  • /// 一键登录全屏
  • - (void) oneKeyLoginWithFullScreen {
  •     __weak typeof(self) weakSelf = self;
  •     RLUIConfig *config = [self setupCustomUI];
  •     [RLVerification sharedInstance].uiConfig = config;
  •  
  •     [[RLVerification sharedInstance] doLogin:^(RLResult *rlResult) {
  •         NSString *token = rlResult.token;
  •         NSLog(@"%@", rlResult.description);
  •         // APP向服务器请求
  •         [[NetworkManager sharedInstance] requestMobileLoginQuery:nil
  • token:token completion:^(NSDictionary * _Nonnull data) {
  •             if ([data[@"statusCode"] isEqualToString:REQUEST_SUCCESS]) {
  • //                NSString* mobile = data[@"mobile"];
  •                 // APP服务端匹配
  •                 [[RLVerification sharedInstance] dismissLoginWithCompletion:^{
  •                     NSLog(@"登录成功,退出授权页");
  •                 }];
  •             } else {
  •                 NSLog(@"登录失败,退出授权页");
  •             }
  •        }];
  •     } failReason:^(NSString * _Nonnull reason, NSString * _Nonnull code) {
  •         NSLog(@"请求服务器出错,原因是:%@", reason);
  •     }];
  • }

4.7 授权页其他点击事件

  • // LoginViewController.h
  • // 需要遵循 RLVerificationDelegate 中的协议
  • @interface LoginViewController () 
  • @end
  • // LoginViewController.m
  • // 设置 代理
  • RLVerification.sharedInstance.delegate = self;
使用方法如下:
  • // LoginViewController.m

  • #pragma mark - RLVerificationDelegate
  • /**
  •  * 用户点击了授权页面的返回按钮
  •  */
  • - (void)userDidDismissAuthViewController {
  •     NSLog(@"点击 - 返回");
  • }

  • /**
  •  * 用户点击了授权页面的"切换账户"按钮
  •  */
  • - (void)userDidSwitchAccount {
  •     NSLog(@"点击 - 切换登录⽅式");
  • }
  • /**
  •  * 一键登录 - 用户点击了授权页面的"第三方"按钮
  •  */
  • - (void)userDidThirdPartyWithIndex:(NSInteger)index {
  •     NSLog(@"点击 - 第三方登录方式\n这次点击的是第%zd个按钮", index);
  • }

4.8 本机号码验证 

  • /**
  •  * 本机号认证
  •  *
  •  * @param mobile 需要被验证的手机号
  •  * @param listener 验证结果回调Block,信息用 RLResult 存放
  •  * @param failReason 失败结果回调,失败原因 + 失败状态码
  •  */
  • - (void)mobileAuthWithMobile:(NSString *)mobile
  •                     listener:(RLResultBlock)listener
  •                   failReason:(RLFailReason)failReason;
请求参数说明:
参数类型约束说明
mobileNSString必选

需要被验证的手机号

listenerBlock必选

认证状态回调

failReasonBlock必选

认证失败回调

响应参数说明:
参数类型说明
rlResultRLResultModel

预取号结果回调

resultRLResult

预取号失败原因回调

示例代码:
  • - (void)checkDeviceNumber {
  •     NSString *pNum = <#获取到的手机号#>;
  •     // 检查手机号合法性
  •     if (![self isPhoneNum:pNum]) {
  •         NSLog(@"手机号不正确!");
  •         return;
  •     }
  •  
  •     __weak typeof(self) weakSelf = self;
  •     [[RLVerification sharedInstance] mobileAuthWithMobile:pNum
  • listener:^(RLResult *rlResult) {
  •         NSString *token = rlResult.token;
  •         NSLog(@"-------- %@", rlResult.description);
  •  
  •          // coding:用输入的手机号 和 获取到的token 向App后台验证手机号一致性

  •    } failReason:^(NSString * _Nonnull reason, NSString * _Nonnull code) {
  •        NSLog(@"请求失败:%@", reason);
  •    }];
  • }

4.9 其他SDK方法

  • RLUIConfig.h
  • // 检查设置的值的合法性
  • // 如果设置的值不合法,则会替换为默认值
  • - (RLUIConfig *)checkConfig;
  • RLVerification.h
  • /**
  •  * 超时时间设置:单位 s
  •  *
  •  *!!! 如果需要设置,请在调用初始化方法 setupWithAppID: 之前设置
  •  */
  •  @property (nonatomic, assign) NSTimeInterval timeoutInterval;
  •  
  • /**
  •  * 是否初始化成功的标志
  •  *
  •  * 如果想重新初始化,将其置为 NO 后,再调用 setupWithAppID: 方法
  • */
  • @property (nonatomic, assign) BOOL isSDKInitSucceeded;

  • /** 设置debug模式 输出日志 */
  • @property(nonatomic, assign) BOOL debug;

  • /** 获取设备型号 */
  • + (NSString *)getCurrentDeviceModel;

5. 授权页面设计

  • 登录按钮文字描述必须包含 “登录” 或 “注册” 等文字,不得诱导用户授权。 
  • 开发者不得通过任何技术手段将授权页面的隐私协议栏、slogan隐藏或者覆盖。 
  • 对于接入容联一键登录SDK并上线的应用,我方会对上线的应用授权页面做审查,如果发现未按要求设计授权页面,将关闭应用的一键登录服务。

5.1 授权界面说明

需要在调起 一键登录全屏/弹窗 之前设置自定义UI
  • // 初始化默认界⾯UI
  • RLUIConfig *config = [[RLUIConfig alloc] init];
  • // ⾃定义:调整需要⾃定义的参数
  • // coding ...
  • RLVerification.sharedInstance.uiConfig = config;

5.2 所有可配置参数

注:以下参数都在 RLUIConfig.h 中定义
5.2.1 Navigation/导航
属性类型描述默认值
navTextNSString导航栏标题一键登录
navTextSizeCGFloat导航栏标题字体大小18
navTextColorUIColor导航栏标题颜色blackColor
naviBgColorUIColor导航栏背景颜色whiteColor
naviBackImageUIImage导航栏返回按钮图片rl_login_back
  • #pragma mark - Navigation/导航
  • /**
  •  导航栏标题
  •  默认:一键登录
  •  */
  • @property (nonatomic, strong) NSString *navText;

  • /**
  •  导航栏标题字体大小
  •  默认:18
  •  */
  • @property (nonatomic, assign) CGFloat navTextSize;

  • /**
  •  导航栏标题颜色
  •  默认:黑色
  •  */
  • @property (nonatomic, strong) UIColor *navTextColor;

  • /**
  •  授权页导航栏背景颜色
  •  默认:白色
  •  */
  • @property (nullable, nonatomic, strong) UIColor *naviBgColor;

  • /**
  •  授权页导航左边的返回按钮的图片
  •  默认黑色系统样式返回图片
  •  */
  • @property (nullable, nonatomic, strong) UIImage *naviBackImage;
5.2.2 Logo/图标
属性类型描述默认值
logoImageUIImagelogo图片“容联云通讯”图标
logoOffsetYCGFloatlogo图片相对于屏幕顶部的偏移量40
logoWidthCGFloatlogo图片宽度250
logoHeightCGFloatlogo图片高度50
  • #pragma mark - Logo/图标
  • /**
  •  授权页面上展示的图标。
  •  默认为 "容联·云通讯" 图标
  •  */
  • @property (nullable, nonatomic, strong) UIImage *logoImage;

  • /**
  •  LOGO图片Y偏移量
  •  该控件顶部(top)相对于屏幕(safeArea)的顶部(top)的距离 (下同)
  •  默认:40
  •  */
  • @property (nonatomic, assign) CGFloat logoOffsetY;

  • /**
  •  LOGO宽度
  •  默认:250
  •  */
  • @property (nonatomic, assign) CGFloat logoWidth;

  • /**
  •  LOGO宽度
  •  默认:50
  •  */
  • @property (nonatomic, assign) CGFloat logoHeight;
5.2.3 号码框
属性类型描述默认值
numberOffsetYCGFloat号码框Y偏移量100
numberColorUIColor号码框字体颜色darkTextColor
numberTextSizeCGFloat号码框字体大小26
  • #pragma mark - 号码框设置
  • /**
  •  号码框字体颜色
  •  默认:darkTextColor
  •  */
  • @property (nonatomic, strong) UIColor *numberColor;

  • /**
  •  号码框字体大小
  •  默认:26
  •  */
  • @property (nonatomic, assign) CGFloat numberTextSize;

  • /**
  •  号码框Y偏移量
  •  默认:100
  •  */
  • @property (nonatomic, assign) CGFloat numberOffsetY;
5.2.4 Slogan/标语
属性类型描述默认值
sloganOffsetYCGFloatSloganY偏移量160
sloganTextColorUIColorSlogan字体颜色lightGrayColor
sloganTextSizeCGFloatSlogan字体大小12
  • #pragma mark - Slogan
  • /**
  •  Slogan(标语) Y偏移量
  •  默认:160
  •  */
  • @property (nonatomic, assign) CGFloat sloganOffsetY;

  • /**
  •  Slogan字体颜色
  •  默认:lightGrayColor
  •  */
  • @property (nonatomic, strong) UIColor *sloganTextColor;

  • /**
  •  Slogan字体
  •  默认字体 12
  •  */
  • @property (nonatomic, assign) CGFloat sloganTextSize;
5.2.5 登录按钮
属性类型描述默认值
authButtonTextNSString登录按钮文本一键登录
authButtonTextColorUIColor登录按钮文本颜色whiteColor
authButtonTextSizeCGFloat登录按钮文本大小18
authButtonWidthCGFloat登录按钮宽度280
authButtonHeightCGFloat登录按钮高度46
authButtonOffsetYCGFloat登录按钮Y偏移量230
authButtonImages

NSArray<UIImage*>

授权页认证按钮的背景图片数组

顺序为:@[正常状态的背景图片, 不可用状态的背景图片, 高亮状态的背景图片]。

默认正常状态为蓝片,不可用状态的背景图片时为灰色,高亮状态为灰蓝色。

  • #pragma mark - 一键登录按钮设置
  • /**
  •  登录按钮文本
  •  默认:一键登录
  •  */
  • @property (nonatomic, strong) NSString *authButtonText;

  • /**
  •  登录按钮文本颜色
  •  默认:白色
  •  */
  • @property (nonatomic, strong) UIColor *authButtonTextColor;

  • /**
  •  登录按钮字体大小
  •  默认:18
  •  */
  • @property (nonatomic, assign) CGFloat authButtonTextSize;

  • /**
  •  登录按钮宽度
  •  默认:280
  •  */
  • @property (nonatomic, assign) CGFloat authButtonWidth;

  • /**
  •  登录按钮高度
  •  默认:46
  •  */
  • @property (nonatomic, assign) CGFloat authButtonHeight;

  • /**
  •  登录按钮 Y偏移量
  •  默认:230
  •  */
  • @property (nonatomic, assign) CGFloat authButtonOffsetY;

  • /**
  •  授权页认证按钮的背景图片数组, @[正常状态的背景图片, 不可用状态的背景图片, 高亮状态的背景图片]。
  •  默认正常状态为蓝色纯色,不可用状态的背景图片时为灰色,高亮状态为灰蓝色。
  •  */
  • @property (nullable, nonatomic, strong) NSArray<UIImage *> *authButtonImages;
5.2.6 其他登录方式按钮
属性类型描述默认值
switchButtonTextNSString切换账号按钮的文案其他登录方式
switchButtonColorUIColor切换账号按钮的颜色

systemBlueColor

switchButtonSizeCGFloat切换账号按钮的字体大小15
switchButtonOffsetYCGFloat切换账号按钮Y偏移量285
switchButtonHiddenBOOL切换账号按钮是否隐藏NO
  • #pragma mark - Switch Button/切换按钮
  • /**
  •  授权页切换账号按钮的文案
  •  默认:其他登录方式
  •  */
  • @property (nullable, nonatomic, copy) NSString *switchButtonText;

  • /**
  •  授权页切换账号按钮的颜色
  •  默认:systemBlueColor
  •  */
  • @property (nullable, nonatomic, strong) UIColor *switchButtonColor;

  • /**
  •  授权页切换账号的字体
  •  默认:15
  •  */
  • @property (nonatomic, assign) CGFloat switchButtonSize;

  • /**
  •  授权页切换账号按钮 Y偏移量
  •  默认:285
  •  */
  • @property (nonatomic, assign) CGFloat switchButtonOffsetY;

  • /**
  •  切换账号按钮隐藏状态
  •  默认:不隐藏
  •  */
  • @property (nonatomic, assign) BOOL switchButtonHidden;
5.2.7 第三方登录方式
属性类型描述默认值
thirdpartyHiddenBOOL第三方登录按钮组是否隐藏NO
  • #pragma mark - 第三方登录方式:默认居中
  • /*
  •  第三方登录 按钮 隐藏状态
  •  默认:NO,不隐藏
  •  */
  • @property (nonatomic, assign) BOOL thirdpartyHidden;
5.2.8 隐私条款
属性类型描述默认值
privacyCheckedBoxSizeCGSize条款勾选框大小{16, 16}
privacyCheckedBoxDefaultStateBOOL勾选框默认状态NO,不勾选
privacyCheckedImageUIImage勾选框勾选状态的图标蓝色图标,推荐尺寸为12x12
privacyUncheckedImageUIImage勾选框未勾选状态的图标白色图标,推荐尺寸为12x12
privacyMobileNameColorUIColor运营商隐私协议名称的颜色systemGreenColor
privacyOtherTextColorUIColor除运营商&合作商之外其他文字的颜色lightGrayColor
privacyPartnerLabelTextNSString合作方用户协议文字《用户协议》
privacyPartnerUrlNSString合作方用户协议URL

https://www.apple.com/legal/

privacy/szh/

privacyPartnerLabelTextSecendNSString合作方用户协议文字 - 第二个
privacyPartnerUrlSecendNSString合作方用户协议URL - 第二个
privacyLabelBottomOffsetYCGFloat隐私协议标签相对于屏幕底部的Y偏移量10
privacyLabelTextSizeCGFloat隐私协议标签字体大小12
  • #pragma mark - 隐私条款设置
  • /**
  •  授权页面上条款勾选框大小
  •  默认:16x16
  •  */
  • @property (nonatomic, assign) CGSize privacyCheckedBoxSize;

  • /**
  •  授权页面上勾选框默认状态
  •  默认:NO,不选中
  •  */
  • @property (nonatomic, assign) BOOL privacyCheckedBoxDefaultState;

  • /**
  •  授权页面上勾选框勾选的图标
  •  默认为蓝色图标,推荐尺存为12x12
  •  */
  • @property (nullable, nonatomic, strong) UIImage *privacyCheckedImage;

  • /**
  •  授权页面上勾选框未勾选的图标
  •  默认为白色图标,推荐尺存为12x12
  •  */
  • @property (nullable, nonatomic, strong) UIImage *privacyUncheckedImage;

  • /**
  •  授权页面上运营商隐私协议名称的颜⾊
  •  默认:systemGreenColor
  •  */
  • @property (nonatomic, strong) UIColor *privacyMobileNameColor;

  • /**
  •  授权页面上除了运营商&合作商外,其他文字的颜色
  •  默认:lightGrayColor
  •  */
  • @property (nonatomic, strong) UIColor *privacyOtherTextColor;

  • /**
  •  授权页面上合作方用户协议文字
  •  默认:《用户协议》
  •  */
  • @property (nonatomic, strong) NSString *privacyPartnerLabelText;

  • /**
  •  授权页面上合作方用户协议URL
  •  默认:https://www.apple.com/legal/privacy/szh/
  •  */
  • @property (nonatomic, strong) NSString *privacyPartnerUrl;
  •  
  • /**
  •  授权页面上合作方用户协议 - 第二个
  •  默认:空 @""
  •  */
  • @property (nonatomic, strong) NSString *privacyPartnerLabelTextSecend;
  •  
  • /**
  •  授权页面上合作方用户协议URL - 第二个
  •  授权页面上合作方可传入用户协议的URL,用户点击协议后,SDK加载打开协议页面
  •  默认:@""
  •  */
  • @property (nonatomic, strong) NSString *privacyPartnerUrlSecend;
  •  
  • /**
  •  授权页面上隐私协议标签Y偏移量
  •  授权页面上该控件底部(bottom)相对于屏幕(safeArea)底部(bottom)的距离
  •  默认:10
  •  */
  • @property (nonatomic, assign) CGFloat privacyLabelBottomOffsetY;

  • /**
  • 授权页面上隐私协议标签字体大小
  • 默认:12
  • */
  • @property (nonatomic, assign) CGFloat privacyLabelTextSize;
5.2.9 弹窗
属性类型描述默认值
isPopupBOOL是否为弹窗模式NO
  • #pragma mark - 弹窗设置
  • /**
  •  是否为弹窗模式
  •  默认:NO
  •  */
  • @property (nonatomic, assign) BOOL isPopup;
5.2.10 WebView
属性类型描述默认值
webNaviTitleTextNSString

条款内容WebView中的导航栏标题

用户协议
  • #pragma mark - WebViewController Navigation/服务条款页面导航栏
  • /**
  •  服务条款页面导航的标题
  •  默认:"用户协议"
  •  */
  • @property (nullable, nonatomic, strong) NSString *webNaviTitleText;

6. 常见问题

  •  出现找不到方法的报错
  • -[UIImageView _isDecompressing]: unrecognized selector sent to instance 0x15122c530
  • -[UIImageView _isSymbolImage]: unrecognized selector sent to instance 0x15122c530
  • 解决方案: 
  • a. 注意导包方式,应该是 Create groups,不要用 Create folder references 
  • b. 查找路径:targets -> Build Settings -> Other Linker Flags 
  •  添加 -ObjC(如果仍然出现unrecognized selector sent to instance找不到方法的报错,则再添加-all_load)
  •  
  • 一些其他编译问题,可以尝试在 targets -> Build Settings -> Other Linker Flags 中加上以下配置 
  • $(inherited)
  • -framework
  • "ImageIO"
  • -lstdc++
  • -force_load
  • $(PROJECT_DIR)/RLVerification/MobileSupportSDK/CMCC/TYRZSDK.framework/TYRZSDK
  • -force_load
  • $(PROJECT_DIR)/RLVerification/MobileSupportSDK/CTCC/EAccountHYSDK.framework/EAcco
  • untHYSDK
  • -force_load
  • $(PROJECT_DIR)/RLVerification/RLVerification.framework/RLVerification
  • 注:SDK路径根据自己文件的实际路径进行设置
  • 授权界面显示异常(不显示默认图片)
  • 解决方案: 
  • 查找路径:TARGETS-->Build Phases-->Copy Bundle Resources 
  • 添加以下bundle资源文件
  • RLVerification.bundle
  • EAccountOpenPageResource.bundle
  • TYRZResource.bundle
  • uni_account_login_res.bundle
  • SignInWithAppleID 相关的错误
  • Error Domain=com.apple.AuthenticationServices.AuthorizationError Code=1001 "(null)"
  • Authorization failed: Error Domain=AKAuthenticationError Code=-7003 "(null)" UserInfo=
  • {AKClientBundleID=bundleid}
  • ...
原因: 
使用苹果登录,但是项目配置中未添加 Sign in with Apple 
解决方案:
详见文档 3.3.6 使用Apple登录章节
是否需要添加APPLE登录,不添加是否会影响审核?

7. 返回码

7.1 容联SDK返回码

返回码返回码描述
000000成功
000100应用ID为空
000101未识别SIM卡
000102无网络/网络异常
000103蜂窝煤网络未开启/不稳定 
000105重复初始化
000106移动SDK初始化失败 
000107联通SDK初始化失败 
000108电信SDK初始化失败 
000201数据返回异常
000202解析数据失败
000203获取容联服务配置请求失败
110001移动预取号失败
110002移动预取号异常
110003移动预取号响应异常
110011移动授权失败
110021移动验证失败
120001联通预取号失败
120002联通预取号异常
120003联通预取号响应异常
120011联通授权失败
120021联通验证失败
130001电信预取号失败
130002电信预取号异常
130003电信预取号响应异常
130011电信授权失败
130021电信验证失败
590000未知错误
590001BODY为空
590002内部错误
591001请求参数subAccId为空
591002请求参数bundleId为空
591003请求参数appId为空
591004请求参数token为空
591005请求参数os为空
591006URI参数accountId为空
591007accountId不合法
591008subAccId不合法
591009子帐号不属于主账号
591010主账号状态不可用
591011子账号状态不可用
591012账户未在运营商报备
591013运营商信息为空
591014请求参数token不合法
591015帐号不支持号码认证功能
591016帐号余额不足
591019请求参数device为空
591020请求参数version为空
591022请求参数bundleId不合法 
591023请求参数sign为空
591024请求参数sign不合法
591025请求参数random为空
591033请求IP不在白名单内
591035运营商应用状态不可用
591024请求参数sign不合法
591025请求参数random为空
591033请求IP不在白名单内
591035运营商应用状态不可用

7.2 移动返回码

返回码返回码描述
0成功
103101请求签名错误,AppSecret错误
103102包签名/BundleID错误
103111网关IP错误
103119appid不存在
103211其他错误
103902scrip失效
103911token请求过于频繁,10分钟内获取token且未使用的数量不超过30个 
103273预取号联通重定向
105002移动取号失败
105003电信取号失败
105021已达当天取号限额
105302appid不在白名单
105312余量不足(体验版到期或套餐用完) 
105313非法请求
200020用户取消登录
200021数据解析异常
200022无网络
200023请求超时
200025其他错误(socket、系统未授权数据蜂窝权限等)
200027蜂窝(数据网络)未开启或不稳定
200028网络请求出错
200038异网取号网络请求失败
200048用户未安装sim卡
200050EOF异常(没有蜂窝煤权限) 
200061授权页面异常
200064服务端返回数据异常
200072CA根证书校验失败
200080本机号码校验仅支持移动手机号
200082服务器繁忙
200086ppLocation为空
200087仅用于监听授权页成功拉起
200089SDK正在处理
200096当前网络不支持取号

7.3 联通返回码

返回码返回码描述
0处理成功
1失败(具体失败原因请看message)

7.4 电信返回码

返回码返回码描述
0请求成功
-64权限不足
-65API-request-rates-Exceed-Limitations(调用接口超限)
-10001调用失败
-10002参数错误
-10003解密失败
-10004ip受限
-10005异网取号回调参数异常 
-10006Mdn取号失败,且属于电信网络
-10007重定向到异网取号
-10008超过预设取号阀值
-10009时间戳过期
-20005sign-invalid(签名错误)
-20006应用不存在
-20007公钥数据不存在
-20100内部解析错误
-20102加密参数解析失败
-30001时间戳非法
-30003topClass失效
51002参数为空
51114无法获取手机号数据
80000请求超时
80001请求网络异常
80002响应码错误
80003无网络连接
80004移动网络未开启
80005Socket超时异常
80006域名解析异常
80007IO异常
80008No route to host
80009nodename nor servname provided, or not known
80010Socket closed by remote peer
80100登录结果为空
80101登录结果异常
80102预登录异常
80103SDK未初始化
80104未调用预登录接口
80105加载nib文件异常
80200用户关闭界面
80201其他登录方式
80800WIFI切换异常
80801WIFI切换超时