Host Card Emulation funziona a schermo spento?
Dipende dalla versione di Android e da un'impostazione del dispositivo. Fino ad Android 9 niente risponde a schermo spento. Da Android 12 un servizio può mettere requireDeviceScreenOn a falso. E finché Secure NFC è acceso, da Android 10, ogni emulatore di scheda è indisponibile a schermo spento.
Versione per versione
La guida all'emulazione di scheda di Android risponde a questo per versione, e le risposte differiscono abbastanza da rendere sbagliata da qualche parte una frase sola.
Su Android 9 e precedenti, il controller e il processore applicativo sono spenti quando lo schermo è spento, quindi nessun servizio risponde; dalla schermata di blocco rispondono, a meno che il servizio non chieda uno sblocco. Da Android 10, l'impostazione Secure NFC cambia la domanda: finché è accesa, ogni emulatore di scheda, sull'host o fuori host, è indisponibile a schermo spento, e un servizio sull'host non può funzionare dalla schermata di blocco qualunque cosa abbia dichiarato; finché è spenta, le applicazioni fuori host restano disponibili a schermo spento. isSecureNfcSupported segnala se il dispositivo abbia del tutto l'impostazione.
Da Android 12, un'applicazione che punta a quella versione o a una successiva può mettere requireDeviceScreenOn a falso e rispondere a schermo spento. Da Android 15, un'applicazione portafoglio predefinita che accende il modo osservazione scavalca sia il comportamento dello sblocco sia quello dello schermo spento, perché è lei a decidere quando una transazione può andare avanti.
Le due dichiarazioni
Tutt'e due vivono nell'XML che registra gli identificatori, sul tag host-apdu-service. requireDeviceUnlock vale falso per impostazione predefinita, il che vuol dire che il servizio viene invocato anche su un telefono bloccato. Messo a vero, un tocco che si risolve sul servizio fa chiedere ad Android di sbloccare, e poi di toccare di nuovo, dato che il telefono è stato mosso per essere sbloccato.
requireDeviceScreenOn è la più recente, e falso è quello che lascia rispondere un pagamento a schermo spento da Android 12. Nessuno dei due attributi vale per un servizio fuori host: il processore host non è coinvolto in quello scambio, quindi non può trattenere l'elemento sicuro.
Che cosa ha cambiato il modo osservazione
Il modo osservazione, da Android 15, lascia il dispositivo guardare i cicli di sondaggio senza consentire una transazione. Un servizio lo accende con setObserveModeEnabled(true), e la pila allora osserva invece di fare transazioni, che è il modo in cui un portafoglio può aspettare chi usa il telefono prima di rispondere qualsiasi cosa.
Quello che il servizio osserva è filtrato. I filtri registrati per un servizio corrispondono a una trama di sondaggio esattamente o per motivo, e le trame che corrispondono raggiungono processPollingFrames(), dove l'applicazione può prepararsi o autenticare chi usa il telefono; le trame di un lettore che sonda con trame normalizzate vanno al servizio preferito in primo piano, o a chi porta il ruolo di portafoglio. Una trama porta anche una misura della forza del campo propria del costruttore, letta con getVendorSpecificGain.
Uscire dal modo osservazione è il segnale che l'applicazione è pronta: setObserveModeEnabled(false), oppure autoTransact su un filtro perché lo faccia una trama che corrisponde. Un servizio può chiedere di partire in modo osservazione ogni volta che è il servizio di pagamento preferito, tramite shouldDefaultToObserveMode nel manifest o setShouldDefaultToObserveModeForService.
Progettare per un telefono bloccato
Prova gli stati invece delle versioni. Schermo acceso e sbloccato, schermo acceso e bloccato, schermo spento, ciascuno con Secure NFC acceso e spento, è una matrice corta che risponde a quello che incontrerà chi usa il telefono, e il telefono in tasca è lo stato che quasi tutte le dimostrazioni saltano. La pagina dello schermo spento copre lo stesso confine dal lato di chi usa il telefono.
Poi decidi che aspetto abbia il guasto. Un servizio che non può rispondere da bloccato lascia chi usa il telefono davanti a un lettore che non dice nulla, quindi l'applicazione deve spiegare lo stato da qualche parte dove si guarderà, cosa che la richiesta di sblocco della guida fa solo quando il servizio ha chiesto lo sblocco.
E se un lettore si può cambiare, cambialo insieme al telefono: la guida incoraggia a lavorare con i fornitori di lettori perché i loro cicli di sondaggio portino un motivo riconoscibile, che è quello che lascia a un servizio riconoscere il proprio terminale prima di decidere di fare una transazione.
Domande frequenti
Una scheda emulata può rispondere a schermo spento?
Da Android 12, se il servizio mette requireDeviceScreenOn a falso e Secure NFC è spento. Fino ad Android 9 il controller è spento insieme allo schermo.
Che cosa cambia Secure NFC?
Finché è acceso, ogni emulatore di scheda è indisponibile a schermo spento, e un servizio sull'host non può funzionare dalla schermata di blocco qualunque cosa abbia dichiarato.
Che cosa fa requireDeviceUnlock?
Messo a vero, un tocco chiede di sbloccare e poi di toccare di nuovo. Per impostazione predefinita vale falso, quindi il servizio risponde su un telefono bloccato.
Queste impostazioni valgono per un elemento sicuro?
No. Nessuno dei due attributi vale per un servizio fuori host, dato che il processore host non fa parte di quello scambio.