持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
概念
近场通信(NFC),小程序读取NFC,这种功能大多数人用的较少,因为小程序大多数是为了用户使用方便,不管是IOS端和Android端都可以随扫随用,个人理解小程序的作用是:
- 方便用户随时使用操作
- 往app端引流 但是请注意:该NFC功能只限于Android系统,并且仅支持有NFC读取模块的手机使用!
读卡组件
当标签或者NFC卡片贴在设备背部时,设备默认会响震动播放提示音,这说明已经读取成功。
- 读取成功做了什么
- 获取getNFCAdapter实例对象 在这之前不管之前有没有创建过该实例对象,都需要给它取消监听NFC TAG,根据之前踩过的坑,它会读取失败或者需要读取两次(因为创建了两次)
nfc.offDiscovered(wx.getNFCAdapter())
const nfc = wx.getNFCAdapter();
- 会判断扫描标签类型 首先标签会分为加密和不加密两种,其次是它的协议类型,如果加密则更复杂,甚至需要引入专门解密的包组件。
- NDEF格式,支持对支持该格式的标签进行读写
- NFCA,NFCB分别只支持NFC-A(ISO 14443-3A or 3B)的标签进行读写
- lsoDep只支持ISO-DEP(ISO 14443-4)的标签进行读写
- 监听读取标签的状态
- 监听 注册标签监听,是首先读取的意思,类似于生命周期的第一步创建,把监听的方法放到onDiscovered()内。
nfc.onDiscovered(this.successNfc)
开始监听标签 进入到开始监听,意味着读卡成功或者失败,一般情况下只需要监听失败的就可以了,原因:读取成功会自动进入到数据处理的过程
nfc.startDiscovery({
fail(err) {
if (err.errCode == 13000) {}
if (err.errCode == 13001) {}
if (err.errCode == 13016) {}
}
})
常见的错误码:
13000:设备不支持NFC; 13001:系统NFC开关未打开; 13016:连接失败
- 读取成功 读取成功以Promis的形式返回,根据读取的区位不同,分别获取不同的数据;
that.successNfc= function (res) {
var message = res.messages && res.messages[0].records[0].payload
})
随后,把NFC扫描结果的ID转换为16进制,创建一个8位无符号整数值类型化数组。
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('').toUpperCase();
- 读取失败 读取失败后,可再次进行读取。读取失败的原因:
- 标签贴的时间太短
- 标签协议不支持