Vai al contenuto
Lingua: IT

Perché una sessione Core NFC finisce da sola?

Perché è il sistema a chiuderla, e dice quale delle cinque cose è successa: il primo tag NDEF è stato letto, chi usa ha annullato, la sessione è scaduta, il sistema era occupato, oppure si è chiusa in modo imprevisto. Dopo non si può riavviare, quindi l'applicazione ne crea una nuova.

I cinque modi in cui finisce

Apple li raggruppa come errori di sessione, e i loro nomi dicono cosa è successo. readerSessionInvalidationErrorFirstNDEFTagRead arriva quando una sessione creata per leggere un solo tag lo ha letto. readerSessionInvalidationErrorUserCanceled vuol dire che chi usa ha chiuso il foglio. readerSessionInvalidationErrorSessionTimeout vuol dire che la sessione è scaduta. readerSessionInvalidationErrorSystemIsBusy vuol dire che il sistema l'ha rifiutata per ragioni sue, e readerSessionInvalidationErrorSessionTerminatedUnexpectedly copre il resto.

Uno solo di questi è un difetto della tua applicazione, e di solito è il primo: una sessione creata con invalidateAfterFirstRead a vero quando l'applicazione voleva continuare a leggere, cosa che la pagina dei più tag districa. Gli altri sono il sistema e chi usa che fanno il loro mestiere.

La scadenza senza numero

Apple documenta l'errore e non la durata. Una sessione che resta aperta senza nulla davanti finisce da sola, e nessun valore del riferimento dice quando, quindi un'applicazione che legge una serie lunga prevede di aprire una sessione nuova invece di dare per scontato che la prima duri.

Quel silenzio ha una conseguenza pratica: la durata non è una cosa da fissare nel codice a partire da una misura su un telefono e su una versione. Quello su cui il codice può contare è che l'errore arriva, e quello che fa dopo.

Cosa fa poi l'applicazione

Una sessione si usa una volta sola. Una volta invalidata non può più cercare, quindi l'applicazione ne crea una nuova, cosa che l'esempio di lettore di tag di Apple fa dopo ogni invalidazione. Tutto quello che l'applicazione teneva dalla vecchia sessione, tag compresi, è scaduto.

Di' perché, quando chi usa può fare qualcosa. invalidate(errorMessage:) chiude una sessione con un messaggio nel foglio di sistema, e alertMessage ne fissa il testo mentre dura: questi due sono tutto il vocabolario che l'applicazione ha dentro il foglio, cosa che la pagina del foglio di lettura descrive dal lato di chi usa. Una sessione annullata non ha bisogno di alcun messaggio; un sistema occupato merita un nuovo tentativo invece di una spiegazione.

Cosa verificare prima di aprirne una

readingAvailable risponde se l'apparecchio sa leggere, e Apple chiede alle applicazioni di verificarlo prima di creare una sessione. readerErrorRadioDisabled esiste per una radio spenta, e readerErrorUnsupportedFeature per una funzionalità che la sessione non sostiene.

E nel sistema gira una sola sessione di lettura alla volta, quindi una seconda aspetta: un'applicazione che apre una sessione mentre un'altra è aperta non ha fallito, è in coda, cosa che la pagina delle sessioni copre con il resto del modello.

Domande frequenti

Posso riavviare una sessione invalidata?

No. Una sessione si usa una volta sola: una volta invalidata non può più cercare, e l'applicazione ne crea una nuova.

Quanto passa prima che una sessione scada?

Il riferimento di Apple non dà alcuna durata. Tratta l'errore di scadenza e apri una sessione nuova invece di dipendere da un valore misurato.

Quale invalidazione è colpa mia?

Di solito il primo tag NDEF letto, quando la sessione è stata creata per finire dopo un tag mentre l'applicazione voleva continuare a leggere.

Cosa vuol dire che il sistema è occupato?

Il sistema ha rifiutato la sessione per ragioni sue. Riprova una volta, e dillo a chi usa solo se continua.