关于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的,倡议移除相干代码

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理