Aracılığıyla paylaş


Xamarin.iOS'ta Çekirdek NFC

iOS 11 kullanarak Yakın Alan İletişimi (NFC) etiketlerini okuma

CoreNFC, iOS 11'de uygulamaların içinden etiketleri okumak için Yakın Alan İletişimi (NFC) radyosunun erişimini sağlayan yeni bir çerçevedir. CoreNFC i Telefon 7, i Telefon 7 Plus, i Telefon 8, i Telefon 8 Plus, i Telefon X, i Telefon XS ve i Telefon 11 modellerinde çalışır (i Telefon 6 ve i Telefon 6 Plus modelleri NFC ödeme işlevselliğine sahip olsa da desteklemez CoreNFC).

iOS cihazlarında NFC etiket okuyucusu, NFC Veri Değişimi Biçimi (NDEF) bilgilerini içeren 1 ile 5 arasındaki tüm NFC etiket türlerini destekler.

Dikkat etmeniz gereken bazı kısıtlamalar vardır:

  • CoreNFC yalnızca etiket okumayı destekler (yazma veya biçimlendirmeyi desteklemez).
  • Etiket taramaları kullanıcı tarafından başlatılmalıdır ve 60 saniye sonra zaman aşımına uğrar.
  • Uygulamaların tarama için ön planda görünür olması gerekir.
  • CoreNFC yalnızca gerçek cihazlarda test edilebilir (simülatörde test edilemez).

Bu sayfada CoreNFC kullanmak için gereken yapılandırma açıklanır ve API'nin nasıl kullanılacağı gösterilir.

Yapılandırma

CoreNFC'yi etkinleştirmek için projenizde üç öğe yapılandırmanız gerekir:

  • Info.plist gizlilik anahtarı.
  • Bir Entitlements.plist girdisi.
  • NFC Etiket Okuma özelliğine sahip bir sağlama profili.

Info.plist

Tarama sırasında kullanıcıya görüntülenen NFCReaderUsageDescription gizlilik anahtarını ve metnini ekleyin. Uygulamanız için uygun bir ileti kullanın (örneğin, taramanın amacını açıklayın):

<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>

Entitlements.plist

Uygulamanızın, Entitlements.plist dosyasında aşağıdaki anahtar/değer çiftini kullanarak Yakın Alan İletişimleri Etiketi Okuma özelliğini istemesi gerekir:

<key>com.apple.developer.nfc.readersession.formats</key>
<array>
  <string>NDEF</string>
</array>

Sağlama Profili

Yeni bir Uygulama Kimliği oluşturun ve NFC Etiket Okuma hizmetinin işaretlendiğinden emin olun:

NFC Etiket Okuma'nın seçili olduğu Geliştirici Portalı Yeni Uygulama Kimliği sayfası

Ardından bu Uygulama Kimliği için yeni bir sağlama profili oluşturup geliştirme Mac'inize indirip yüklemeniz gerekir.

Etiket Okuma

Projeniz yapılandırıldıktan sonra dosyanın en üstüne ekleyin using CoreNFC; ve NFC etiketi okuma işlevini uygulamak için şu üç adımı izleyin:

1. Uygulama INFCNdefReaderSessionDelegate

Arabirimin uygulanması gereken iki yöntemi vardır:

  • DidDetect – Bir etiket başarıyla okunduğunda çağrılır.
  • DidInvalidate – Bir hata oluştuğunda veya 60 saniyelik zaman aşımına ulaşıldığında çağrılır.

DidDetect

Örnek kodda, taranan her ileti bir tablo görünümüne eklenir:

public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
    foreach (NFCNdefMessage msg in messages)
    {  // adds the messages to a list view
        DetectedMessages.Add(msg);
    }
    DispatchQueue.MainQueue.DispatchAsync(() =>
    {
        this.TableView.ReloadData();
    });
}

Oturum birden çok etiket okumasına izin veriyorsa bu yöntem birden çok kez çağrılabilir (ve bir ileti dizisi geçirilebilir). Bu, yöntemin üçüncü parametresi Start kullanılarak ayarlanır (2. adımda açıklanmıştır).

DidInvalidate

Geçersizleştirme çeşitli nedenlerle oluşabilir:

  • Tarama sırasında bir hata oluştu.
  • Uygulama ön planda durmayı durdurdu.
  • Kullanıcı taramayı iptal etmek için seçti.
  • Tarama uygulama tarafından iptal edildi.

Aşağıdaki kodda bir hatanın nasıl işleneceğini gösterilmektedir:

public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
    var readerError = (NFCReaderError)(long)error.Code;
    if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
        readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
    {
      // some error handling
    }
}

Bir oturum geçersiz kılındıktan sonra, yeniden taramak için yeni bir oturum nesnesi oluşturulmalıdır.

2. Başlangıç NFCNdefReaderSession

Tarama, düğmeye basma gibi bir kullanıcı isteğiyle başlamalıdır. Aşağıdaki kod bir tarama oturumu oluşturur ve başlatır:

Session = new NFCNdefReaderSession(this, null, true);
Session?.BeginSession();

Oluşturucunun NFCNdefReaderSession parametreleri aşağıdaki gibidir:

  • delegate– uygulaması.INFCNdefReaderSessionDelegate Örnek kodda, temsilci tablo görünümü denetleyicisinde uygulanır, bu nedenle this temsilci parametresi olarak kullanılır.
  • queue – Geri çağırmaların işlenme sırası. olabilir null, bu durumda kullanıcı arabirimi denetimlerini güncelleştirirken (örnekte gösterildiği gibi) kullandığınızdan DispatchQueue.MainQueue emin olun.
  • invalidateAfterFirstRead – İlk truebaşarılı taramadan sonra tarama durdurulur; false tarama devam eder ve tarama iptal edilene veya 60 saniyelik zaman aşımına ulaşılana kadar birden çok sonuç döndürülür.

3. Tarama oturumunu iptal etme

Kullanıcı, kullanıcı arabirimindeki sistem tarafından sağlanan bir düğme aracılığıyla tarama oturumunu iptal edebilir:

Tarama sırasında İptal düğmesi

Uygulama, yöntemini çağırarak taramayı InvalidateSession program aracılığıyla iptal edebilir:

Session.InvalidateSession();

Her iki durumda da temsilcinin DidInvalidate yöntemi çağrılır.

Özet

CoreNFC, uygulamanızın NFC etiketlerinden verileri okumasını sağlar. Çeşitli etiket biçimlerinin (NDEF türleri 1 ile 5 arasında) okunmasını destekler, ancak yazmayı veya biçimlendirmeyi desteklemez.