Aller au contenu
Langue : FR

Comment une application iOS reçoit-elle un tag lu en arrière plan ?

Par un lien universel, et jamais par un schéma d'URL propriétaire. Le système lit le tag sans application ouverte, affiche une notification, et ne remet les données qu'une fois celle ci touchée ; l'application reçoit alors le message NDEF entier dans une activité utilisateur.

Ce que fait le système

L'article d'Apple sur la lecture en arrière plan décrit la séquence. Le système lit le tag sans qu'aucune application soit ouverte, affiche une notification pour chaque nouveau tag, et ne remet les données qu'après que l'utilisateur l'a touchée ; sur un iPhone verrouillé, il lui demande d'abord de déverrouiller.

Il cherche une seule chose dans le message : un enregistrement URI, du type bien connu U. Quand le message en porte plusieurs, le système emploie le premier, et cet enregistrement doit contenir soit un lien universel, soit l'un des schémas d'URL qu'il prend en charge.

Apple indique que l'iPhone XS et les modèles ultérieurs prennent en charge la lecture de tags en arrière plan. Sur les modèles plus anciens, l'application doit proposer une lecture depuis l'application, ce que l'article recommande dans tous les cas.

L'article est explicite : la lecture en arrière plan ne prend pas en charge les schémas d'URL propriétaires, et les applications doivent employer des liens universels à la place. Les schémas qu'elle traite appartiennent au système : liens web, courriel, SMS, téléphone, FaceTime, Plans et configuration d'accessoire HomeKit.

Le tag porte donc une adresse https sur un domaine que l'application revendique. L'application active les domaines associés et y liste ce domaine, ce qui ajoute le droit d'accès correspondant au projet et à l'App ID.

Quand aucune application installée ne revendique le lien, le système l'ouvre dans Safari. C'est le repli que la page de l'ouverture d'application recommande de concevoir : une page qui a du sens sans l'application.

Ce que reçoit l'application

Le système lance l'application, ou la ramène au premier plan, et appelle application(_:continue:restorationHandler:) avec une NSUserActivity de type NSUserActivityTypeBrowsingWeb. Le message lu sur le tag se trouve dans sa propriété ndefMessagePayload.

Vérifiez que l'activité vient bien d'un tag. Pour les activités que la lecture en arrière plan n'a pas produites, l'article indique que la charge utile porte un unique enregistrement de type vide : une application qui ouvre aussi ses liens universels depuis ailleurs sait donc les distinguer.

C'est le message entier qui arrive, et pas seulement le lien. Les autres enregistrements du tag, un texte ou une charge utile MIME après l'URI, sont à la disposition de l'application une fois ouverte.

Quand cela n'arrive pas

La lecture en arrière plan ne tourne que pendant que l'iPhone est en usage, et l'article énumère les moments où elle est indisponible même écran allumé : avant le premier déverrouillage, pendant une session de lecture Core NFC, pendant l'usage du portefeuille Apple Pay, pendant l'usage de l'appareil photo, et en mode avion.

Une application qui lit avec sa propre session bloque donc la lecture en arrière plan tant que la session dure. Le côté utilisateur de ces conditions est sur la page de la lecture en arrière plan.

Questions fréquentes

Un schéma d'URL propriétaire peut-il ouvrir mon application depuis un tag ?

Pas par la lecture en arrière plan, dont la documentation d'Apple indique qu'elle ne prend pas en charge les schémas propriétaires. Employez un lien universel sur un domaine que l'application revendique.

L'application s'ouvre-t-elle sans que l'utilisateur touche quoi que ce soit ?

Non. Le système affiche une notification pour chaque nouveau tag et ne remet les données qu'après qu'elle a été touchée, en demandant d'abord un déverrouillage si le téléphone est verrouillé.

Quel enregistrement le système emploie-t-il ?

Le premier enregistrement URI du message, du type bien connu U. Le message entier est ensuite remis à l'application dans l'activité utilisateur.

Et si l'application n'est pas installée ?

Le système ouvre le lien dans Safari : l'adresse doit donc mener à une page qui a du sens sans l'application.