Xamarin iOS NFC Session неожиданно признан недействительным - PullRequest
0 голосов
/ 04 июля 2019

Имейте проект форм Xamarin и пытайтесь подключить чтение NFC к приложению. В настоящее время слесарное дело в iOS родной стороне вещей Я настроил все условия и параметры на стороне Apple на портале и добавил следующие права:

<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)
        {
        }            
    }
}
}

Когда он запускается, кажется, что все работает правильно, но в начале сеанса он переходит прямо к методу DidInvalidate в ReaderDelegate, и ошибка говорит: «Сессия неожиданно аннулирована».

Может кто-нибудь сказать мне, что я мог упустить?

...