Come riceve un'applicazione iOS un tag letto in background?
Tramite un collegamento universale. Sugli iPhone che la sostengono, il sistema legge il tag, prende il primo record URI e mostra una notifica. Al tocco si apre l'applicazione che rivendica il collegamento e riceve tutto il messaggio NDEF in un NSUserActivity. Gli schemi di URL propri non funzionano, e senza l'applicazione il collegamento si apre in Safari.
Quello che fa il sistema
L'articolo sulla lettura in background di Apple descrive la sequenza. Il sistema legge il tag senza alcuna applicazione aperta, mostra una notifica per ogni tag nuovo, e consegna i dati solo dopo che è stata toccata; su un iPhone bloccato, chiede prima di sbloccare.
Nel messaggio cerca una cosa sola: un record URI, del tipo ben noto U. Quando il messaggio ne porta diversi, il sistema usa il primo, e quel record deve contenere o un collegamento universale o uno degli schemi di URL che sostiene.
Apple dichiara che l'iPhone XS e i modelli successivi sostengono la lettura dei tag in background. Sui modelli più vecchi l'applicazione deve offrire la lettura dal suo interno, cosa che l'articolo raccomanda in ogni caso.
Collegamenti universali, non schemi propri
L'articolo è esplicito: la lettura in background non sostiene gli schemi di URL propri, e le applicazioni dovrebbero usare i collegamenti universali. Gli schemi che tratta appartengono al sistema: collegamenti web, posta, SMS, telefono, FaceTime, Mappe e configurazione di un accessorio HomeKit.
Quindi il tag porta un indirizzo https su un dominio che l'applicazione rivendica. L'applicazione accende Associated Domains ed elenca quel dominio, il che aggiunge l'abilitazione dei domini associati al progetto e all'App ID.
Quando nessuna applicazione installata rivendica il collegamento, il sistema lo apre in Safari. È il ripiego che la pagina dell'apertura di un'applicazione raccomanda di progettare: una pagina che abbia senso senza l'applicazione.
Quello che riceve l'applicazione
Il sistema avvia l'applicazione, o la porta in primo piano, e chiama application(_:continue:restorationHandler:) con un NSUserActivity di tipo NSUserActivityTypeBrowsingWeb. Il messaggio letto dal tag sta nella sua proprietà ndefMessagePayload.
Verifica che l'attività venga da un tag. Per le attività non prodotte dalla lettura in background, dice l'articolo, il carico utile porta un record solo, del tipo vuoto, così un'applicazione che apre i propri collegamenti universali anche da altrove sa distinguere i due casi.
Arriva tutto il messaggio, non solo il collegamento. Gli altri record sul tag, un testo o un carico utile MIME dopo l'URI, sono a disposizione dell'applicazione una volta che si apre.
Quando non succede
La lettura in background gira solo mentre l'iPhone è in uso, e l'articolo elenca i momenti in cui non è disponibile nemmeno con lo schermo acceso: prima del primo sblocco, durante una sessione di lettura Core NFC, mentre è in uso Wallet di Apple Pay, mentre è in uso la fotocamera, e in modalità aereo.
Un'applicazione che legge con una propria sessione blocca quindi la lettura in background per tutta la durata della sessione. Il lato di chi usa il telefono di queste condizioni sta nella pagina della lettura in background.
Domande frequenti
Uno schema di URL proprio può aprire la mia applicazione da un tag?
Non tramite la lettura in background, che secondo la documentazione di Apple non sostiene gli schemi di URL propri. Usa un collegamento universale su un dominio che l'applicazione rivendica.
L'applicazione si apre senza che si tocchi nulla?
No. Il sistema mostra una notifica per ogni tag nuovo e consegna i dati solo dopo che è stata toccata, chiedendo prima di sbloccare quando il telefono è bloccato.
Quale record usa il sistema?
Il primo record URI del messaggio, del tipo ben noto U. Tutto il messaggio viene poi consegnato all'applicazione dentro l'attività.
E se l'applicazione non è installata?
Il sistema apre il collegamento in Safari, quindi l'indirizzo dovrebbe portare a una pagina che abbia senso senza l'applicazione.