微信小程序读写NFC标签(实现NFC标签快速拉起小程序)实战

embedded/2025/1/15 12:18:52/

背景:

1、通过NFC进行写入,读取(读写NFC小程序>微信小程序只支持Andriod,ios可通过第三方工具写入或读取)
2、通过NFC标签贴近手机,自动拉起小程序某个页面(只要NFC标签里有urlScheme了,ios和Andriod都可以拉起)

前提:

1、准备NFC标签,并且NFC标签支持读写操作
2、申请好NFC标签的能力,通过modelId从服务端获取urlScheme(申请NFC标签能力必须是企业的认证,申请比较麻烦,跟着官方提供的教程,一步一步来)
实例化NFC、开启读取NFC、监听NFC、写入内容到NFC
  initNFC () {const __NFCInstance = wx.getNFCAdapter()this.setData({ NFCInstance: __NFCInstance })__NFCInstance.startDiscovery({success: (res) => {__NFCInstance.onDiscovered(this.discoverHandlerNfc)},fail: (err) => {console.log(error)}})},async discoverHandlerNfc (res) {// res:此res就是当前NFC标签里的内容,可根据转换自行取出里面需要用到的值const str = this.NFCbuf2hex(res.id)if (str ) {// 获取Ndef实例,通过Ndef读写const NDEF = await adapter.getNdef()// 建立连接NDEF.connect({success: async (res) => {// 写入records 兼容处理, 第一条ios,第二条Andriod// urlScheme, 是通过小程序后台申请的设备能力后获得modeId,再通过modeId从服务端接口获取const records = [{id: this.NFCStr2ab('mini-ios'),tnf: 1,type: this.NFCStr2ab('U'),payload: this.NFCStr2ab('weixin://dl/xxxxxx/?t=xxxxxxxx', [0])},{id: this.NFCStr2ab('mini-android'),tnf: 4,type: this.NFCStr2ab('android.com:pkg'),payload: this.NFCStr2ab('com.tencent.mm')}]NDEF.writeNdefMessage({records: records,success: (_res) => {console.log('NDEF writeNdefMessage success -> ', _res)// 写入成功 // doSomething},fail: (_error) => {console.log('NDEF writeNdefMessage _error -> ', _error)}})},fail: (error) => {console.log('NDEF error -> ', error)}})}},// 把buffer转换为16进制字符串
NFCbuf2hex (arrayBuffer) {return Array.prototype.map.call(new Uint8Array(arrayBuffer), x => ('00' + x.toString(16)).slice(-2)).join('')
},// 把要写入的内容转换为buffer格式
NFCStr2ab (text, extraBytes) {const uriStr = encodeURIComponent(text)const bytes = []for (let i = 0; i < uriStr.length; i++) {const code = uriStr.charAt(i)if (code === '%') {const hex = uriStr.slice(i + 1, i + 3)const hexVal = parseInt(hex, 16)bytes.push(hexVal)i += 2} else {bytes.push(code.charCodeAt(0))}}if (extraBytes) {bytes.unshift(...extraBytes)}return new Uint8Array(bytes).buffer
},// 取消监听
handleCancelNFC () {this.data.NFCInstance.offDiscovered(this.discoverHandlerNfc)
},

完结!


http://www.ppmy.cn/embedded/111822.html

相关文章

玩转扩展库,温湿度传感器篇!—合宙Air201资产定位模组LuatOS快速入门05

随着LuatOS快速入门系列教程的推出&#xff0c;小伙伴们学习热情高涨。 合宙Air201不仅支持三种定位方式&#xff0c;还具有丰富的扩展功能&#xff0c;通过外扩BTB链接方案&#xff0c;最多可支持21个IO接口&#xff1a;SPI、I2C、UART等多种接口全部支持。 本期&#xff0c…

学习通、智慧职教刷课脚本

&#x1f410;个人主页 可惜已不在 &#x1f40b;可以分享给身边有需要的人&#x1f436; &#x1f409;有用的话就留下一个三连吧&#x1f63c; 目录 一.安装 脚本运行器 篡改猴 - Microsoft Edge Addons 二.安装脚本 三.扩展 一.安装 脚本运行器 安装浏览器 Microsoft E…

Windows技术栈企业基础底座(1)-为基于Windows的Nginx安装证书

企业的基础环境是一个组织的信息化数字化底座。传统企业基础环境多种系统&#xff0c;应用交杂&#xff0c;多种技术栈使得深入运维成本极大&#xff0c;且人员知识技能较难复用&#xff0c;造成资源浪费。本系列旨在尝试推动这一理念, 建立Windows, 或linux聚焦的技术栈的企业…

【提示词】浅谈GPT等大模型中的Prompt

Prompt是人工智能&#xff08;AI&#xff09;提示词&#xff0c;是一种利用自然语言来指导或激发人工智能模型完成特定任务的方法。在AI语境中&#xff0c;Prompt是一种自然语言输入&#xff0c;通常指的是向模型提出的一个请求或问题&#xff0c;这个请求或问题的形式和内容会…

Git常用命令备忘

Git常用命令备忘 Git已经成为程序员日常工具之一&#xff0c;那些Git基本的命令&#xff0c;每天都要用得命令你都记住了吗&#xff1f;如果还没的话&#xff0c;笔者整理了一份清单&#xff0c;以备不时之需所用。 ####三个基本概念 工作区(Workspace)是计算机中项目的根目…

树形dp

C-Cidoai的树上方案_牛客练习赛128 (nowcoder.com) #include "bits/stdc.h" #define int long long using namespace std; const int N2000006; const int mod998244353; vector<int>e[N]; int dp[N][2]; void dfs(int u) {dp[u][0]dp[u][1]1;for(auto it :e[…

【机器学习】使用Numpy实现神经网络训练全流程

文章目录 网络搭建前向传播反向传播损失计算完整代码 曾经在面试一家大模型公司时遇到的面试真题&#xff0c;当时费力写了一个小时才写出来&#xff0c;自然面试也挂了。后来复盘&#xff0c;发现反向传播掌握程度还是太差&#xff0c;甚至连梯度链式传播法则都没有弄明白。 网…

宝塔部署Vue项目解决跨域问题

一、前言 使用宝塔面板部署前端后端项目相比用命令行进行部署要简单许多&#xff0c;宝塔的可视化操作对那些对Linux不熟悉的人很友好。使用宝塔部署SpringBoot后端项目和Vue前端项目的方法如下&#xff1a; 1、视频教程 2、文字教程1 3、文字教程2 以上的教程完全可以按照步骤…