乐趣区

关于ios:秒验丨iOS客户端SDK-集成指南

开发工具:Xcode
集成形式:手动导入 SDK 或者 Pod 集成
SDK 版本反对:SDK 反对 Xcode 9.1.0, iOS8.0+ 及以上版本

集成前筹备

注册账号
应用秒验 SDK 之前,须要先在 MobTech 官网注册开发者账号,并获取 AppKey 和 AppSecret,详情能够点击查看创立利用流程

提交审核
一键登录是运营商提供的能力,在应用秒验 SDK 之前,您须要在工作台提交秒验审核,详情能够点击查看秒验审核流程

秒验 SDK 流程图

增加配置

下载 SDK 导入我的项目
(1)手动下载 SDK 引入

官网下载 SDK,而后将下图中 SDK 文件夹拖入到工程中(若我的项目中集成过秒验 SDK,请将原来存在的 SDK 删除掉,再导入官网下载的 SDK)。

(2)CocoaPods 形式引入

按需在 Podfile 文件中增加命令
pod 'mob_secverify'

留神 如果 pod install 导入的版本不是最新版,则先执行 pod repo update 操作更新本地 repo 的内容, 再从新 pod install

增加依赖库
必要

libc++.tbd

配置 Xcode 我的项目
Build Settings 中的 Other Linker Flags 增加”-ObjC”

配置 plist 文件 (MOBAppKey 和 MOBAppSecret 以及 https)
(1)在我的项目中的 info.plist 文件中增加键值对,键别离为 MOBAppKey 和 MOBAppSecret,值为在之前在 MobTech 官网开发者后盾申请的 AppKey 和 AppSecret:
(2)ATS 配置

目前运营商个别接口为 http 申请,对于全局禁用 Http 的我的项目,须要设置 Http 白名单。倡议按以下形式配置 Info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSExceptionDomains</key>
 <dict>
        <key>zzx9.cn</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>cmpassport.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>id6.me</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>wostore.cn</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>mdn.open.wo.cn</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
</dict>
</plist>

(3)禁止上传设施信息 (2.0.6 版本更新)

取号过程产生失败的时候会默认收集以后错误信息上传帮忙开发者精确定位错误信息, 若不想上传可在 plist 中配置 mobForbidden(默认为 NO) 为 YES

API 接口

回传用户隐衷受权后果(uploadPrivacyPermissionStatus)
为保障您的 App 在集成 MobSDK 之后可能满足工信部相干合规要求,您应确保 App 装置首次冷启动且获得用户浏览您《隐衷政策》受权之后,调用 MobSDK.uploadPrivacyPermissionStatus 回传隐衷协定受权后果,反之,如果用户不批准您 App《隐衷政策》受权,则不能调用 uploadPrivacyPermissionStatus 回传隐衷协定受权后果,相干隐衷申明请参考合规指南

/**
 上传隐衷协定受权状态
 @param isAgree 是否批准(用户受权后的后果)@param OnResult 执行回调后果,可为 nil(留神业务逻辑不要依赖于这个 success 后果,倡议业务逻辑在调用这个接口之后来写)*/
+ (void)uploadPrivacyPermissionStatus:(BOOL)isAgree
                                                 onResult:(void (^_Nullable)(BOOL success))handler;

示例代码 调用地位开发者能够本人指定,只需在应用 SDK 性能之前调用即可。

#import <MOBFoundation/MobSDK+Privacy.h>
[MobSDK uploadPrivacyPermissionStatus:YES onResult:^(BOOL success) {}];

预登录(preLogin)
接口形容:

办法阐明:

用于提前获取运营商取号凭证,当预登录胜利时,调用拉起受权页办法将立刻拉起受权界面。倡议在须要受权登录前提前调用此办法

能够提前获知以后用户的手机网络环境是否合乎一键登录的应用条件,胜利后将失去用于一键登录应用的长期凭证, 默认的凭证有效期 60s(电信)/30min(联通)/60min(挪动)。

/*
* 预登录
*
* 此调用将有助于进步拉起受权页的速度和成功率
* 不倡议频繁屡次调用和拉起受权页后调用
* 预登录办法回调为 dispatch_get_global_queue(0, 0),非主线程,UI 操作请手动切换到主线程
* 倡议在一键登录前提前调用此办法,比方调一键登录的 vc 的 viewdidload 中 
* 以 if (error == nil) 为判断胜利的根据,而非返回码
*/
+ (void)preLogin:(nullable SecVerifyResultHander)handler;

示例代码

#import <SecVerify/SVSDKHyVerify.h>

[SVSDKHyVerify preLogin:^(NSDictionary * _Nullable resultDic, NSError * _Nullable error) {

    // 判断预取号是否胜利
    if (error == nil && resultDic != nil && [resultDic isKindOfClass:NSDictionary.class]) {// 胜利}else{// 失败}
}];

胜利返回示例

resultDic:
{operator = CUCC;}

参数阐明:

resultDic : {“operatorName”:“中国移动”} // 可能返回 中国移动、中国联通、中国电信. error : error 为 nil,即为预取号胜利.

拉起受权页 + 一键登录(openAuthPageWithModel)
接口形容:
办法阐明:

若曾经提前预取号胜利,SDK 将间接拉起受权页。否则将先在 SDK 外部进行预取号,胜利后拉起受权页

  • uiConfigure :

受权页配 SVSDKHyUIConfigure

uiConfigure.currentViewController 必传

要批改受权页自带控件的款式和增加自定义控件等,请在代理办法中自行设置

受权页将采纳零碎模态弹出形式。因为零碎 present 机制问题,当 currentViewController 非最上层 vc 时,present 将有效且 completion 无回调, 请尝试应用 currentViewController 测试 present 任一 vc 看是否能够失常弹出

  • openAuthPageListener :

拉起受权页回调

回调队列 main_queue

拉起成功失败均有回调,error 为 nil 即为胜利

  • cancelAuthPageListener :

拉起受权页后,SDK 自带的返回 / 敞开按钮回调

回调队列 main_queue

点击内置的勾销、返回按钮,sdk 将主动敞开受权页

勾销、返回等操作,sdk 均视为失败,故此回调 resultDic=nil,error!=nil

  • oneKeyLoginListener :

一键登录点击取 token 回调

回调队列 global_queue

不蕴含 checkBox 未勾选事件

/**
 拉起受权页 + 一键登录
 @param model 受权页配置
 @param openAuthPageListener 拉起受权页回调
 @param cancelAuthPageListener 拉起受权页后,勾销登录 / 返回 / 其余形式登录
 @param oneKeyLoginListener 一键登录按钮获取 token
 */
+ (void)openAuthPageWithModel:(nonnull SVSDKHyUIConfigure *)model
            openAuthPageListener:(SecVerifyResultHander)openAuthPageListener
            cancelAuthPageListener:(SecVerifyResultHander)cancelAuthPageListener
            oneKeyLoginListener:(SecVerifyResultHander)oneKeyLoginListener

示例代码

文档最初提供了多种情景的自定义示例和阐明,可供参考
简洁形式,疾速调起惯例界面:

-(void)openAuthPageButtonClick:(UIButton *)button{

    /**
     * 倡议做避免疾速点击解决
     * eg.
     * [button setEnabled:NO];
     * dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{*      [button setEnabled:YES];
     * });
     */


    //1. 创立一个 ui 配置对象
    SVSDKHyUIConfigure * uiConfigure = [[SVSDKHyUIConfigure alloc]init];

    //2. 设置 currentViewController,必传!请传入以后 vc 或视图顶层 vc,可应用此 vc 调零碎 present 测试是否能够 present 其余 vc
    uiConfigure.currentViewController = self;

    //3. 可选。设置一些定制化属性。eg. 开发者手动管制敞开受权页
    uiConfigure.manualDismiss = @(YES);

    /**
     * 4. 可选。设置代理,接管相干事件,自定义 UI
     * [SVSDKHyVerify setDelegate:self];
     * 代理示例:通过代理接管 ViewDidLoad 事件,并自行设置控件束缚或增加自定义控件
     * -(void)svVerifyAuthPageViewDidLoad:(UIViewController *)authVC userInfo:(SVSDKHyProtocolUserInfo*)userInfo{
     *   - 根本控件对象和相干信息在 userInfo 中
     *   - 可在此处设置根本控件的款式和布局、增加自定义控件等
     * }
     */


    //5. 调用拉起受权页办法,传入 uiConfigure  
    [SVSDKHyVerify openAuthPageWithModel:uiConfigure openAuthPageListener:^(NSDictionary * _Nullable resultDic, NSError * _Nullable error) {

           /**
            * 倡议做避免疾速点击的解决:* dispatch_async(dispatch_get_main_queue(), ^{*    [button setEnabled:YES];
            * });
            */


            if (error != nil) {// 拉起受权页失败}else{// 拉起受权页胜利}

        } cancelAuthPageListener:^(NSDictionary * _Nullable resultDic, NSError * _Nullable error) {// 点击了 sdk 自带返回、敞开、其余形式登录等(增加的自定义敞开按钮事件不会触发此回调)} oneKeyLoginListener:^(NSDictionary * _Nullable resultDic, NSError * _Nullable error) {
            // 一键登录点击获取 token 回调:// 敞开页面。当 uiConfigure.manualDismiss = @(YES)时须要手动调用此办法敞开。[SVSDKHyVerify finishLoginVcAnimated:YES Completion:^{NSLog(@"%s",__func__);
            }];

            __strong typeof(weakSelf) strongSelf = weakSelf;

            // 判断获取 token 是否胜利
            if (error == nil) {

                /**
                 * 获取 token 胜利
                 * 开始调用 token 置换手机号接口
                 * [Tools getMobileByToken:resultDic completion:^(){}]...
                 */

            }else{

                /**
                 * 获取 token 失败
                 * 能够自定跳转其余页面
                 * [self gotoSMSLogin];
                 */

            }

        }];
}

胜利返回示例

resultDic:
{
    opToken = 7b19d948f1e9f18bb20dc66b4c08d68c953005d6c04841319918273113288705;
    operator = CUCC;
    token = "0:AAAAhQAAAIEAD261gzCYXMWXTL8rrAlRf9120a4LLQJHUw6LbV6S74dLCHHczDt54iTE3UziKY6MdKO9LONwgAseaPB+5HrPQZOsJXBvgIDSH5wtF6IiEbVmvwlzyRajVJY3KvAXSDSybH1Mch8XuuBG3zHXxpYs0IltgXAoOsc9/oB4aakwmPUAAACgbzY1oX1Ir9+DyU4R5PdpeWdQw+0IHYcfdKvpVXnXOXZ5ak0nqPNuR1FqCh1RMrPmHXu4K6IwYGOYnXFRtABIE7I7h7EU+2imu4vY9pY3z2OYjHvMFkrHLHCoeh0srZvhMPJscPP6Ue3NPV38sd/4hPH1bp4cH4IjFPpPB5AwWFkIn2N7U8fBX02SbPAxy4ejqCvr9yoxJq2c0dONsn/22Q==";
}

响应参数阐明:

error : error 为 nil,即为登录胜利.

resultDic 为字典类型,登录胜利时返回

置换手机号

SDK 只返回 token,实在手机号需应用 token 独自调接口取得。开发者需自行调用置换手机号接口,此接口须要开发者调用由接入方服务端对接秒验服务端生成的接口,上线前的调试阶段能够间接应用示例 Demo 中的接口

注意事项

  1. 免密登录能力必须通过运营商网关取号,因而必须在手机关上挪动蜂窝网络的前提下才会胜利。
  2. 必须先预取号胜利才能够登录。
  3. 登录办法必须传入 model,model 中必须传入以后控制器。
  4. 登录胜利应用返回的两个 token 和运营商类型,向服务端申请手机号等信息。可参考服务端接入文档

网络取号时候请务必开启手机流量:

  1. 电信反对 4G,5G 网络取号
  2. 挪动, 联通反对 5G,4G, 3G, 2G 网络取号但在非 5G,4G 网络状况下容易取号失败
    针对双卡双待手机只取以后流量卡号

留神: 接到信安部要求, 当前一键登录的协定勾选框必须有且默认非勾选状态, 充分体现是由用户被动受权才应用的

应用 SDK

重要提醒

v3.0.2 开始,标准版应用 SVSDKHyVerify 类作为 sdk 主类,与之相干的头文件有:

1. 受权页配置类 –SVSDKHyUIConfigure

2. 回调信息获取类 –SVSDKHyProtocolUserInfo

3. 援用头文件形式
#import <SecVerify/SVSDKHyVerify.h>
另外 v3.0.2 开始,三网同对立应用

受权页 vc 类 –SVSDKVerifyOperationViewController

受权页 nav 类 –SVSDKVerifyOperationNavigationController

受权页协定页类 –SVSDKWebCarouselViewController

受权页协定页 nav 类(协定页 present 时应用)–SVSDKWebCarouselNavigationController

如之前接入代码应用过字符串类名匹配的,如 SVOperationViewController、SVBaseWebViewVC、ZUOAuthViewController、UAAuthViewController、UANavigationController、EAccountAuthenticateViewController、EAccountOPSWebViewController 的,倡议移除相干代码

退出移动版