04 国密无感登录

国密无感登录集成文档说明


IOS SDK集成文档

<p>[TOC]</p> <h1>概述</h1> <p>本文是密认宝无感登录SDK_IOS端接入文档,用于指导SDK的集成使用。在对接之前您需要花5-10分钟阅读新手教程和以下内容。</p> <h1>前置条件</h1> <p>SDK⽀持iOS 8.0+及以上版本</p> <h1>开发环境搭建</h1> <p>sdk回调默认为全局global队列,如需UI操作请务必自行切换到主线程</p> <h1>集成SDK</h1> <h2>第一步:导入framework</h2> <p>将密认SDK压缩包中framework文件夹下所有资源添加到工 程中(注意勾选Copy items if needed) <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=09a460c9f4e66f56d0ea168305baf222&amp;amp;file=file.png" alt="" /> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=00bc25a56a6995bc62b03a85557a2c7a&amp;amp;file=file.png" alt="" /></p> <h2>第二步:Xcode配置</h2> <p>OtherLinkerFlags中 添加<strong>-ObjC</strong>:xcode-&gt;BuildSetting-&gt;Other Linker Flags 添加 <strong>-ObjC</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c54906c88a2f2e5431a5c78417597620&amp;amp;file=file.png" alt="" /></p> <h2>日志开关</h2> <p>控制debug日志输出开关 方法原型</p> <pre><code class="language-objective-c">/**  * 模式控制台日志输出控制(默认关闭)  @param enable开关  */ + (void)printConsoleEnable:(BOOL)enable;</code></pre> <p>接口作用:控制debug日志输出开关 YES为开启 NO为关闭</p> <p>参数描述</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">是否必填</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">enable</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">BOOL</td> <td style="text-align: left;">日志开启标识、默认关闭</td> </tr> </tbody> </table> <h2>获取SDK版本</h2> <p>获取当前SDK的使用版本 方法原型</p> <pre><code class="language-objective-c">/// 获取SDK版本 + (NSString *_Nullable)getSdkVersion;</code></pre> <h2>设置预取号超时时间</h2> <p>设置预取号的超时时间 方法原型</p> <pre><code class="language-objective-c">/// 设置预取号超时时间(默认10秒) /// @param double           超时时间 +(void)setPreGetPhonenumberTime:(double)timeout;</code></pre> <p>参数描述</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">是否必填</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">enable</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">double</td> <td style="text-align: left;">超时时间,默认10秒</td> </tr> </tbody> </table> <h1>SDK的使用</h1> <h2>初始化</h2> <p>传入appId进行初始化,初始化成功之后即可使用SDK中的方法。 方法原型</p> <pre><code class="language-objective-c">/**初始化*/ +(void)initWithAppId:(NSString *)appId complete:(nullable ZtrustComplete)complete;</code></pre> <p>参数描述</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">是否必填</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">appId</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">NSString</td> <td style="text-align: left;">通过后管平台获取密认appID</td> </tr> <tr> <td style="text-align: left;">complete</td> <td style="text-align: left;">选填</td> <td style="text-align: left;">ZtrustComplete</td> <td style="text-align: left;">初始化回调block,可以在此回调block中接收初始化情况,也可以不关心初始化结果</td> </tr> </tbody> </table> <p>complete:初始化回调,返回complete.error不为空即初始化成功。 使用场景:调用SDK其它方法前必须进行初始化操作,多次调用不会多次初始化,与一次调用效果一致。</p> <p>请求示例代码</p> <pre><code class="language-objective-c">导入密认SDK头文件 #import &amp;lt;ZtrustDynamic/ZtrustDynamic.h&amp;gt; 在AppDelegate中的 didFinishLaunchingWithOptions方法中添加初始化代码 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //初始化 [ZtrustManager  initWithAppId:appIDStr complete:^(ZtrustCompleteResult * _Nullable completeResult)  if(!completeResult.error){        NSLog(@&amp;quot;初始化成功&amp;quot;); } }]; }</code></pre> <p>complete:初始化回调,返回complete.error不为空即初始化成功。</p> <h2>无感登录</h2> <p>获取uToken、用户昵称、用户头像路径、自定义参数、签名摘要、服务端api版本号参数。(服务端调用获取会话密钥接口时所需参数)</p> <p>方法原型:</p> <pre><code class="language-objective-c">/**  * 无感认证  * 回调中如需UI操作,建议自行切到主线程  @param complete认证结果  */ +(void)noSenseZtrustAuth:(nullable ZtrustComplete)complete;</code></pre> <p>参数描述</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">是否必填</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">complete</td> <td style="text-align: left;">选填</td> <td style="text-align: left;">ZtrustComplete</td> <td style="text-align: left;">认证回调block,可以在此回调block中接收认证结果</td> </tr> </tbody> </table> <p>以 complete.error为判断成功的依据,不为空则代表认证失败。</p> <p>使用场景: 执行获取会话密钥接口前调用此方法,获取会话密钥接口需要的参数信息。</p> <p>请求示例代码</p> <pre><code class="language-objective-c">#import &amp;lt;ZtrustDynamic/ZtrustDynamic.h&amp;gt;//开发者调拉起授权页的vc @implementation LoginViewController - (void)loginClick{        //取号        [ZtrustManager  noSenseZtrustAuth::^(ZtrustCompleteResult * _Nonnull completeResult) {          if(!completeResult.error){ dispatch_async(dispatch_get_main_queue(), ^{ //签名摘要                       NSString *signDigest = completeResult.data[@&amp;quot;signDigest&amp;quot;]; //昵称                         NSString *nickname = completeResult.data[@&amp;quot;nickname&amp;quot;]; //头像地址                         NSString *iconPath = completeResult.data[@&amp;quot;iconPath&amp;quot;]; //自定义参数                         NSString *userDefined = completeResult.data[@&amp;quot;userDefined&amp;quot;]; //会话密钥加密的用户ID                         NSString *uToken = completeResult.data[@&amp;quot;uToken&amp;quot;]; //服务端api版本号 NSString *apiVersion = completeResult.data[@&amp;quot;apiVersion&amp;quot;]; }); } ]; }</code></pre> <p>(void)noSenseZtrustAuth:(nullable ZtrustComplete)complete 返回参数complete.error,含义如下: 以 complete.error为判断成功的依据,不为空则代表认证失败</p> <h2>获取密钥因子</h2> <p>方法原型</p> <pre><code class="language-objective-c">/**  * 获取密钥因子    返回值为密钥因子  */ + (NSString *)getKeyFactor;</code></pre> <p>接口作用:获取密钥因子</p> <h2>无感登录激活密码模块</h2> <p>用户使用其它平台取号登录时,调用次方法。 方法原型:</p> <pre><code class="language-objective-c">/**  其它平台取用户ID登录  @param userID 用户标识(密钥因子sm4加密,密文转16进制字符串) @param nickname 用户昵称  @param iconPath 用户头像地址  @param userDefined 用户自定义信息 @param keyFactor 密钥因子  @param loginListener 登录监听结果  * 回调中如需UI操作,建议自行切到主线程  */ + (void)ztrustActive:(NSString *_Nullable)userID nickname:(NSString *_Nullable)nickname iconPath:(NSString *_Nullable)iconPath userDefined:(NSString *_Nullable)userDefined keyFactor:(NSString *_Nullable)keyFactor loginListener:(ZtrustComplete _Nullable )loginListener; </code></pre> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">是否必填</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">userID</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">NSString</td> <td style="text-align: left;">用户标识(密钥因子sm4加密,密文转16进制字符串)</td> </tr> <tr> <td style="text-align: left;">nickname</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">NSString</td> <td style="text-align: left;">用户昵称</td> </tr> <tr> <td style="text-align: left;">iconPath</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">NSString</td> <td style="text-align: left;">用户头像地址</td> </tr> <tr> <td style="text-align: left;">userDefined</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">NSString</td> <td style="text-align: left;">用户自定义信息</td> </tr> <tr> <td style="text-align: left;">keyFactor</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">NSString</td> <td style="text-align: left;">密钥因子</td> </tr> <tr> <td style="text-align: left;">loginListener</td> <td style="text-align: left;">必填</td> <td style="text-align: left;">ZtrustComplete</td> <td style="text-align: left;">其它平台取号登录的回调,成功、失败均触发</td> </tr> </tbody> </table> <p>使用场景</p> <p>用户进行其它平台取号登录时,调用次方法。 请求示例代码</p> <pre><code class="language-objective-c">导入密认SDK头文件 #import &amp;lt;ZtrustDynamic/ZtrustDynamic.h&amp;gt; 在需要使用其它平台取号登录的地方调用该接口 // 用户需要使用其它平台取号登录时的方法 - (void)loginBtnClick:(UIButton *)sender { [ZtrustManager ztrustActive:mobileEnStr nickname:@&amp;quot;nickname&amp;quot; iconPath:@&amp;quot;iconPath&amp;quot; userDefined:@&amp;quot;userDefined&amp;quot; keyFactor:@ &amp;quot;keyFactor&amp;quot; loginListener:^(ZtrustCompleteResult * _Nullable completeResult) {         if(completeResult.error){            dispatch_async(dispatch_get_main_queue(), ^{ [SVProgressHUD showErrorWithStatus:completeResult.message];            });         }else{             dispatch_async(dispatch_get_main_queue(), ^{              [SVProgressHUD showSuccessWithStatus:@&amp;quot;登录成功&amp;quot;];         }     }];</code></pre> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">是否必填</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">completion</td> <td style="text-align: left;">选填</td> <td style="text-align: left;">void</td> <td style="text-align: left;">关闭授权页回调block,可以在此回调处理关闭后的结果</td> </tr> </tbody> </table> <h2>返回码</h2> <table> <thead> <tr> <th style="text-align: left;">返回码</th> <th style="text-align: left;">返回码描述</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">0</td> <td style="text-align: left;">登录成功,解析ZtrustComplete,可得到网络请求参数</td> </tr> <tr> <td style="text-align: left;">6001</td> <td style="text-align: left;">参数错误</td> </tr> <tr> <td style="text-align: left;">6002</td> <td style="text-align: left;">安全插件不存在</td> </tr> <tr> <td style="text-align: left;">6003</td> <td style="text-align: left;">配置文件不存在</td> </tr> <tr> <td style="text-align: left;">6004</td> <td style="text-align: left;">创建文件夹失败</td> </tr> <tr> <td style="text-align: left;">6005</td> <td style="text-align: left;">删除文件失败</td> </tr> <tr> <td style="text-align: left;">6006</td> <td style="text-align: left;">删除文件夹失败</td> </tr> <tr> <td style="text-align: left;">6007</td> <td style="text-align: left;">创建文件失败</td> </tr> <tr> <td style="text-align: left;">6008</td> <td style="text-align: left;">创建配置文件失败</td> </tr> <tr> <td style="text-align: left;">6009</td> <td style="text-align: left;">安全插件不正确</td> </tr> <tr> <td style="text-align: left;">6010</td> <td style="text-align: left;">还原插件失败</td> </tr> <tr> <td style="text-align: left;">6011</td> <td style="text-align: left;">解压失败</td> </tr> <tr> <td style="text-align: left;">6013</td> <td style="text-align: left;">目录不存在</td> </tr> <tr> <td style="text-align: left;">6015</td> <td style="text-align: left;">获取uuid失败</td> </tr> <tr> <td style="text-align: left;">6016</td> <td style="text-align: left;">获取插件ID失败</td> </tr> <tr> <td style="text-align: left;">6021</td> <td style="text-align: left;">会话密钥为空</td> </tr> <tr> <td style="text-align: left;">6022</td> <td style="text-align: left;">会话密钥解码失败</td> </tr> <tr> <td style="text-align: left;">6037</td> <td style="text-align: left;">初始化插件失败</td> </tr> <tr> <td style="text-align: left;">6038</td> <td style="text-align: left;">参数长度错误</td> </tr> <tr> <td style="text-align: left;">6039</td> <td style="text-align: left;">硬件信息校验失败</td> </tr> <tr> <td style="text-align: left;">6041</td> <td style="text-align: left;">写入数据失败</td> </tr> <tr> <td style="text-align: left;">6042</td> <td style="text-align: left;">base64解码失败</td> </tr> <tr> <td style="text-align: left;">6043</td> <td style="text-align: left;">插件加密失败</td> </tr> <tr> <td style="text-align: left;">6050</td> <td style="text-align: left;">json转换失败</td> </tr> <tr> <td style="text-align: left;">6051</td> <td style="text-align: left;">sm2加密失败</td> </tr> <tr> <td style="text-align: left;">6052</td> <td style="text-align: left;">网络请求失败</td> </tr> <tr> <td style="text-align: left;">6053</td> <td style="text-align: left;">加载插件失败</td> </tr> <tr> <td style="text-align: left;">6054</td> <td style="text-align: left;">消息对比失败</td> </tr> <tr> <td style="text-align: left;">6060</td> <td style="text-align: left;">认证超时</td> </tr> <tr> <td style="text-align: left;">6064</td> <td style="text-align: left;">json转换失败</td> </tr> <tr> <td style="text-align: left;">6065</td> <td style="text-align: left;">国密认证失败</td> </tr> <tr> <td style="text-align: left;">其他</td> <td style="text-align: left;">其他错误</td> </tr> </tbody> </table>

页面列表

ITEM_HTML