我使用以下代码在 iOS 上将 NFC 标签读取为卡 ID:
if (tag.type == NFCTagType.iso7816) {
String result1 = await FlutterNfcKit.transceive("00a40400");
setState(() {
_result = '1: $result1\n';
});
}
我遇到了一个错误:
[CoreNFC] -[NFCTagReaderSession setAlertMessage:]:101 (null)
[CoreNFC] -[NFCTagReaderSession transceive:tagUpdate:error:]:883 Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}
我已将以下内容添加到
info.plist
文件中:
<key>com.apple.developer.nfc.readersession.felica.systemcodes</key>
<array>
<string>12FC</string>
<string>6A82</string>
<string>8008</string>
</array>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A0000002471001</string>
<string>A0000002472001</string>
<string>A000000151000000</string>
<string>A00000000386980701</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>
还有
Runner.entitlements
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
<string>NDEF</string>
</array>
</dict>
</plist>
我会一劳永逸地解释你发送的命令是如何工作的!
FlutterNfcKit.transceive("00a40400");
(*) 在 javacard A4 0A 中是选择卡上小程序的命令,您没有发布哪个小程序!显然它不起作用
CL 参数(字节数)是强制性的,如果您不必传递任何字节,则您将传递“00”,否则它将不起作用。但正如我之前写给您的几行,您在卡上选择的小程序的 AID 或十六进制标识符丢失了
一个例子: 00 A4 04 00 09 D1 56 00 01 32 83 26 01 01 以粗体显示,您会注意到我正在从“0xA4,0x04”卡中选择一个小程序。 以斜体显示的小程序 ID [正是 IOS 权利中的 ID
09:这是我发送到卡的字节数