更新记录

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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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 蓝牙未连接

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android: 1、"android.permission.ACCESS_FINE_LOCATION" 位置权限,扫描蓝牙设备使用 2、"android.permission.BLUETOOTH" 蓝牙权限 3、“android.permission.BLUETOOTH_ADMIN” 蓝牙权限 ios: 1、NSBluetoothAlwaysUsageDescription 蓝牙权限 2、NSBluetoothPeripheralUsageDescription 蓝牙权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

作者未提供license.md

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问