Flutter错误:NDEF标记在ios上不包含任何NDEF消息



我试图构建一个NFC应用程序,它仍然运行良好,除了一个大问题。当我想用我的应用程序描述新购买的NFC标签时,这不适用于错误代码:错误:NDEF标记不包含任何NDEF消息。然而,如果我从应用商店打开另一个NFC应用程序,它与标签完美配合。同样奇怪的是,一旦我用另一个NFC应用程序在标签上写了一条文本,我的应用程序现在就可以完美地工作了,我现在可以在标签上写字了。

所以我的问题是,为什么我只能用已经包含消息的应用程序编写NFC标签?

我还想知道如何对我的应用程序进行编程,使其也能写入空标签。由于这也适用于AppStore中的其他应用程序,因此在iOS中必须可以实现。

首先非常感谢所有花时间处理我问题的人。

Future<void> writeToTag()async{
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {

if (Platform.isAndroid) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text("Halten Sie Ihr Gerät an den Chip, den Sie lesen                  möchten"),
actions: <Widget>[
FlatButton(
child: const Text("Cancel"),
onPressed: () {
_stream?.cancel();
Navigator.pop(context);
},
),
],
),
);
}

List <NDEFRecord> my = [NDEFRecord.type("Chip", _random)];
NDEFMessage Message = NDEFMessage.withRecords(my);
await NFC.writeNDEF(Message, once: true).first;
funktinoiert.year = true;
setState(() {
isloading = true;
});
int time = DateTime.now().millisecondsSinceEpoch;

Map<String, dynamic> data = {
"random" : _random,
"Time" : time,
};
await Firestore.instance
.collection("NFC")
.document(_random)
.setData(data)
.catchError((e) {
funktinoiert.year = false;
print(e);
});
await Firestore.instance
.collection("Anzahl")
.document("Prototyp")
.updateData({"NFC": FieldValue.increment(1)})
.catchError((e) {
print(e);
});
}
}
on FirebaseException catch (e) {
newEntryFehlermeldung("$e nn Bitte versuchen Sie es erneut. Sollten Sie den Fehler nicht beheben können hilft unser Team Ihnen gerne weiter.");
funktinoiert.year = false;
} on PlatformException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCUserCanceledSessionException {
funktinoiert.year = false;
return null;
} on NFCSessionTerminatedUnexpectedlyException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCSessionTimeoutException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCTagNotWritableException {
newEntryFehlermeldung("Es sieht so aus, als wäre der Chip nicht beschreibbar. Bitte versuchen Sie es erneut.");
funktinoiert.year = false;
} on NFCTagSizeTooSmallException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCTagUnwritableException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCTagUnavailableException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCSystemIsBusyException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on Exception catch (exception) {
newEntryFehlermeldung("$exception nn Bitte versuchen Sie es erneut. Sollten Sie den Fehler nicht beheben können hilft unser Team Ihnen gerne weiter.");
funktinoiert.year = false;
Navigator.pushReplacementNamed(context, "/home");
print(exception);
} catch (e) {
funktinoiert.year = false;
newEntryFehlermeldung("Es besteht keine Verbindung zum Internet. Bitte versuchen Sie es erneut. Sollten Sie den Fehler nicht beheben können hilft unser Team Ihnen gerne weiter.");
}

if(funktinoiert.year == true){
newEntry();
funktinoiert.year = false;
} else{
newEntryFehlermeldung("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut");
}

setState(() {
isloading = false;
});
Navigator.pushReplacementNamed(context, "/home");
}

好的,标签来自已经为NDef格式化的工厂(这意味着它是一个类型2的标签,如果它有一个能力容器,并且包含一个空的NDef消息TLV块(

问题是,我想说的是,flutter插件不能解决iOS中的一个错误(插件中也有一个错误(。

问题是,当标签包含NDEF消息时,插件只要求iOS得到通知,iOS将其解释为有效载荷数据大于0字节的NDEF消息,而这种类型的标签的NFC规范称检测包括零长度NDEF消息。

其他iOS应用程序的工作原理是,它们可能是本机应用程序,通过要求iOS在任何类型的标签进入范围时得到通知,然后在向它们写入非空Ndef消息之前检查它是否具有Ndef功能,来解决这个iOS错误。

如何为您修复它是困难的,尝试一些其他NFC颤振插件或编写自己的插件。

我至少会为NFC flutter插件提出一个错误/功能请求,让它处理这种情况。

对于iOS来说,这可能是因为它只能读取NDef消息,而不能写入它们,因为iOS中的NFC支持很差。

最新更新