更新记录
1.0.3(2021-10-22) 下载此版本
修复IOS打包问题
1.0.2(2021-10-12) 下载此版本
修复android版本蓝牙连接失败json解析异常问题;
1.0.1(2021-07-29) 下载此版本
更新权限说明
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | 适用版本区间:9 - 14 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
使用说明
安芯智能门锁 SDK 插件
1、判断蓝牙是否打开
icinLock.isBluetoothEnable()
2、扫描设备
lock
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
mRssi | int | 信号(负值) |
mac | string | 蓝牙 mac(只有 android 返回) |
const icinLock = uni.requireNativePlugin('ICIN-Lock');
icinLock.scanDevices(
(lock) => {
//扫描到一个设备回调一次
},
() => {
//扫描结束
}
);
3、蓝牙连接
icinLock.connect(
lockId,
(lock) => {
//连接成功
},
(err) => {
//连接失败
console.log(err.code + ',' + err.description);
}
);
4、断开蓝牙连接
icinLock.disconnectAll();
5、绑定门锁
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
keyId | string | 钥匙 ID,不超过 40 字节 |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
time | int | 秒为单位的时间戳 |
nbIp | string | nb 网关 ip |
nbPort | string | nb 网关端口 |
返回值 AddUserResponse
属性名 | 类型 | 说明 |
---|---|---|
authKey | string | 锁唯一鉴权密钥 |
icinLock.bindLock(
{
lockId: 'ICIN_b47f6ce31ad8',
keyId: 'keyId',
superAdminId: 'www.icintech.com',
time: Math.round(Date.now() / 1000),
nbIp: '192.168.1.1',
nbPort: '9090',
},
(result) => {
if (result.status == 0) {
//绑定成功
var authKey = result.response.authKey;
} else {
//绑定失败
}
}
);
6、添加用户
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
authKey | string | 鉴权密钥 |
role | byte | 1 管理员;0 普通用户 |
返回值 AddUserResponse
属性名 | 类型 | 说明 |
---|---|---|
authCode | string | 该用户授权码 |
icinLock.addUser(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
authKey: 'authKey',
role: 1, //1管理员,0普通用户
},
(result) => {
if (result.status == 0) {
//添加成功
var authcode = result.response.authCode;
} else {
//添加失败
}
}
);
7、开门
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
openMode | byte | 0 正常(会对门锁对时)1 离线(不会对时) |
openTime | byte | 如果 openMode 是 0 时,对时的时间(单位秒) |
authCode | string | 鉴权码 |
icinLock.openDoor(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
openMode: 1,
openTime: Math.round(Date.now() / 1000),
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//开锁成功
} else {
//开锁失败
}
}
);
8、设置网关
NB 锁有效
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
openMode | byte | 0 正常(会对门锁对时)1 离线(不会对时) |
openTime | byte | 如果 openMode 是 0 时,对时的时间(单位秒) |
authCode | string | 鉴权码 |
icinLock.setGateway(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
nbIp: '192.168.1.1',
nbPort: '9090',
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//设置网关成功
} else {
//设置网关失败
}
}
);
9、设置 WIFI
针对 WIFI 锁有效
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
wifiSSID | string | 0 正常(会对门锁对时)1 离线(不会对时) |
wifiPWD | string | 如果 openMode 是 0 时,对时的时间(单位秒) |
authCode | string | 鉴权码 |
icinLock.setWifi(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
wifiSSID: 'wifi名称',
wifiPWD: 'wifi密码',
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//设置WIFI成功
} else {
//设置WIFI失败
}
}
);
10、删除用户
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
authKey | string | 鉴权密钥 |
icinLock.deleteUser(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
authKey: 'authKey',
},
(result) => {
if (result.status == 0) {
//删除成功
} else {
//删除失败
}
}
);
11、读取锁状态
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
返回值 ReadLockInfoResponse
属性名 | 类型 | 说明 |
---|---|---|
softVersion | int | 最高字节表示硬件版本,其它三个字节表示软件版本 |
power | byte | 当前电量 |
nbStat | byte | Nb 网络状态,1:在线;0:不在线;2:无信号 |
nbIMEI | string | NB 卡的 IMEI 号 |
nbIMSI | string | Nb 卡的 IMSI 号 |
appUserCount | int | app 用户数量 |
remainCount | int | 剩余可添加用户数量 |
notUploadCount | int | 未上传开锁记录数量 |
pwdCount | int | 已设置开门密码数量 |
fingerprintCount | int | 已设置开门指纹数量 |
lockTime | int | 门锁时间(单位秒) |
wifiSSID | string | wifi 名称 |
serverIp | string | 服务器 ip |
serverPort | string | 服务器端口 |
icinLock.readLockInfo(
{
lockId: 'ICIN_b47f6ce31ad8',
},
(result) => {
if (result.status == 0) {
var lockInfo = result.response;
} else {
//读取失败
}
}
);
12、重置门锁
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authKey | string | 鉴权密钥 |
icinLock.resetLock(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'keyId',
authKey: 'authKey',
},
(result) => {
if (result.status == 0) {
//重置成功
} else {
//重置失败
}
}
);
13、设置音量
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
volumeFlag | byte | 0 静音;1 声音低;2 声音高 |
authCode | string | 鉴权码 |
icinLock.setVolume(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
volumeFlag: 2,
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//设置音量成功
} else {
//设置音量失败
}
}
);
14、同步门锁时间
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
time | int | 当前时间(单位秒) |
authCode | string | 鉴权码 |
icinLock.syncLockTime(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
authCode: 'authCode',
time: Math.round(Date.now() / 1000),
},
(result) => {
if (result.status == 0) {
//同步成功
} else {
//同步失败
}
}
);
15、固件升级
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
userId | string | 用户 ID,不超过 20 字节 |
fileVersion | int | 固件版本号 |
file | string | 固件转 16 进制字符串 |
authCode | string | 鉴权码 |
icinLock.updateFirmware(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
fileVersion: 0x1e150419,
file: hexStr,
authCode: 'authCode',
},
(result) => {
if (result.status === 0) {
//会有多次回调
if (result.response.progress >= 100) {
//更新固件成功
}
} else {
//更新固件失败
}
}
);
16、查询密码
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authUserId | string | 授权用户 ID |
userId | string | 用户 ID,不超过 20 字节 |
authCode | string | 鉴权码 |
返回值 QueryPasswordResponse
属性名 | 类型 | 说明 |
---|---|---|
pwdNo | byte | 密码序号 |
useCountLimit | byte | 剩余使用次数 |
icinLock.queryPassword(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
authUserId: 'admin',
userId: 'admin',
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//查询成功
var list = result.response.passwords;
} else {
//查询失败
}
}
);
17、添加密码
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authUserId | string | 授权用户 ID |
userId | string | 用户 ID,不超过 20 字节 |
pwdNo | byte | 单个用户在同一把锁密码序号不能重复 |
password | string | 密码不超过 20 个字节 |
useCountLimit | byte | 使用次数(255 表示永久有效) |
startTime | int | 生效时间(单位秒) |
endTime | int | 失效时间(单位秒) |
authCode | string | 鉴权码 |
icinLock.addPassword(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
authUserId: 'admin',
userId: 'admin',
pwdNo: 0,
password: '123456',
useCountLimit: 0xff,
startTime: Math.round(startTime / 1000),
endTime: Math.round(endTime / 1000),
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//添加密码成功
} else {
//添加密码失败
}
}
);
18、删除密码
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authUserId | string | 授权用户 ID |
userId | string | 用户 ID,不超过 20 字节 |
pwdNo | byte | 密码序号 |
authCode | string | 鉴权码 |
icinLock.deletePassword(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
authUserId: 'admin',
userId: 'admin',
pwdNo: 0,
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//删除成功
} else {
//删除失败
}
}
);
19、查询指纹
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authUserId | string | 授权用户 ID |
userId | string | 用户 ID,不超过 20 字节 |
pwdNo | byte | 密码序号 |
authCode | string | 鉴权码 |
返回值 QueryFingerprintResponse
属性名 | 类型 | 说明 |
---|---|---|
fingerprintNo | short | 指纹编号 2 个字节 |
alarmFinger | byte | 是否是胁迫指纹(0 否;1 是) |
icinLock.queryFingerprint(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
authUserId: 'admin',
userId: 'admin',
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//查询指纹成功
var list = result.response.fingerprints;
} else {
//查询指纹失败
}
}
);
20、添加指纹
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authUserId | string | 授权用户 ID |
userId | string | 用户 ID,不超过 20 字节 |
alarmFinger | byte | 是否是胁迫指纹(0 否;1 是) |
authCode | string | 鉴权码 |
icinLock.addFingerprint(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
authUserId: 'admin',
userId: 'admin',
alarmFinger: 0,
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
//会回调4次
if (result.response.completeFlag == 1) {
//录入成功
}
} else {
//添加指纹失败
}
}
);
21、读取开门记录
每次最多读 5 条,直到锁端返回空,需要注意的是,当读取下一个 5 条时,之前的记录将清空。
请求参数
属性名 | 类型 | 说明 |
---|---|---|
lockId | string | 锁 ID |
superAdminId | string | 超管用户 ID,不超过 20 字节 |
keyId | string | 钥匙 ID,不超过 40 字节 |
authUserId | string | 授权用户 ID |
userId | string | 用户 ID,不超过 20 字节 |
authCode | string | 鉴权码 |
返回值 ReadLockRecordResponse
属性名 | 类型 | 说明 |
---|---|---|
userId | string | 用户 ID |
openMode | byte | 开锁方式 0 机械钥匙;1 指纹;2 密码;3app;4 蓝扣;5 远程;6RF 卡; |
openTime | int | 开锁时间 |
power | byte | 电量 |
icinLock.readOpenRecord(
{
lockId: 'ICIN_b47f6ce31ad8',
superAdminId: 'www.icintech.com',
keyId: 'adminKeyId',
userId: 'admin',
authCode: 'authCode',
},
(result) => {
if (result.status == 0) {
var list = result.response.recordInfos;
if (list && list.length > 0) {
//调用readNextOpenRecord前,上传list到服务器保存,防止记录丢失
//读取后边的开门记录
icinLock.readNextOpenRecord();
}
} else {
//读取开门记录失败
}
}
);
22、清除缓存密钥
删除用户时使用,清除对应用户的缓存密钥。
icinLock.clearPrivateKey(lockId, userId);
23、错误码说明
错误码(16 进制) | 说明 |
---|---|
0x04 | 用户未登记 |
0x05 | 参数错误 |
0x07 | 无权限 |
0x08 | 应答超时 |
0x09 | 权限校验错误 |
0x0a | 钥匙不存在 |
0x0b | 钥匙过期 |
0x0c | 钥匙数量达上限 |
0x0d | 钥匙无效 |
0x0e | 钥匙已存在 |
0x0f | 用户已存在 |
0x10 | 密码失效 |
0x11 | 无效指令 |
0x12 | 门锁时间异常 |
0x13 | 门锁 NB 芯片异常 |
0x14 | 门锁无 NB 芯片 |
0x15 | 升级程序校验不通过 |
0x18 | 升级程序长度超长 |
0x30 | 到达数目定义上限 |
0x31 | 密码已存在 |
0x32 | 禁止删除超管 |
0xff | 异常未知错误 |
0x60 | 锁端应答超时 |
0x61 | 应答解析异常 |
0x62 | 内部捕获异常 |
0x63 | 写数据异常 |
0x64 | 蓝牙连接失败 |
0x65 | 蓝牙连接超时 |
0x66 | 蓝牙未打开 |
0x67 | lockId 格式错误 |
0x68 | 蓝牙未连接 |