Xamarin iOS NFC 会话意外失效
Xamarin iOS NFC Session is invalidated unexpectedly
有一个 Xamarin 表单项目并尝试将 NFC 读取挂接到应用程序。目前在 iOS 本机方面进行管道处理。我已经在苹果门户方面设置了所有配置和选项,并且我已经将以下内容添加到权利中:
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
</dict>
还添加到info.plist:
<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>
我为 iOS 的本机依赖项获得的代码如下:
[assembly: Dependency(typeof(RFIDScannerHelper))]
namespace MyProject.Mobile.Platform.iOS
{
public class RFIDScannerHelper : IRFIDScannerHelper
{
public bool hasRFID()
{
return true;
}
NFCNdefReaderSession Session;
public void ScanRFID(Action<string> act, VisualElement el)
{
NFChecker nfchecker = new NFChecker();
Session = new NFCNdefReaderSession(nfchecker, null, false);
Session?.BeginSession();
}
}
public class NFChecker : NSObject, INFCNdefReaderSessionDelegate
{
public Action<string> nfcFoundAction;
public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
foreach (NFCNdefMessage msg in messages)
{
if (msg.Records.Count() > 0)
{
nfcFoundAction.Invoke(new NSString(msg.Records[0].Payload, NSStringEncoding.UTF8));
}
}
}
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
}
}
}
}
运行时似乎一切正常,但在会话开始时它直接进入 ReaderDelegate 中的 DidInvalidate 方法并且错误显示 "Session is invalidated unexpectedly"。
谁能告诉我我可能错过了什么?
更新
我也试过 xamarin 提供的示例 here。但我也收到完全相同的错误 "Session is invalidated unexpectedly"。我已经搞砸了我们的配置,但没有任何组合可以改变这个错误。有没有人甚至让 xamarin 样本工作?
@matt,这是 Visual Studio 2019 年的错误。您应该在您的项目设置中 select Entitlements.plist,但是您不能,因为您应该插入路径的 "entry" 始终被禁用。我已报告问题
有一个 Xamarin 表单项目并尝试将 NFC 读取挂接到应用程序。目前在 iOS 本机方面进行管道处理。我已经在苹果门户方面设置了所有配置和选项,并且我已经将以下内容添加到权利中:
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
</dict>
还添加到info.plist:
<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>
我为 iOS 的本机依赖项获得的代码如下:
[assembly: Dependency(typeof(RFIDScannerHelper))]
namespace MyProject.Mobile.Platform.iOS
{
public class RFIDScannerHelper : IRFIDScannerHelper
{
public bool hasRFID()
{
return true;
}
NFCNdefReaderSession Session;
public void ScanRFID(Action<string> act, VisualElement el)
{
NFChecker nfchecker = new NFChecker();
Session = new NFCNdefReaderSession(nfchecker, null, false);
Session?.BeginSession();
}
}
public class NFChecker : NSObject, INFCNdefReaderSessionDelegate
{
public Action<string> nfcFoundAction;
public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
foreach (NFCNdefMessage msg in messages)
{
if (msg.Records.Count() > 0)
{
nfcFoundAction.Invoke(new NSString(msg.Records[0].Payload, NSStringEncoding.UTF8));
}
}
}
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
}
}
}
}
运行时似乎一切正常,但在会话开始时它直接进入 ReaderDelegate 中的 DidInvalidate 方法并且错误显示 "Session is invalidated unexpectedly"。
谁能告诉我我可能错过了什么?
更新
我也试过 xamarin 提供的示例 here。但我也收到完全相同的错误 "Session is invalidated unexpectedly"。我已经搞砸了我们的配置,但没有任何组合可以改变这个错误。有没有人甚至让 xamarin 样本工作?
@matt,这是 Visual Studio 2019 年的错误。您应该在您的项目设置中 select Entitlements.plist,但是您不能,因为您应该插入路径的 "entry" 始终被禁用。我已报告问题