Partager via


Core NFC dans Xamarin.iOS

Lecture de balises NFC (Near Field Communication) à l’aide d’iOS 11

CoreNFC est une nouvelle infrastructure dans iOS 11 qui permet d’accéder à la radio NFC (Near Field Communication ) pour lire des balises à partir d’applications. CoreNFC fonctionne sur i Téléphone 7, i Téléphone 7 Plus, i Téléphone 8, i Téléphone 8 Plus, i Téléphone X, i Téléphone XS et i Téléphone 11 modèles (tandis que i Téléphone 6 et i Téléphone Les modèles Plus 6 ont des fonctionnalités de paiement NFC, ils ne prennent pas en charge CoreNFC).

Le lecteur de balise NFC sur les appareils iOS prend en charge tous les types de balises NFC 1 à 5 qui contiennent des informations NDEF (NFC Data Exchange Format ).

Il existe certaines restrictions à connaître :

  • CoreNFC prend uniquement en charge la lecture des balises (pas l’écriture ou la mise en forme).
  • Les analyses de balise doivent être lancées par l’utilisateur et expirer après 60 secondes.
  • Les applications doivent être visibles au premier plan pour l’analyse.
  • CoreNFC ne peut être testé que sur des appareils réels (et non sur le simulateur).

Cette page décrit la configuration requise pour utiliser CoreNFC et montre comment utiliser l’API.

Configuration

Pour activer CoreNFC, vous devez configurer trois éléments dans votre projet :

  • Clé de confidentialité Info.plist .
  • Entrée Entitlements.plist .
  • Profil d’approvisionnement avec fonctionnalité de lecture des balises NFC.

Info.plist

Ajoutez la clé de confidentialité NFCReaderUsageDescription et le texte, qui s’affichent à l’utilisateur lors de l’analyse. Utilisez un message approprié pour votre application (par exemple, expliquer l’objectif de l’analyse) :

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

Entitlements.plist

Votre application doit demander la fonctionnalité de lecture des balises Near Field Communications à l’aide de la paire clé/valeur suivante dans votre fichier Entitlements.plist :

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

Profil de provisionnement

Créez un ID d’application et vérifiez que le service de lecture des balises NFC est coché :

Page Nouvel ID d’application du Portail des développeurs avec la lecture des balises NFC sélectionnée

Vous devez ensuite créer un profil d’approvisionnement pour cet ID d’application, puis le télécharger et l’installer sur votre Mac de développement.

Lecture d’une balise

Une fois votre projet configuré, ajoutez-le using CoreNFC; en haut du fichier et suivez ces trois étapes pour implémenter la fonctionnalité de lecture des balises NFC :

1. Implémenter INFCNdefReaderSessionDelegate

L’interface a deux méthodes à implémenter :

  • DidDetect : appelée lorsqu’une balise est correctement lue.
  • DidInvalidate : appelée lorsqu’une erreur se produit ou que le délai d’expiration de 60 secondes est atteint.

DidDetect

Dans l’exemple de code, chaque message analysé est ajouté à une vue de table :

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();
    });
}

Cette méthode peut être appelée plusieurs fois (et un tableau de messages peut être transmis) si la session autorise plusieurs lectures d’étiquettes. Cette opération est définie à l’aide du troisième paramètre de la méthode (expliqué à l’étape Start 2).

DidInvalidate

L’invalidation peut se produire pour plusieurs raisons :

  • Une erreur s’est produite lors de l’analyse.
  • L’application a cessé d’être au premier plan.
  • L’utilisateur a choisi d’annuler l’analyse.
  • L’analyse a été annulée par l’application.

Le code ci-dessous montre comment gérer une erreur :

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

Une fois qu’une session a été invalidée, un nouvel objet de session doit être créé pour l’analyser à nouveau.

2. Démarrer un NFCNdefReaderSession

L’analyse doit commencer par une demande d’utilisateur, telle qu’une pression sur le bouton. Le code suivant crée et démarre une session d’analyse :

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

Les paramètres du NFCNdefReaderSession constructeur sont les suivants :

  • delegate – Implémentation de INFCNdefReaderSessionDelegate. Dans l’exemple de code, le délégué est implémenté dans le contrôleur de vue de table. Il est donc this utilisé comme paramètre délégué.
  • queue : file d’attente sur laquelle les rappels sont gérés. Il peut s’agir null, auquel cas veillez à utiliser les contrôles d’interface utilisateur lors de la DispatchQueue.MainQueue mise à jour des contrôles d’interface utilisateur (comme indiqué dans l’exemple).
  • invalidateAfterFirstRead : lorsque truel’analyse s’arrête après la première analyse réussie ; lorsque false l’analyse se poursuit et que plusieurs résultats sont retournés jusqu’à ce que l’analyse soit annulée ou que le délai d’expiration de 60 secondes soit atteint.

3. Annuler la session d’analyse

L’utilisateur peut annuler la session d’analyse via un bouton fourni par le système dans l’interface utilisateur :

Bouton Annuler lors de l’analyse

L’application peut annuler par programmation l’analyse en appelant la InvalidateSession méthode :

Session.InvalidateSession();

Dans les deux cas, la méthode du DidInvalidate délégué est appelée.

Résumé

CoreNFC permet à votre application de lire des données à partir de balises NFC. Il prend en charge la lecture de divers formats de balise (types NDEF 1 à 5), mais ne prend pas en charge l’écriture ou la mise en forme.