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:
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 nedenlethis
temsilci parametresi olarak kullanılır.queue
– Geri çağırmaların işlenme sırası. olabilirnull
, bu durumda kullanıcı arabirimi denetimlerini güncelleştirirken (örnekte gösterildiği gibi) kullandığınızdanDispatchQueue.MainQueue
emin olun.invalidateAfterFirstRead
– İlktrue
baş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:
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.