Aller au contenu
Langue : FR

Comment lire plusieurs tags dans une même session iOS ?

En créant la session avec le drapeau de fin à la première lecture à faux. Le reste dépend de ce que le délégué reçoit : des messages, et la session relance l'interrogation toute seule ; des objets tag, et c'est l'application qui relance, en abandonnant ses références aux tags précédents.

Lire des messages à la suite

Une session NDEF créée avec invalidateAfterFirstRead à faux lit plusieurs tags. La documentation d'Apple sur l'initialiseur indique que chaque lecture réussie atteint le délégué par readerSession(_:didDetectNDEFs:), jusqu'à l'expiration de la session ou son annulation par l'application ou l'utilisateur.

Cette méthode du délégué n'a besoin d'aucune aide pour continuer. Sa référence indique que la session relance l'interrogation une fois les tags détectés hors de portée : lire une série ne demande donc rien de plus que le délégué.

La série se termine quand même avec la session. Une expiration l'invalide par readerSessionInvalidationErrorSessionTimeout, et la documentation ne donne aucune durée : une application qui lit une longue série doit s'attendre à ouvrir une nouvelle session.

Relancer l'interrogation avec des objets tag

Un délégué qui implémente readerSession(_:didDetect:) reçoit des objets tag à la place, et demande lui même le tag suivant par restartPolling(). Une session de tag fonctionne de la même façon.

Une relance a un coût. La note d'Apple sur restartPolling() indique que les tags détectés avant elle sont invalides et que l'application doit abandonner ses références à ceux ci, et que l'appel n'a aucun effet sur une session déjà invalidée.

Dans une session NDEF dont le délégué n'implémente pas readerSession(_:didDetect:), l'appel est inutile : la session signale des messages et relance l'interrogation d'elle même. Depuis iOS 26.4, une session de tag peut relancer avec une nouvelle Configuration, changeant ses options d'interrogation ou ses identifiants entre deux tags.

Deux tags à la fois

Une session peut voir plus d'un tag dans la même passe. L'exemple de lecteur de tags d'Apple le traite avant d'écrire : il compte les tags, demande à l'utilisateur de les retirer tous, et relance l'interrogation après une demi seconde.

La même règle convient à la lecture. Deux tags dans le champ pendant une série signifient en général deux tags empilés ou posés trop près l'un de l'autre, ce que couvre la page de l'espacement.

Dire à l'utilisateur ce qui se passe

alertMessage est l'endroit où l'utilisateur regarde pendant un scan. Sa documentation indique qu'une session qui lit plusieurs tags peut le mettre à jour après chacun, depuis n'importe quel fil, tant que la session reste valide.

Servez-vous en pour compter, tag trois sur dix lu, au suivant. Une série sans retour entre les tags laisse l'utilisateur deviner si le dernier contact a compté.

Questions fréquentes

Pourquoi ma session s'arrête-t-elle après le premier tag ?

invalidateAfterFirstRead est à vrai. Créez la session avec faux pour continuer de lire.

Faut-il appeler restartPolling après chaque tag ?

Seulement quand le délégué reçoit des objets tag par readerSession(_:didDetect:). Avec des messages seuls, la session relance l'interrogation d'elle même une fois les tags hors de portée.

Combien de temps dure une session ?

Apple documente une erreur d'expiration mais aucune durée. Attendez-vous à ce que la session se termine, et ouvrez-en une nouvelle pour une longue série.

Peut-on continuer d'employer un objet tag après une relance ?

Non. Les tags détectés avant une relance sont invalides, et Apple demande aux applications d'abandonner leurs références.