AndroidIOS 实现接触NFC自动跳转到App,如果未安装App,则跳转到应用市场

我们是做共享电单车的,友商最近推出了手机碰一碰NFC自动跳转到App自动开锁的功能,这个对于用户体验是有提升的,所以研究了一下。

友商的逻辑是这样的

  • 如果手机没有安装该App,那么触碰NFC后
    • Android自动跳转到应用市场
    • IOS没有反应
  • 如果手机安装了该App,那么触碰NFC后
    • Android自动跳转到App,并识别到NFC中的车辆编号信息,进入开锁页面
    • IOS会弹出一个通知框,点击这个通知框后,跳转到App,并识别到NFC中的车辆编号信息,进入开锁页面

这里的难点在于如何让Android和IOS都能识别并跳转到App,且Android实现没有装App的时候,自动跳转到应用市场的功能。

百思不解之际,想到了可以去读取下友商的NFC卡的信息,看一下他们的格式是怎样的。

这里用到了 TagInfo 和 TagWriter 这两个App,分别可以往NFC卡中读信息和写信息
TagInfo官网
NFC TagInfo App下载地址 (从NFC卡中读数据)
NFC TagWriter App 下载地址 (往NFC卡中写数据)

然后,我们通过TagInfo读取到了NFC卡中的信息如下

某团
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
某桔
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到他们的共同点在于NDEF部分
他们都有这两块 Record

Record #1:URI record`

imeituan://www.meituan.com/bike/nfc?id=8666217607&mac=EE9D359B47BF&t=2

Record #2:Android Applicsation record

package name : com.sankuai.mertuan

OK,到这里我们应该清楚,手机触碰NFC卡的时候,优先会去读取Record #1的数据,如果Record #1没有被处理,那么就回去读取Record #2

当然,还可以有 Record #3

那么我们只要仿照这种格式,在NFC卡上写入相关的数据,就可以了。

我们下载并安装
NFC TagWriter App 下载地址 (往NFC卡中写数据)

找到一张空白的NFC卡
首先,我们先清除标签
点击清除标签 -> 擦写为出厂设置
在这里插入图片描述
在这里插入图片描述
擦写完成后,点击写入数据
在这里插入图片描述
点击新建标签
在这里插入图片描述
首先,先点击启动应用
在这里插入图片描述

输入Android App的包名 (触碰NFC卡的时候,根据这个包名来匹配App,然后进行跳转App)
在这里插入图片描述
然后,再点击添加更多记录
在这里插入图片描述
这里点击链接
在这里插入图片描述
输入 mytest://www.test.com/bike/nfc?id=123456,保存并退出
在这里插入图片描述

最后,点击写入
在这里插入图片描述
根据提示,直至写入成功
在这里插入图片描述

写入成功后,我们在用TagInfo来读取NFC卡的信息
可以看到
Record #1mytest://www.test.com?/id=123456
Record #2package name : com.mytest.bike
在这里插入图片描述

这样,我们的NFC的数据已经准备好了,接着,我们需要在代码AndroidManifest.xml中,进行配置

<activity
    android:name="com.xxxx.yyyy.NFCActivity"
    android:launchMode="singleInstance" >
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:scheme="mytest"
            android:host="www.test.com"
            android:pathPrefix="/bike/nfc" />
    </intent-filter>
</activity>

有了这个配置后,匹配到对应的NFC卡,就会跳转到该NFCActivity中了,在NFCActivity中,再去读取NFC卡的相关信息,进行业务的处理即可。

对于iOS的,由于我是Android开发,不太清楚iOS代码是如何实现的,iOS的同学可以自行度娘查看下在代码中是如何配置的。

至此,就可以实现文章开头所说的这个功能了

  • 如果手机没有安装该App,那么触碰NFC后
    • Android自动跳转到应用市场
    • IOS没有反应
  • 如果手机安装了该App,那么触碰NFC后
    • Android自动跳转到App
    • IOS会弹出一个通知框,点击这个通知框后,跳转到App

至于进入App后,再去读取NFC相关的信息获取的车辆id,进行开锁,这就是相关业务逻辑了,可以自行进行特定的处理。

### 微信小程序 NFC 链接参数拼接方法 在微信小程序中,利用 NFC 功能可以通过 `wx.getNFCAdapter()` 获取 NFC 适配器实例,并进一步实现 NFC 的读取和写入功能[^1]。当涉及到 NFC 链接的参数拼接时,主要依赖于 URL Scheme 或者 Universal Links 来传递数据。 然而,在实际开发过程中需要注意的是,自2022年4月11日起,微信对于 URL Scheme 和 URL Link 接口的能力进行了调整[^3]。具体来说: - 每个生成的链接有效期最长为30天; - 不再支持永久有效的链接; - 单独生成的链接仅限特定用户访问,其他用户无法通过相同的链接打开小程序; - 小程序每日生成的链接总数上限为50万条。 因此,在设计 NFC 链接及其参数拼接方案时,需遵循上述规则以确保兼容性和有效性。 #### 实现 NFC 链接参数拼接的具体方式 以下是基于微信官方文档以及开发者实践经验总结的一种常见做法: 1. **创建带有参数的 URL** 使用小程序路径作为基础地址,并附加必要的查询字符串来携带额外的信息。例如: ```javascript let url = 'weixin://dl/business/?t=pages/index/index?cardId=${id}&userId=${user}'; ``` 这里的 `${id}` 和 `${user}` 是动态变量,可以根据业务逻辑替换为具体的值。 2. **调用 NFC API 并设置消息内容** 当需要向 M1 卡片写入信息时,可以将上述构建好的 URL 转化成二进制形式存储到卡片上。下面是一个简单的代码片段展示如何操作: ```javascript const adapter = wx.getNFCAdapter(); try { await adapter.startDiscovery({ success(res){ console.log('发现标签', res); // 构建要写入的数据包 var dataPacket = new Uint8Array([/*...*/]); // 此处应填充实际编码后的字节数组 adapter.writeCard({ cardType: 'ISO7816', message: dataPacket, success(writeRes){ console.log('成功写入:', writeRes); }, fail(err){ console.error('写入失败:', err); } }); }, fail(err){ console.error('找到标签:', err); } }); } catch (e) { console.error(e.message, e.stack); } ``` 上述代码中的 `dataPacket` 应由目标 URL 经过适当转换而来,比如 Base64 编码或者其他适合的形式以便能够正确存放到卡片之中[^2]。 3. **解析接收端传来的参数** 用户触发 NFC跳转至指定的小程序页面,则可通过 onLoad 方法捕获路由上的 query 参数完成后续处理工作: ```javascript Page({ onLoad(options) { const { cardId, userId } = options; if(cardId && userId){ this.setData({ cardInfo:{ id:cardId, owner:userId}}); // 执行更多初始化动作... }else{ wx.showToast({ title:'缺少必要参数!', icon:'none' }) } } }); ``` 以上即是在微信小程序环境下进行 NFC 链接参数拼接的一个基本流程说明。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值