iOS 11: Apple Pay n'a plus l'exclusivité sur la NFC d'iPhone

le 02/10/2017 par Reda Mimouni
Tags: Software Engineering

Dans la keynote de la WWDC d’Apple tenue le 5 Juin 2017, le constructeur a annoncé l’ouverture de son API, Core NFC, aux développeurs à partir de la nouvelle version iOS 11, qui est disponible en téléchargement depuis le 19 Septembre.

Depuis, plusieurs entreprises ont annoncé le support de cette API et WISeKey en fait partie. La firme est derrière la solution CapSeal, qui permet de vérifier, de suivre et d’identifier des produits intégrant un tag NFC compatible CapSeal. Il y en a principalement sur des produits cosmétiques et des bouteilles de vin de luxe.

Dans cet article nous allons nous pencher sur ce que Core NFC nous permet de faire (ou pas), les types de tags supportés et leurs spécifications; et en bonus, un petit tutoriel pour que vous puissiez créer votre premier lecteur de tag NFC.

Spécifications et limitations

Ce que vous devez retenir de la sortie de cette nouvelle API :

  • Seule la lecture de tag est autorisée pour l’instant. Vous ne pourrez en aucun cas modifier un tag. Donc oubliez votre rêve de faire une appli de paiement sans contact, ce n’est pas pour cette version en tout cas.
  • Les données à échanger doivent être au format NFC Data Exchange, un standard très répandu (heureusement).
  • Core NFC est un “On Demand” process, l’utilisateur a besoin d’initier la lecture du tag. Apple souhaite sûrement prévenir certains abus, on connaît plus d’un utilisateur qui a ouvert par maladresse un lien contenu dans un tag NFC d’un panneau publicitaire bien placé.
  • Seuls les iPhones 7 (7 plus) et leurs successeurs pourront faire de la lecture de tags NFC.
  • L’application doit absolument être en foreground pour pouvoir lire un tag NFC. Impossible donc de réveiller une application en approchant son téléphone d’un tag.
  • Une session de lecture d’un tag NFC a une durée maximale de 60 secondes. Si la session fait un timeout, vous devez absolument en recréer une nouvelle.
  • Vous pouvez configurer votre session de façon à ce que votre app puisse scanner un seul ou plusieurs tags  à la fois. Dans le premier cas, la session expire une fois le tag scanné, dans le second, la session reste ouverte jusqu’à ce qu’elle fasse un timeout ou que l’utilisateur ferme la dialog.

Types de tags NFC supportés

Le Forum NFC a rédigé des spécifications pour s'assurer que les fabricants de tags et de lecteurs maintiennent l'interopérabilité. Ces spécifications héritent d’ailleurs des normes et des standards issus de la RFID HF (Haute Fréquence 13,56 MHz).

Le forum a décrit 5 types de tags, chacun avec différentes caractéristiques:

  • NFC Forum Type 1 Tag
    • Exemple: Topaz
    • Lent et pas cher, utilisé dans les cartes de visites et dans l'appairage des appareils bluetooth.
  • NFC Forum Type 2 Tag
    • Exemple: Mifare Ultralight
    • Plus rapide, utilisé dans les cartes de transport et les billets de concerts.
  • NFC Forum Type 3 Tag
    • Exemple: Felica, fabriqué par Sony
    • Utilisé principalement dans les portemonnaies électroniques.
  • NFC Forum Type 4 Tag
    • Exemple: DESFire
    • Le plus cher, il contient la plus grande mémoire, prend en charge des fonctions d’authentification et peut se reprogrammer tout seul.
  • NFC Forum Type 5 Tag
    • NFC-V - utilisé principalement dans l’identification des livres dans les bibliothèques.

Bien que Core NFC soit limité, il supporte les 5 types de tag NFC cités précédemment, ce qui rend l’utilisation de l’API très large.

Dans sa documentation officielle, Apple cite d’ailleurs deux secteurs de la communication sans contact :

  • le commerce (“votre application peut donner aux utilisateurs des informations sur les produits qu'ils trouvent dans un magasin”)
  • le monde de la culture (“ou les expositions qu’ils visiteront dans un musée”).

Apple ne dit rien concernant le paiement ...

Démo

Pour la suite de l’article, nous allons créer une application qui lit un tag NFC et qui affiche l’ensemble de ses messages sur une liste.

J’ai utilisé cette application de démo pour scanner le tag NFC d’un abribus RATP ; ils sont tous équipés de tag NFC pour consulter les horaires de passage des bus. Voici une capture du processus de scan du tag.

Nous allons commencer par décrire les pré-requis pour développer notre application, ensuite ajouter les droits et les capabilities, puis enfin implémenter le code accompagné des descriptions détaillées des classes.

  • Pré-requis

    • Xcode 9
    • Un iPhone 7, 7 plus ou son successeur
    • Un provisioning profile avec le service NFC Tag Reading activé

  • Entitlements et Info.plist

Un projet Core NFC est un projet comme les autres. Créez votre projet comme d’habitude, et, ajoutez l’entitlement “Near Field Communication Tag Reading” dans les capabilities.

Cette opération va créer un nouveau fichier .entitlements dans votre projet. Par exemple :

Ensuite, ajoutez la clé suivante à votre fichier Info.plist:

Privacy - NFC Scan Usage Description

Définissez, comme valeur associée, le message qui s’affichera à l’utilisateur au moment de la lecture du tag.

A partir de maintenant vous pouvez coder !!

  • Code

Dans votre view controller principal, il faut commencer par importer le framework:

Ensuite, créer une variable privée:

Elle représente un tableau d’objet de type NFCNDEFMessage qui contient à son tour un tableau de NFCNDEFPayload.

Ensuite, dans votre storyboard ajouter un bouton “Search”, l’action sera gérée au niveau du controller dans la méthode startNFCSearchButtonTapped.

Au “tap” sur le bouton “Search”, on instancie une variable nfcSession, en lui passant

  • le delegate qui sera le viewController.
  • un paramètre queue qui représente le thread dans lequel sera exécuté la session.
  • et un booléen pour définir si la session expirera après le scan du premier tag ou de plusieurs tags.

Vous l’avez compris, c’est à ce moment là qu’on démarre notre session.

Notre viewController doit implémenter le protocol NFCNDEFReaderSessionDelegate.

Les méthodes de la callback sont appelées au moment où la session reçoit un résultat, qui peut être

  • soit une erreur de validation
  • soit un message NFC reçu à partir d’un tag.

Il y a 2 méthodes de callbacks:

Compilez puis lancez !!

Le repository public du projet de test est par là  ???? NFC-Reader

Pourquoi Apple a publié une API NFC maintenant?

Android a eu un SDK NFC depuis 2010. Je pense que Apple a finalement vu NFC pour ce qu'il est, une technologie de base qui est un composant matériel requis dans un smartphone moderne en 2017. Tout le monde s'est demandé "Comment Apple fera-t-il de l'argent avec NFC?". Une question erronée, ce serait comme se demander "Comment Apple fera-t-il de l'argent de la caméra?"

Ce qui est sûr, c’est que Apple est entrain d’ouvrir les vannes et c’est une bonne chose. Apple Pay ne sera bientôt plus le seul à profiter du NFC.

Référence:

https://developer.apple.com/documentation/corenfc

https://www.wisekey.com

https://www.wisekey.com/press-release/wisekeys-secure-nfc-capseal-securely-connects-brands-to-customers-with-apple-ios11-2/