开发工具: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"?&gt;
<!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操作请手动切换主线程
* 建议在一键登录前提前调用此方法比如一键登录的vcviewdidload中 
* 以 if (error == nil) 为判断成功的依据,而非返回码
*/
+ (void)preLogin:(nullable SecVerifyResultHander)handler;

示例代码

#import <SecVerify/SVSDKHyVerify.h>

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

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

成功返回示例

resultDic:
{
    operator = CUCC;
}

参数说明

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

拉起授权页+一键登录(openAuthPageWithModel)
接口描述:
方法说明

若已经提前预取号成功,SDK将直接拉起授权页。否则将先在SDK内部进行预取号,成功后拉起授权页

授权页配SVSDKHyUIConfigure

uiConfigure.currentViewController必传

修改授权页自带控件样式和添加自定义控件等,请在代理方法中自行设置

授权页将采用系统模态弹出方式。由于系统present机制问题,当currentViewController非最上层vc时,present无效completion无回调,请尝试使用currentViewController测试present任一vc是否可以正常弹出

拉起授权页回调

回调队列main_queue

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

拉起授权页后,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的,建议移除相关代码

原文地址:https://blog.csdn.net/apkkkk/article/details/126406062

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29874.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

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