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;file=file.png" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=00bc25a56a6995bc62b03a85557a2c7a&amp;file=file.png" alt="" /></p>
<h2>第二步:Xcode配置</h2>
<p>OtherLinkerFlags中 添加<strong>-ObjC</strong>:xcode->BuildSetting->Other Linker Flags 添加 <strong>-ObjC</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c54906c88a2f2e5431a5c78417597620&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 &lt;ZtrustDynamic/ZtrustDynamic.h&gt;
在AppDelegate中的 didFinishLaunchingWithOptions方法中添加初始化代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化
[ZtrustManager initWithAppId:appIDStr complete:^(ZtrustCompleteResult * _Nullable completeResult)
if(!completeResult.error){
NSLog(@&quot;初始化成功&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 &lt;ZtrustDynamic/ZtrustDynamic.h&gt;//开发者调拉起授权页的vc
@implementation LoginViewController
- (void)loginClick{
//取号
[ZtrustManager noSenseZtrustAuth::^(ZtrustCompleteResult * _Nonnull completeResult) {
if(!completeResult.error){
dispatch_async(dispatch_get_main_queue(), ^{
//签名摘要
NSString *signDigest = completeResult.data[@&quot;signDigest&quot;];
//昵称
NSString *nickname = completeResult.data[@&quot;nickname&quot;];
//头像地址
NSString *iconPath = completeResult.data[@&quot;iconPath&quot;];
//自定义参数
NSString *userDefined = completeResult.data[@&quot;userDefined&quot;];
//会话密钥加密的用户ID
NSString *uToken = completeResult.data[@&quot;uToken&quot;];
//服务端api版本号
NSString *apiVersion = completeResult.data[@&quot;apiVersion&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 &lt;ZtrustDynamic/ZtrustDynamic.h&gt;
在需要使用其它平台取号登录的地方调用该接口
// 用户需要使用其它平台取号登录时的方法
- (void)loginBtnClick:(UIButton *)sender {
[ZtrustManager ztrustActive:mobileEnStr nickname:@&quot;nickname&quot; iconPath:@&quot;iconPath&quot; userDefined:@&quot;userDefined&quot; keyFactor:@
&quot;keyFactor&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:@&quot;登录成功&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>