# SKF C语言接入方案
# 1 文档说明
# 1.1 使用对象
接入SKF 产品以 C语言接入的第三方应用相关人员
# 1.2 版本信息
| 版本信息 | 版本信息 | 修订人 | 修订内容 |
|---|---|---|---|
| 3.3 | 2023-03-26SIMKEY团队 | 创建 |
# 2 术语及缩略语定义
下列术语、定义和缩略语适用于本标准
| 名词 | 解释 |
|---|---|
| API | Application Programming Interface,应用程序编程接口 |
| LTE | 3GPP Long Term Evolution,3GPP长期演进技术 |
| VPN | Virtual Private Network,虚拟专用网络 |
| OA | Office Automation,办公自动化 |
| OTA | Over The Air |
| SDK | SoftwareDevelopment Kit,软件开发工具包 |
| OMA | Open Mobile API |
| UICC | Universal Integrated Circuit Card |
| CRM | Customer Relationship Management |
# 访问控制执行器(access control enforcer)
访问控制执行器,组成安全模块访问 API 的部分软件,它从安全模块上获取访问规则,并运用这些规则来控制设备应用,对于安全模块上各种应用程序的访问。
# 终端设备(mobile device)
本规范中特指任何包含安全模块的终端设备,如移动电话。
# 开放移动设备操作系统(open mobile OS)
允许加载第三方应用程序的移动设备操作系统
# 安全模块(secure element)
可用于移动设备的智能卡芯片。例如 UICC 卡/SIM 卡、嵌入式安全模块、高 安全 SD 卡等
# 安全模块应用(applet)
一个安装并运行在安全模块里面的应用。例如一个 Java 卡应用或一个 Native 卡应用。为与设备应用区别,本文档中统一称为“Applet”。
# 终端应用(dev ice a pplication)
一个安装并运行于移动设备上的应用程序,简称“应用”。本文中的手机终端 应用特指集成 CTPass SDK 包的手机应用程序。
# 会话(session)
设备(例如手机终端)应用和安全模块之间打开的一个连接。
# 通道(channel)
设备(例如手机终端)应用和 Applet 之间打开的一个连接。
# 3 Xcode 工程配置
# 3.1 在项目中集成SDK
# 3.1.1 拷贝文件
将 libSkfApiLib.a, include 拷贝到工程目录下
# 3.1.2 添加权限
Privacy - Bluetooth Always Usage Description
Privacy - Bluetooth Peripheral Usage Description
1
2
2
# 3.2 调用SKF SDK
先添加头文件
#import "SkfApiLib.h"
1
# 3.2.1 在 C 语言中的使用
修改ViewController.m文件为ViewController.mm
@interface ViewController ()
@end
@implementation ViewController
#pragma mark - 连接卡
- (void)useConnectSimKey{
char *c_outSzNameList = (char *)malloc(1024);
memset(c_outSzNameList, '\0', 1024);
ULONG c_inoutPulSize = 1024;
//枚举
ULONG EnumDevResult = SKF_EnumDev(NO, c_outSzNameList, &c_inoutPulSize);
if (EnumDevResult != 0){
//枚举失败
}
//连接
NSString *cardName = 卡片名称;
LPSTR ss = (char*)[cardName UTF8String];
ULONG ConnectDevResult = SKF_ConnectDev(ss, &outPhDev2);
if (ConnectDevResult != 0){
//连接失败
}
if (outPhDev2) {
//连接成功
} else {
//连接失败
}
//枚举应用列表
ULONG EnumApplicationResult = SKF_EnumApplication(outPhDev2, c_outSzAppName, &c_inoutPulSize);
if (EnumApplicationResult != 0){
//枚举应用列表失败
}
int dstIndex = 0;
char *buf = c_outSzAppName;
char *outSzAppName = (char *)malloc(c_inoutPulSize);
while (*buf) {
int nameLength = strlen(buf);
memcpy((outSzAppName + dstIndex), buf, nameLength);
buf += strlen(buf) + 1;
dstIndex += nameLength;
*(outSzAppName + dstIndex) = ',';
dstIndex++;
}
NSData *uAppListData = [NSData dataWithBytes:outSzAppName length: c_inoutPulSize-2];
NSString *uAppListString = [[NSString alloc] initWithData:uAppListData encoding:NSUTF8StringEncoding];;
NSArray *uAppList = [uAppListString componentsSeparatedByString:@","];
NSString *_strresult = @"";
for (NSString *dic in uAppList) {
_strresult = [NSString stringWithFormat:@"%@<font color = 'd2905a' size = 4>%@</font></br>",_strresult, dic];
}
}
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55