Flutter NFC:“此过程中与名为 com.apple.nfcd.service.corenfc 的服务的连接已失效”

问题描述 投票:0回答:1

当我在android中运行时,运行顺利,但是当我在IOS设备IOS 14.6中运行时,出现此错误

XPC 错误:错误域 = NSCocoaErrorDomain 代码 = 4099 “与名为 com.apple.nfcd.service.corenfc 的服务的连接在此进程中无效。” UserInfo={NSDebugDescription=与名为 com.apple.nfcd.service.corenfc 的服务的连接在此进程中无效。}

屏幕文件

@override
  void initState() {
    super.initState();

    _registerNFC();
  }

void _registerNFC() async {
    NfcManager.instance.startSession(
        pollingOptions: {
          NfcPollingOption.iso14443,
          NfcPollingOption.iso15693,
          NfcPollingOption.iso18092,
        },
        onDiscovered: (NfcTag tag) async {
          print(tag.toString());
          String mytag = "";

          if (tag.data.containsKey("mifareclassic")) {
            mytag = tag.data["mifareclassic"]["identifier"]
                .map((e) => e.toRadixString(16).padLeft(2, '0'))
                .join('')
                .toString()
                .toUpperCase();

            print("classic");
            
          } else if (tag.data.containsKey("mifareultralight")) {
            mytag = tag.data["mifareultralight"]["identifier"]
                .map((e) => e.toRadixString(16).padLeft(2, '0'))
                .join('')
                .toString()
                .toUpperCase();

            print("ultralight");
          } else if (tag.data.containsKey("mifareplus")) {
            mytag = tag.data["mifareplus"]["identifier"]
                .map((e) => e.toRadixString(16).padLeft(2, '0'))
                .join('')
                .toString()
                .toUpperCase();

            print("plus");
          } else if (tag.data.containsKey("mifaredesfire")) {
            mytag = tag.data["mifaredesfire"]["identifier"]
                .map((e) => e.toRadixString(16).padLeft(2, '0'))
                .join('')
                .toString()
                .toUpperCase();

            print("des fire");
          } else {
            mytag = 'unknown type card';
          }

          // var lastID = mytag[mytag.length - 1];

          result.value = mytag;
          uid = result.value;
          NfcManager.instance.stopSession();
          print("close session");
          _updateNFC();


          try {
            // await ndef.write(message);
            result.value = 'Success to "Ndef Write"';
            NfcManager.instance.stopSession();

            //_ndefWriteLock(); jangan letak kalau tak nnt tak boleh unlock balik
          } catch (e) {
            result.value = e;
            NfcManager.instance
                .stopSession(errorMessage: result.value.toString());
            return;
          }
        });
  }

  void _updateNFC() {
    if (uid != 'unknown type card') {
      Navigator.pop(context, uid);
    } else {
      CustomDialog.show(context,
          isDissmissable: false,
          title: "Unknown NFC tag",
          description:
              "Please use another type. Type allowed: [MifareClassic] [MifareUltralight] [MifareDesFire]",
          btnOkText: "I Understand", btnOkOnPress: () {
        Navigator.pop(context);
        print("open session");
        _registerNFC();
      });
    }
  }

info.plist 文件

<key>NFCReaderUsageDescription</key>
        <string>to scan the NFC Tag on the fire extinguisher</string>

<key>UIRequiredDeviceCapabilities</key>
        <array>
            <string>nfc</string>
        </array>
   <key>com.apple.developer.nfc.readersession.felica.systemcodes</key>
        <array>
            <string>0003</string>
            <string>04D1</string>
            <string>8008</string>
            <string>80DE</string>
            <string>865E</string>
            <string>8592</string>
            <string>8B5D</string>
            <string>8FC1</string>
            <string>FE00</string>
        </array>

        <key>com.apple.developer.nfc.readersession.formats</key>
        <array>
            <string>TAG</string>
            <string>NDEF</string>
        </array>
        <key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
        <array>
            <string>A0000002310100000000000000000000</string>
            <string>A0000002310200000000000000000000</string>
            <string>A0000002480300000000000000000000</string>
           
        </array>

有人知道如何设置吗? 我还使用了其他软件包,例如 flutter_nfc_kit 但仍然遇到相同的错误

ios flutter info.plist core-nfc
1个回答
0
投票

您必须添加 近场通信标签阅读器会话格式权利

(我只是尝试运行您的代码而不添加它,并收到相同的错误消息)。

打开

Runner.xcodeproj
并单击:

  • “签名与能力”

  • + Capability

  • 添加“近场通信标签读取”

© www.soinside.com 2019 - 2024. All rights reserved.