Flutter NFC
Posted After life
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter NFC相关的知识,希望对你有一定的参考价值。
一:介绍下futter的一些NFC插件
1:nfc_in_flutter
这一个插件也是我第一次需要用到NFC功能时使用的。
优点:集成快,后续扫描基本没Bug
缺点:写法较累赘。最主要的是只能扫描标准的NDEF格式的卡片。而的NFC-B 这种的就无法扫描了。所以有很大的局限性。
2:nfc_manager
这款插件好评最多。我也在ios上尝试集成过。但扫描出来的 tag 的 “identity”是一个字节数组。我尝试解码过,没有解出来,好像需要根据NFC的格式来进行专门的解密的吧。有懂的小伙伴可以私聊下我,共同学习下~
3:flutter_nfc_reader 和flutter_nfc
只在ios上尝试过,扫描出来的 nfcId 和其他内容都是空,所以就没用这两款
4:flutter_nfc_kit: ^2.2.0
我目前在使用这款插件,比较好用,可以扫描的NFC的格式较多,基本可以满足用户需求,下面介绍的也是这款插件的使用方法
上面的版本如果不适合您的项目的话可以上官方网址搜索下flutter_nfc_kit
二:在android上使用前需要进行的步骤
需要在项目路径的android/app/src/main/AndroidMainfest.xml 里面写入
<uses-permission android:name="android.permission.NFC" />
三:在ios上使用前需要进行的步骤
1:在项目的根路径下面打开 ios/Runner/Info.plist 文件
在里面填写(注意对齐!)
<key>NFCReaderUsageDescription</key>
<string>App需要您的同意,才能使用NFC功能</string>
<key>com.apple.developer.nfc.readersession.felica.systemcodes</key>
<array>
<string>8005</string>
<string>8008</string>
<string>0003</string>
<string>fe00</string>
<string>90b7</string>
<string>927a</string>
<string>86a7</string>
</array>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
<string>TAG</string>
</array>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A0000002471001</string>
<string>A000000003101001</string>
<string>A000000003101002</string>
<string>A0000000041010</string>
<string>A0000000042010</string>
<string>A0000000044010</string>
<string>44464D46412E44466172653234313031</string>
<string>D2760000850100</string>
<string>D2760000850101</string>
<string>00000000000000</string>
</array>
2:打开Xcode,找到 General 右边的 Singing & Capablilities,之后点击左上角的 Capability。在里面找到 Nera Field C communication Tag Reading ,双击它,就添加完成了。
四:代码部分,注意Android和ios系统需要区别判断来写
注意:ios端使用的话会自动跳出扫码页面,是不要我们编写的。Android端的话需要编写个页面或弹窗来进行提示过度下。有需要的小伙伴可以私聊我,在这里就不写入了。
1:编写nfc_util.dart
import 'dart:convert';
import 'dart:io';
import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
class NFCUtil
static Future getNFCId() async
//判断权限
var availability = await FlutterNfcKit.nfcAvailability;
if (availability != NFCAvailability.available)
///主要Android进行提示,这里会报错,根据自身项目的提示方法来替换
//Toast.showToast('当前设备不支持NFC');
//timeout:只对android有效,ios的控制不了
//iosAlertMessage是ios扫码界面的提示,可设置为空。
var tag = await FlutterNfcKit.poll(timeout: Duration(seconds: 60), iosAlertMessage: "请将NFC卡片靠近手机背面");
/*
*在此判断的主要原因是:android平台最好不要使用 FlutterNfcKit.finish函数
*因为使用该函数的话每次扫描都会跳出空标签页面,所以该函数只在ios端使用即可
*/
if(Platform.isIOS)
if (null != tag)
await FlutterNfcKit.finish(iosAlertMessage: "扫描成功");
else
await FlutterNfcKit.finish(iosErrorMessage: "扫描失败");
print(jsonEncode(tag));
//返回扫描得到的id
return tag.id;
2:如何使用NFCUtil
NFCUtil.getNFCId().then((id)
if (id != null && id != '')
//在这里编写 业务
else
//只是个提示,可根据您个人项目来进行替换
Toast.showError('扫描失败,ID为空!');
);
以上是关于Flutter NFC的主要内容,如果未能解决你的问题,请参考以下文章