Cosa deve fare un'applicazione quando l'NFC è spento o assente?
Distinguere gli stati prima di scrivere qualunque messaggio. Su Android: nessun controller, un controller che chi usa ha spento e, da Android 16, i tag rifiutati alla tua applicazione. Su iPhone: disponibile oppure no. Poi dire quale dei casi è, e lasciar funzionare il resto dell'applicazione.
Tre stati su Android
Hanno bisogno di risposte diverse, e la pagina dei limiti del controller li legge mentre il codice gira. getDefaultAdapter() rende null quando il telefono non ha alcun controller NFC: la funzionalità non esiste e non esisterà mai su quell'apparecchio. isEnabled() rende falso quando chi usa ha spento l'NFC, che è a un'impostazione di distanza dall'essere sistemato. E da Android 16 chi usa può rifiutare gli intent di tag a una sola applicazione, cosa che isTagIntentAllowed() segnala mentre l'adattatore dice di essere acceso.
Il terzo è quello che produce le migliori segnalazioni di difetto, perché tutto sembra a posto: l'NFC è acceso, l'applicazione è installata, il manifest è giusto, e nessun tag arriva mai.
Due su iPhone
Core NFC risponde prima che una sessione esista: readingAvailable dice se l'apparecchio sa leggere. Oltre a questo, sono gli errori a portare il resto, readerErrorRadioDisabled per una radio spenta e readerErrorUnsupportedFeature per qualcosa che la sessione non sa fare.
Non c'è alcun equivalente della schermata di impostazioni di Android dove mandare chi usa, il che cambia le parole e non la logica: un iPhone che non sa leggere è un fatto dell'apparecchio, e il mestiere dell'applicazione è dirlo una volta e andare avanti. Quali iPhone leggano è la pagina dei modelli.
Cosa dire per ciascuno
Nessun materiale: nascondi la funzione invece di spiegarla. Un pulsante che su quel telefono non può funzionare è una richiesta di assistenza che aspetta, e la sua assenza non ha bisogno di alcuna frase.
Spento: proponi l'impostazione. Android espone la schermata delle impostazioni NFC come intent, e mandarci chi usa batte il descrivere dove si trova, dato che il percorso cambia da un fabbricante all'altro, cosa che la pagina dell'attivazione mostra.
Rifiutato alla tua applicazione: dillo, perché nient'altro nell'interfaccia lo farà. Chi usa l'ha scelto, magari per sbaglio, e solo il tuo messaggio collega il silenzio all'impostazione.
Non bloccare mai il resto
Un tocco è un ingresso fra tanti. Un'applicazione che si rifiuta di partire senza NFC ha trasformato una comodità in un obbligo, e chi non può usarla è proprio chi aveva bisogno dell'alternativa.
Tieni il percorso a mano: un codice da digitare, una ricerca, una scansione, qualunque cosa il tag stesse accorciando. E decidi a parte se l'applicazione debba installarsi su un telefono senza la radio, che è una questione di negozio più che di esecuzione: la pagina del negozio la riprende.
Domande frequenti
Come so che il telefono non ha proprio l'NFC?
getDefaultAdapter rende null su Android, e readingAvailable è falso su iOS. Tutti e due sono fatti dell'apparecchio, non impostazioni.
Posso accendere l'NFC dalla mia applicazione?
No. Su Android puoi mandare chi usa alla schermata delle impostazioni NFC; l'interruttore appartiene a chi usa.
Perché non arriva niente anche se l'NFC è acceso?
Da Android 16 chi usa può rifiutare gli intent di tag a una sola applicazione. isTagIntentAllowed lo segnala, e nient'altro nell'interfaccia lo farà.
L'applicazione deve rifiutarsi di funzionare senza NFC?
No. Tieni il percorso a mano e lascia funzionare il resto. Se debba installarsi è una decisione a parte, a livello di negozio.