Per fornire una base solida per un'app di qualità, segui le norme sulla qualità principale delle app.
Le linee guida definiscono la qualità minima che tutte le app devono soddisfare.
Qualità delle app adattive
Le app per Android vengono eseguite su un'ampia gamma di dispositivi, dagli smartphone compatti ai tablet, ai pieghevoli, ai computer, ai display connessi, ai sistemi di infotainment per auto, alla TV e all'XR. Le modalità di visualizzazione a finestre, come lo schermo diviso e le finestre delle app, consentono alle app di essere eseguite in parti ridimensionabili di uno schermo.
Segui le norme sulla qualità delle app adattive, insieme alle norme sulla qualità principali delle app, per:
- Crea app ottimizzate per tutti i fattori di forma e le dimensioni di visualizzazione
- Migliora il ranking delle tue app nelle schede e nella ricerca di Google Play
- Acquisisci più utenti e aumenta la fidelizzazione utenti
Linee guida
Le seguenti linee guida di base ti aiutano a creare un'app di base di alta qualità.
Esperienza utente
I pattern di progettazione visiva e interazione standard di Android offrono un'esperienza utente coerente e intuitiva.
Utilizza i componenti Material Design per creare l'interfaccia utente della tua app al posto dei componenti della piattaforma Android, ove possibile. Material Design offre un aspetto moderno di Android e una UI coerente tra le versioni di Android.
Usabilità
| ID | Test | Descrizione |
|---|---|---|
| Consistent_UX | T-Consistent_UX, T-SD_Card |
L'app offre un'esperienza utente coerente per tutti i casi d'uso dell'app su tutti i fattori di forma. |
| Selettore di app | T-App_Switcher, T-SD_Card |
L'app passa in background quando lo stato attivo passa a un'altra app. L'app torna in primo piano quando viene riattivata dal selettore di app Recenti. |
| Sleep_Resume | T-Sleep_Resume, T-SD_Card |
Quando l'app è in primo piano, viene messa in pausa quando il dispositivo entra in modalità di sospensione e riprende quando il dispositivo si riattiva. |
| Lock_Resume | T-Lock_Resume, T-SD_Card |
Quando l'app è in primo piano, viene messa in pausa quando il dispositivo è bloccato e riprende quando il dispositivo viene sbloccato. |
Interfaccia utente
| ID | Test | Descrizione |
|---|---|---|
| Display_State_Parity | T-Orientation_Transitions |
Gli orientamenti del display e gli stati di piegatura espongono essenzialmente le stesse funzionalità e azioni e preservano la parità funzionale. |
| Fullscreen_Display | T-Orientation_Transitions |
L'app riempie la finestra dell'app in entrambi gli orientamenti e non è in formato letterbox a causa di modifiche alla configurazione, tra cui l'apertura e la chiusura del dispositivo. È accettabile un leggero letterboxing per compensare piccole variazioni nella geometria dello schermo. |
| Orientation_Transitions | T-Orientation_Transitions | L'app gestisce le transizioni rapide tra gli orientamenti del display e l'apertura e la chiusura del dispositivo senza problemi di rendering del display e senza perdere lo stato. |
Qualità visiva
| ID | Test | Descrizione |
|---|---|---|
| Graphic_Quality | T-Graphic_Quality |
L'app mostra grafica, testo, immagini e altri elementi UI senza distorsioni, sfocature o pixelizzazione evidenti.
|
| Line_Length | T-Line_Length | L'app garantisce la leggibilità del testo e dei blocchi di testo limitando la lunghezza delle righe a 45-75 caratteri (spazi inclusi) per ciascuna delle lingue supportate dall'app. |
| Theme_Support | T-Theme_Support | I contenuti dell'app e tutti i contenuti web a cui l'app accede supportano sia il tema chiaro sia il tema scuro. |
Navigazione
| ID | Test | Descrizione |
|---|---|---|
| Back_Button_Nav | T-Back_Nav | L'app supporta la navigazione con il pulsante Indietro standard e non utilizza prompt personalizzati sullo schermo per il pulsante Indietro. |
| Back_Gesture_Nav | T-Back_Nav | L'app supporta la navigazione tramite gesti per tornare indietro e alla schermata Home. |
| State_Preservation | T-State_Preservation, T-Back_Nav |
L'app mantiene il proprio stato o lo stato dell'utente quando non è più in primo piano e impedisce la perdita accidentale di dati a causa della navigazione a ritroso e di altre modifiche dello stato. Quando torna in primo piano, l'app ripristina lo stato conservato e le eventuali transazioni stateful in attesa. Ad esempio, modifiche ai campi modificabili, ai progressi di gioco, ai menu, ai video e ad altre sezioni dell'app.
|
Notifiche
| ID | Test | Descrizione |
|---|---|---|
| Notification_Quality | T-Notification_Quality |
Le notifiche forniscono informazioni pertinenti relative alla tua app.
|
| Conversation_Quality | T-Notification_Quality |
Per le app di messaggistica, le app social e le conversazioni:
|
Accessibilità
| ID | Test | Descrizione |
|---|---|---|
| Touch_Target_Size | T-Touch_Target_Size | I touch target sono di almeno 48 dp. Consulta le linee guida di Material Design relative alle dimensioni dei target. |
| Visual_Contrast | T-Visual_Contrast |
Il testo dell'app e i contenuti in primo piano mantengono i seguenti rapporti di contrasto con lo sfondo dell'app:
Scopri di più su colore e contrasto. |
| Content_Description | T-Content_Description | Descrivi ogni elemento UI,
ad eccezione di TextView, utilizzando contentDescription. |
Funzionalità
La tua app deve implementare il seguente comportamento funzionale.
Audio
| ID | Test | Descrizione |
|---|---|---|
| Audio_Playback_Start | T-Audio_Playback_Start |
Quando l'utente avvia la riproduzione audio, l'app deve eseguire una delle seguenti operazioni entro un secondo:
|
| Audio_Focus_Request | T-Audio_Focus_Request | L'app deve richiedere il focus audio quando inizia la riproduzione dell'audio e abbandonarlo quando la riproduzione si interrompe. |
| Audio_Focus_Change | T-Audio_Focus_Change | L'app deve gestire le richieste di altre app per l'audio focus. Ad esempio, un'app potrebbe ridurre il volume di riproduzione quando un'altra app riproduce un audio vocale. |
| Audio_Playback_Background | T-Audio_Playback_Background | L'app deve supportare la riproduzione in background. L'app deve utilizzare un servizio in primo piano per impedire al sistema di interrompere il processo dell'app quando questa non è più visibile. L'app deve inoltre mostrare una notifica persistente e non ignorabile nella barra di stato o nella schermata di blocco per informare l'utente che l'app è in esecuzione. Gli utenti devono poter controllare la riproduzione utilizzando i controlli della notifica o della schermata di blocco oppure i controlli di un accessorio collegato. |
| Audio_Notification_Style | T-Audio_Notification_Style | Quando l'app riproduce audio in background, deve creare una notifica con lo stile MediaStyle. |
| Audio_Playback_Resume | T-Audio_Playback_Resume | Se l'app è in background e l'audio è in pausa, l'audio riprende quando l'app torna in primo piano oppure l'app deve indicare all'utente che la riproduzione è in pausa. |
Video
| ID | Test | Descrizione |
|---|---|---|
| Video_PiP | T-Video_PiP | Se l'app riproduce video, deve supportare la riproduzione picture in picture. |
| Video_Encoding | T-Video_Encoding | Se l'app codifica i video, deve farlo utilizzando lo standard di compressione video HEVC. |
| Video_Playback_Background | T-Video_Playback_Background | L'app supporta la riproduzione in background dei video quando non è l'app in primo piano, anche quando la finestra dell'app è:
|
Condivisione
| ID | Test | Descrizione |
|---|---|---|
| System_Sharesheet | T-System_Sharesheet | L'app deve utilizzare Android Sharesheet per la condivisione di contenuti. L'app può suggerire target non disponibili per le soluzioni personalizzate. |
Servizi in background
| ID | Test | Descrizione |
|---|---|---|
| Background_Service_Optimization | T-Background_Service_Optimization |
L'app evita di eseguire servizi inutilmente lunghi in background per garantire il corretto funzionamento del dispositivo dell'utente. Nota:il sistema applica varie limitazioni ai servizi in background. Di seguito sono riportati alcuni esempi di utilizzo non corretto dei servizi in background:
Per saperne di più, consulta Panoramica delle attività in background. |
Prestazioni e stabilità
La tua app deve offrire prestazioni, stabilità, compatibilità e reattività ottimali.
Prestazioni
| ID | Test | Descrizione |
|---|---|---|
| App_Startup_Time | T-App_Startup_Time | L'app si carica rapidamente o fornisce un feedback sullo schermo all'utente (un indicatore di avanzamento o un segnale simile) se il caricamento richiede più di due secondi. |
| Rendering_Performance | T-Rendering_Performance | L'app esegue il rendering dei frame ogni 16 millisecondi (o meno) per visualizzare almeno 60 frame al secondo. Per assistenza in caso di problemi di rendering, consulta Rendering lento. |
| StrictMode_Compliance | T-StrictMode_Compliance | Con StrictMode attivato (consulta la sezione relativa ai test di StrictMode), non sono visibili flash rossi (avvisi sul rendimento di StrictMode) durante il test dell'app. |
Stabilità
| ID | Test | Descrizione |
|---|---|---|
| Stability_ANR | T-Stability_ANR | L'app non si arresta in modo anomalo né blocca il thread dell'interfaccia utente causando errori ANR (Android Not Responding). Utilizza il report pre-lancio di Google Play per identificare potenziali problemi di stabilità. Dopo il deployment, monitora la pagina Android vitals nella console Google Play. |
SDK
| ID | Test | Descrizione |
|---|---|---|
| Android_Platform_Compatibility | T-Android_Platform_Compatibility | L'app viene eseguita sull'ultima versione pubblica della piattaforma Android senza arrestarsi in modo anomalo o influire gravemente sulla funzionalità di base. |
| Target_SDK_Version | T-Target_SDK_Version | L'app ha come target l'SDK Android più recente necessario per l'allineamento ai requisiti di Google Play impostando il valore targetSdk nel file build.gradle del modulo dell'app. |
| Compile_SDK_Version | T-Target_SDK_Version | L'app è stata creata con l'SDK Android più recente impostando il valore compileSdk nel file build.gradle del modulo dell'app. |
| SDK_Maintenance | T-SDK_Maintenance, T-Non_SDK_Interfaces |
Gli SDK di Google o di terze parti utilizzati sono aggiornati. Eventuali miglioramenti a questi SDK relativi a stabilità, compatibilità o sicurezza devono essere messi a disposizione degli utenti in modo tempestivo. Per gli SDK Google, utilizza gli SDK basati su Google Play Services, se disponibili. Questi SDK sono compatibili con le versioni precedenti, ricevono aggiornamenti automatici, riducono le dimensioni del pacchetto applicativo e utilizzano in modo efficiente le risorse on-device. |
| Non_SDK_Interfaces | T-Non_SDK_Interfaces | L'app non utilizza interfacce non SDK. |
| Production_Build_Quality | T-Production_Build_Quality | Nell'app di produzione non sono incluse librerie di debug. Le librerie di debug incluse nell'app possono causare problemi di prestazioni e sicurezza. |
Batteria
| ID | Test | Descrizione |
|---|---|---|
| Power_Management | T-Power_Management |
L'app supporta correttamente le funzionalità di gestione del consumo energetico Doze e Standby delle app. Le app possono richiedere un'esenzione per la manutenzione dell'alimentazione. Consulta la sezione Supporto per altri casi d'uso in Ottimizza per Doze e Standby delle app. |
Privacy e sicurezza
L'app gestisce i dati utente e le informazioni personali in modo sicuro e fornisce livelli di autorizzazione appropriati.
Le applicazioni pubblicate sul Google Play Store devono inoltre rispettare le norme relative ai dati utente di Google Play per proteggere la privacy degli utenti.
Autorizzazioni
| ID | Test | Descrizione |
|---|---|---|
| Minimize_Permissions | T-Minimize_Permissions | L'app richiede solo le autorizzazioni minime necessarie per supportare il caso d'uso corrente. Per alcune autorizzazioni, ad esempio la posizione, l'app utilizza una specifica approssimativa anziché esatta, se possibile. Consulta la sezione Riduci al minimo le richieste di autorizzazione. |
| Sensitive_Permissions | T-Sensitive_Permissions |
L'app richiede l'autorizzazione ad accedere a dati sensibili (ad esempio gruppi di autorizzazioni SMS o Registri chiamate o posizione) o a servizi a pagamento (ad esempio Dialer o SMS) solo se direttamente correlati ai casi d'uso principali dell'app. Le implicazioni relative a queste autorizzazioni devono essere comunicate all'utente in un'informativa in evidenza. A seconda di come la tua app utilizza le autorizzazioni, potrebbe essere possibile un modo alternativo per soddisfare il caso d'uso della tua app senza fare affidamento sull'accesso a informazioni sensibili. Ad esempio, anziché richiedere autorizzazioni relative ai contatti di un utente, utilizza un intent implicito per richiedere l'accesso. |
| Runtime_Permissions | T-Runtime_Permissions | L'app richiede le autorizzazioni di runtime quando viene richiesta la funzionalità, anziché durante l'avvio dell'app. |
| Permission_Rationale | T-Permission_Rationale | L'app spiega chiaramente perché sono necessarie le autorizzazioni. |
| Graceful_Degradation | T-Graceful_Degradation | L'app applica la riduzione controllata quando gli utenti negano o revocano un'autorizzazione. L'app non deve impedire completamente l'accesso degli utenti. |
Dati e file
| ID | Test | Descrizione |
|---|---|---|
| Sensitive_Data_Storage | T-Sensitive_Data_Storage, T-Sensitive_Data_Handling |
Tutti i dati sensibili vengono archiviati nella memoria interna dell'app. |
| Sensitive_Data_Logging | T-Sensitive_Data_Logging | Nessun dato utente personale o sensibile viene registrato nel log di sistema o in un log specifico dell'app. |
| Hardware_IDs | T-Hardware_IDs | L'app non utilizza ID hardware non reimpostabili, come l'IMEI, per scopi di identificazione. |
Backup e ripristino dei dati
| ID | Test | Descrizione |
|---|---|---|
| App_Data_Backup | T-App_Data_Backup |
L'app conserva i dati utente, le impostazioni e lo stato dell'app nei backup sul cloud e nei trasferimenti da dispositivo a dispositivo (D2D). Implementa il backup automatico e configura |
| App_Logins_Restoration | T-App_Logins_Restoration |
L'app ripristina automaticamente gli account utente e lo stato di accesso quando un utente configura un nuovo dispositivo. Implementa Restore Credentials utilizzando Gestore delle credenziali per autenticare nuovamente gli utenti in modo automatico senza forzare i flussi di accesso manuale o di recupero dell'account. |
Identità
| ID | Test | Descrizione |
|---|---|---|
| Autofill_Hints | T-Autofill_Hints | L'app fornisce suggerimenti per la compilazione automatica delle credenziali dell'account e di altre informazioni sensibili, come dati della carta di credito, indirizzo fisico e numero di telefono. |
| Credential_Manager | T-Credential_Manager | L'app integra Gestore delle credenziali per Android per un'esperienza di accesso fluida che unifica il supporto per passkey, identità federata e password. |
| Biometric_Authentication | T-Biometric_Authentication | L'app supporta l'autenticazione biometrica per proteggere le transazioni finanziarie o le informazioni sensibili, ad esempio i documenti importanti degli utenti. |
Componenti app
| ID | Test | Descrizione |
|---|---|---|
| Component_Export | T-Component_Export |
L'app imposta l'attributo Vengono esportati solo i componenti dell'applicazione che condividono dati con altre app o i componenti che devono essere richiamati da altre app. |
| Component_Permissions | T-Component_Permissions |
Tutti gli intent e i broadcast seguono le best practice:
|
| Component_Protection | T-Component_Protection |
Tutti i componenti che condividono contenuti tra app utilizzano Le app non devono fare affidamento sull'accesso a un elenco di pacchetti installati. |
Networking
| ID | Test | Descrizione |
|---|---|---|
| Network_Security_Traffic | T-Network_Security_Traffic | Tutto il traffico di rete viene inviato tramite SSL. |
| Network_Security_Configuration | T-Network_Security_Configuration | L'app dichiara una configurazione di sicurezza di rete. |
| Security_Provider_Initialization | T-Security_Provider_Initialization | Se l'app utilizza Google Play Services, il provider di sicurezza viene inizializzato all'avvio dell'applicazione. |
WebView
| ID | Test | Descrizione |
|---|---|---|
| WebView_Asset_Loader | T-WebView_Asset_Loader, T-WebView_Navigation |
Non utilizzare setAllowUniversalAccessFromFileURLs() per accedere ai contenuti locali. Utilizza invece WebViewAssetLoader. |
| WebView_JavaScript | T-WebView_JavaScript, T-WebView_Navigation |
Visualizzazioni web: non utilizzare Su Android 6.0 (livello API 23 e versioni successive), utilizza invece i canali di messaggi HTML. |
Esecuzione
| ID | Test | Descrizione |
|---|---|---|
| App_Bundles | T-App_Bundles |
L'app non carica dinamicamente codice dall'esterno dell'APK dell'app. Utilizza gli Android App Bundle, che includono Play Feature Delivery e Play Asset Delivery. A partire da agosto 2021, l'utilizzo degli Android App Bundle è obbligatorio per tutte le nuove app nel Google Play Store. |
Crittografia
| ID | Test | Descrizione |
|---|---|---|
| Cryptographic_Algorithms | T-Cryptographic_Algorithms | L'app utilizza algoritmi crittografici e un generatore di numeri casuali efficaci forniti dalla piattaforma. Inoltre, l'app non implementa algoritmi personalizzati. |
Google Play
Attiva la pubblicazione della tua app su Google Play.
Norme
| ID | Test | Descrizione |
|---|---|---|
| Play_Content_Policies | T-Play_Content_Policies | L'app rispetta rigorosamente i termini delle Norme relative ai contenuti per gli sviluppatori di Google Play, non offre contenuti inappropriati e non utilizza la proprietà intellettuale o il brand di altri. |
| Play_Content_Rating | T-Play_Content_Policies | Il livello di maturità dell'app è impostato in modo appropriato in base alle linee guida per la classificazione dei contenuti. |
Pagina dei dettagli dell'app
| ID | Test | Descrizione |
|---|---|---|
| Play_Feature_Graphic | T-Play_Feature_Graphic, T-Play_Graphic_Assets |
L'immagine in primo piano dell'app segue le linee guida descritte in questo articolo di assistenza. Verifica quanto segue:
|
| Play_Device_References | T-Play_Graphic_Assets | Gli screenshot e i video dell'app non mostrano o fanno riferimento a dispositivi non Android. |
| Play_Misleading_Content | T-Play_Graphic_Assets | Gli screenshot o i video dell'app non rappresentano i contenuti e l'esperienza della tua app in modo fuorviante. |
Assistenza utenti
| ID | Test | Descrizione |
|---|---|---|
| Play_User_Reviews | T-Play_Content_Policies | I bug comuni segnalati dagli utenti nella scheda Recensioni della pagina di Google Play vengono risolti se sono riproducibili e si verificano su molti dispositivi diversi. Se un bug si verifica solo su alcuni dispositivi, devi comunque risolverlo se questi dispositivi sono particolarmente popolari o nuovi. |
Ambiente di test
Configura un ambiente di test come segue:
Test con l'emulatore:l'emulatore Android è un ottimo modo per testare la tua app con diverse versioni di Android e risoluzioni dello schermo. Configura dispositivi emulati (AVD) per rappresentare i fattori di forma e le combinazioni hardware/software più comuni per la tua base utenti di destinazione. Testa una serie di fattori di forma utilizzando i seguenti emulatori (come minimo):
- Pieghevoli: pieghevole da 7,6" con display esterno (questo è elencato in Smartphone in Gestione AVD)
- Tablet: Pixel C 9,94" (2560 x 1800 px)
- Test delle notifiche dell'app mobile: accoppia un dispositivo mobile / emulatore con l'emulatore Wear OS: Wear OS Round 1,84"
Dispositivi hardware:l'ambiente di test deve includere un numero ridotto di dispositivi hardware reali che rappresentino i fattori di forma e le combinazioni hardware/software chiave disponibili per i consumatori. Non è necessario eseguire test su ogni dispositivo presente sul mercato. Concentrati su un numero ridotto di dispositivi rappresentativi, utilizzando anche uno o due dispositivi per fattore di forma.
Laboratori di test dei dispositivi:puoi anche utilizzare servizi di terze parti, come Firebase Test Lab, per testare la tua app su un'ampia gamma di dispositivi.
Esegui i test con l'ultima versione di Android:oltre a testare le versioni di Android rappresentative della tua base utenti target, devi sempre eseguire i test con l'ultima versione di Android per assicurarti che le ultime modifiche al comportamento non influiscano negativamente sull'esperienza utente della tua app.
Per ulteriori indicazioni sui test, inclusi i test delle unità, i test di integrazione e i test dell'interfaccia utente, consulta Concetti fondamentali sul test di app per Android.
StrictMode
Per i test delle prestazioni, attiva StrictMode nella tua app. Utilizza StrictMode per rilevare operazioni che potrebbero influire sulle prestazioni, sugli accessi alla rete e sulle letture e scritture di file. Cerca operazioni potenzialmente problematiche sia nel thread principale sia in altri thread.
Configura una policy di monitoraggio per thread utilizzando StrictMode.ThreadPolicy.Builder e attiva tutto il monitoraggio supportato in ThreadPolicy utilizzando detectAll().
Attiva la notifica visiva delle violazioni delle policy per ThreadPolicy utilizzando
penaltyFlashScreen().
Test
I test di qualità principali delle app ti aiutano a valutare la qualità di base della tua app. Puoi combinare i test o integrare gruppi di test nel tuo piano di test.
Esperienza utente
Esegui test per un'esperienza utente coerente e intuitiva.
Usabilità
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Consistent_UX | Consistent_UX |
Naviga in tutte le parti dell'app: tutte le schermate, le finestre di dialogo, le impostazioni e tutti i flussi utente. Procedi nel seguente modo:
|
| T-App_Switcher | App_Switcher | Da ogni schermata dell'app, passa a un'altra app in esecuzione, quindi torna all'app in fase di test utilizzando il selettore di app Recenti. |
| T-Sleep_Resume | Sleep_Resume | Premi il tasto di accensione per attivare la modalità di sospensione del dispositivo, quindi premilo di nuovo per riattivare lo schermo. |
| T-Lock_Resume | Lock_Resume | Configura un blocco schermo sul dispositivo. Premi il tasto di accensione per mettere il dispositivo in modalità di sospensione (che blocca il dispositivo). Quindi, premi di nuovo il tasto di accensione per riattivare lo schermo e sbloccare il dispositivo. |
Scheda SD
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-SD_Card | Consistent_UX |
Esegui test delle funzionalità di base con l'app installata su una scheda SD del dispositivo (se l'app supporta questo metodo di installazione). Per spostare l'app su una scheda SD, consulta le Impostazioni dell'app. |
Interfaccia utente
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Orientation_Transitions | Display_State_Parity, Fullscreen_Display, Orientation_Transitions |
Da ogni schermata dell'app, ruota il dispositivo tra gli orientamenti orizzontale e verticale e tra gli stati aperto e chiuso almeno tre volte. Verifica che l'app esegua le seguenti operazioni:
|
Qualità visiva
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Graphic_Quality | Graphic_Quality | Utilizza tutte le funzionalità della tua app. Verifica che tutti gli elementi visivi, inclusi grafica, testo, immagini e altri elementi UI, non presentino distorsioni, sfocature o pixelizzazione. |
| T-Line_Length | Line_Length |
Esamina tutti i blocchi di testo nell'app. Verifica che la lunghezza delle righe del testo e dei blocchi di testo sia limitata a 45-75 caratteri (spazi inclusi) per garantire la leggibilità. Verifica quanto segue:
|
| T-Theme_Support | Theme_Support | Verifica che tutto il testo sia leggibile nei temi chiaro e scuro. Verifica che tutti gli elementi visivi siano chiaramente distinguibili ed esteticamente gradevoli nei temi chiaro e scuro. |
Navigazione
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Back_Nav | Back_Button_Nav, Back_Gesture_Nav |
Naviga in tutte le parti dell'app: tutte le schermate, le finestre di dialogo, le impostazioni e tutti i flussi utente. Dalla schermata di ogni app, premi il pulsante Indietro o utilizza il gesto di scorrimento indietro. L'app dovrebbe tornare alla schermata precedente o alla schermata Home. |
| T-State_Preservation | State_Preservation | Dalla schermata di ogni app, premi il tasto Home del dispositivo o scorri verso l'alto nella navigazione tramite gesti, quindi riavvia l'app dalla schermata Tutte le app. |
Notifiche
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Notification_Quality | Notification_Quality, Conversation_Quality |
Attiva e osserva nel riquadro notifiche tutti i tipi di notifiche che l'app può mostrare. Espandi le notifiche, se applicabile (Android 4.1 e versioni successive), e tocca tutte le azioni disponibili. |
Accessibilità
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Touch_Target_Size | Touch_Target_Size | Verifica che i touch target mantengano dimensioni e posizioni coerenti e accessibili per tutte le dimensioni e configurazioni del display. Per informazioni sull'accessibilità, consulta Accessibility Scanner. |
| T-Visual_Contrast | Visual_Contrast | Verifica il contrasto di tutti gli elementi visivi. |
| T-Content_Description | Content_Description | Verifica che tutti gli elementi UI diversi da TextView abbiano descrizioni dei contenuti. |
Funzionalità
Verifica che la tua app implementi il seguente comportamento funzionale.
Audio
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Audio_Playback_Start | Audio_Playback_Start | Avviare la riproduzione audio. Verifica che l'app inizi a riprodurre l'audio entro un secondo o fornisca un indicatore visivo che i dati audio sono in fase di preparazione per la riproduzione. |
| T-Audio_Focus_Request | Audio_Focus_Request | Avviare la riproduzione audio. L'app deve richiedere il focus audio. Quando la riproduzione audio si interrompe, l'app deve rinunciare al controllo dell'audio (ciò avviene automaticamente per le app che hanno come target Android 12 (livello API 31) e versioni successive). |
| T-Audio_Focus_Change | Audio_Focus_Change | Avviare la riproduzione audio. Avvia la riproduzione audio in un'altra app. La tua app dovrebbe rispondere alla modifica della selezione audio e interrompere la riproduzione audio o ridurre il volume di riproduzione. |
| T-Audio_Playback_Background | Audio_Playback_Background | Avviare la riproduzione audio. Interagisci con un'altra app non audio come app in primo piano. L'app dovrebbe continuare a riprodurre l'audio in background e mostrare una notifica nella barra di stato. Verifica di poter gestire la riproduzione utilizzando i controlli visualizzati nella notifica. Blocca lo schermo del dispositivo. L'app dovrebbe continuare a riprodurre l'audio in background e mostrare una notifica nella schermata di blocco. Verifica di poter gestire la riproduzione utilizzando i controlli visualizzati nella notifica. |
| T-Audio_Notification_Style | Audio_Notification_Style | Avviare la riproduzione audio. Interagisci con un'altra app non audio come app in primo piano. Verifica che la tua app continui a riprodurre l'audio in background e che abbia creato una notifica con lo stile MediaStyle. Consulta la sezione Interagire correttamente con i controlli multimediali. |
| T-Audio_Playback_Resume | Audio_Playback_Resume | Avviare la riproduzione audio. Interagisci con un'altra app non audio come app in primo piano. Interagisci con la tua app per renderla l'app principale. L'audio dovrebbe riprendere o il volume dovrebbe essere ripristinato. In caso contrario, l'app deve indicare all'utente che la riproduzione è in pausa. |
Video
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Video_PiP | Video_PiP | Attiva la riproduzione di video dell'app in modalità Picture in picture. |
| T-Video_Encoding | Video_Encoding | Verifica che l'app codifichi i video utilizzando lo standard di compressione video HEVC. |
| T-Video_Playback_Background | Video_Playback_Background | Avvia la riproduzione del video. Riduci a icona la finestra dell'app, apri un'altra app per spostare la finestra dell'app in background. Sui dispositivi con funzionalità desktop, sposta la finestra dell'app fuori dal desktop visibile. Verifica che la riproduzione del video continui senza interruzioni in tutti i casi. |
Condivisione
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-System_Sharesheet | System_Sharesheet | Crea un intent e avvia un'attività chiamando startActivity() con l'intent come argomento. Consulta Utilizza Android Sharesheet. L'app dovrebbe mostrare Android Sharesheet. |
Servizi in background
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Background_Service_Optimization | Background_Service_Optimization | Utilizza tutte le funzionalità principali della tua app. Verifica che non vengano avviati servizi in background di lunga durata. Passa a un'altra app per inviare l'app in background. Vai a Impostazioni e controlla se la tua app ha servizi in esecuzione in background. Su Android 4.0 e versioni successive, vai alla schermata App e trova l'app nella scheda In esecuzione. |
Prestazioni e stabilità
Verifica le prestazioni, la stabilità e la perfezione visiva.
Prestazioni
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-App_Startup_Time | App_Startup_Time | Avvia l'app. Verifica che l'app si carichi rapidamente o fornisca un indicatore di avanzamento o un segnale simile se l'app impiega più di due secondi per caricarsi. |
| T-Rendering_Performance | Rendering_Performance | Utilizza tutte le funzionalità principali dell'app. Verifica che l'app esegua il rendering di almeno 60 frame al secondo. Utilizza l'opzione Profilo rendering HWUI per testare la tua app. |
| T-StrictMode_Compliance | StrictMode_Compliance |
Attiva Presta molta attenzione alla garbage collection e al suo impatto sull'esperienza utente. |
Stabilità
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Stability_ANR | Stability_ANR | Utilizza tutte le funzionalità principali della tua app. Verifica che l'app non si arresti in modo anomalo o non blocchi il thread dell'interfaccia utente causando errori ANR (Android Not Responding). Esamina il report pre-lancio di Google Play per identificare potenziali problemi di stabilità. |
SDK
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Android_Platform_Compatibility | Android_Platform_Compatibility | Esegui la tua app sulla versione pubblica più recente della piattaforma Android. Utilizza tutte le funzionalità principali. Verifica che l'app non si arresti in modo anomalo e che venga eseguita senza alcuna perdita delle funzionalità di base. |
| T-Target_SDK_Version | Target_SDK_Version, Compile_SDK_Version |
Esamina il file manifest di Android e la configurazione di compilazione per assicurarti che l'applicazione sia compilata con l'SDK più recente disponibile (targetSdk e compileSdk). |
| T-SDK_Maintenance | SDK_Maintenance | Controlla il file build.gradle della tua app per verificare se sono presenti dipendenze obsolete. |
| T-Non_SDK_Interfaces | Non_SDK_Interfaces | Utilizza lo strumento lint di Android Studio per rilevare l'utilizzo di interfacce non SDK. Per metodi di test alternativi, consulta Limitazioni relative alle interfacce non SDK. |
| T-Production_Build_Quality | Production_Build_Quality | Controlla il file build.gradle dell'app per verificare se sono incluse librerie di debug. |
Batteria
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Power_Management | Power_Management |
Utilizzare tutte le funzionalità principali dell'app nelle modalità di sospensione e Standby delle app. Verifica che sveglie, timer, notifiche e sincronizzazioni funzionino correttamente nel periodo di manutenzione di Doze e quando l'app esce dalla modalità Standby delle app. Testa il comportamento di Doze e Standby delle app utilizzando i comandi ADB (consulta Test con Doze e Standby delle app per i requisiti e le linee guida). Per diagnosticare un consumo imprevisto della batteria, utilizza Power Profiler di Android Studio o lo strumento Battery Historian in combinazione con il lavoro in background pianificato. |
Privacy e sicurezza
Verifica la presenza delle protezioni per la privacy e la sicurezza previste dagli utenti.
Autorizzazioni
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Minimize_Permissions | Minimize_Permissions | Esamina tutte le autorizzazioni richieste dalla tua app nel file manifest, in fase di runtime e nelle impostazioni dell'app sul dispositivo (Impostazioni > Informazioni app). |
| T-Sensitive_Permissions | Sensitive_Permissions | Utilizza tutte le funzionalità della tua app che richiedono autorizzazioni. Verifica che l'app richieda l'autorizzazione per accedere a dati o servizi sensibili solo per i casi d'uso principali dell'app. Verifica che le implicazioni della concessione dell'autorizzazione per dati e servizi sensibili siano comunicate chiaramente all'utente. |
| T-Runtime_Permissions | Runtime_Permissions | Utilizza tutte le funzionalità della tua app che richiedono autorizzazioni. Verifica che le autorizzazioni vengano richieste in modo lazy, ovvero solo quando si accede alle funzionalità, anziché durante l'avvio dell'app. |
| T-Permission_Rationale | Permission_Rationale | Utilizza tutte le funzionalità della tua app che richiedono autorizzazioni. Verifica che l'app spieghi all'utente perché sono necessarie le autorizzazioni. |
| T-Graceful_Degradation | Graceful_Degradation | Utilizza tutte le funzionalità della tua app che richiedono autorizzazioni. Nega o revoca le autorizzazioni. Verifica che l'app fornisca un caso d'uso alternativo e continui a funzionare. |
Dati e file
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Sensitive_Data_Storage | Sensitive_Data_Storage | Esamina tutti i dati archiviati nella memoria interna. Verifica che i dati archiviati esternamente non siano dati sensibili. |
| T-Sensitive_Data_Handling | Sensitive_Data_Storage | Esamina il modo in cui i dati caricati dallo spazio di archiviazione esterno vengono gestiti ed elaborati. |
| T-Sensitive_Data_Logging | Sensitive_Data_Logging | Utilizza tutte le funzionalità principali dell'app mentre monitori il log del dispositivo. Verifica che non vengano registrate informazioni private degli utenti. |
| T-Hardware_IDs | Hardware_IDs | Utilizzare tutte le funzionalità principali dell'app. Verifica che l'app non utilizzi ID hardware, ad esempio l'IMEI, per scopi di identificazione. |
Backup e ripristino dei dati
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-App_Data_Backup | App_Data_Backup |
Configura le preferenze locali, i database e le impostazioni delle app su un dispositivo principale. Esegui un backup sul cloud o un trasferimento da dispositivo a dispositivo (D2D) su un nuovo dispositivo. Avvia l'app sul dispositivo di destinazione dopo il trasferimento e verifica che le preferenze locali, lo stato del database e le impostazioni utente vengano ripristinati correttamente in base alle regole di backup automatico. Per procedure di test dettagliate, consulta Esegui il test di backup e ripristino. |
| T-App_Logins_Restoration | App_Logins_Restoration |
Configura una sessione con accesso eseguito su un dispositivo principale utilizzando passkey, password o Accedi con Google. Esegui un backup sul cloud o un trasferimento da dispositivo a dispositivo (D2D) su un nuovo dispositivo. Avvia l'app sul dispositivo di destinazione dopo il trasferimento e verifica che l'autenticazione venga ripristinata automaticamente utilizzando Restore Credentials senza visualizzare schermate di accesso o richiedere il recupero dell'account. Per procedure di test dettagliate, consulta Test delle credenziali di ripristino. |
Identità
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Autofill_Hints | Autofill_Hints | Utilizza tutte le funzionalità dell'app che richiedono l'input dell'utente. Verifica che l'app fornisca suggerimenti per la compilazione automatica dei campi di immissione per dati quali le credenziali dell'account e altre informazioni sensibili. |
| T-Credential_Manager | Credential_Manager | Accedi alla tua app. Verifica che l'app integri Gestore delle credenziali per Android per un'esperienza di accesso che unifica il supporto per passkey, identità federata e password. |
| T-Biometric_Authentication | Biometric_Authentication | Utilizzare tutte le funzionalità dell'app che richiedono l'autenticazione. Verifica che l'app protegga le transazioni finanziarie o le informazioni sensibili, come i documenti importanti degli utenti, con l'autenticazione biometrica. |
Componenti app
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Component_Export | Component_Export | Esamina tutti i componenti dell'applicazione definiti nel file manifest Android per lo stato di esportazione appropriato. La proprietà esportata deve essere impostata esplicitamente per tutti i componenti. |
| T-Component_Permissions | Component_Permissions | Esamina tutte le autorizzazioni richieste dalla tua app nel file manifest, in fase di runtime e nelle impostazioni dell'app sul dispositivo (Impostazioni > Informazioni app). |
| T-Component_Protection | Component_Protection | Esamina tutti i provider di contenuti definiti nel file manifest di Android. Assicurati che ogni provider abbia un protectionLevel appropriato. |
Networking
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Network_Security_Traffic | Network_Security_Traffic | Dichiara una configurazione di sicurezza di rete che disattivi il traffico di dati in chiaro, quindi testa l'app. |
| T-Network_Security_Configuration | Network_Security_Configuration | Esamina la configurazione di sicurezza di rete dell'app. Verifica che non vengano rilevati errori di linting nella configurazione. |
| T-Security_Provider_Initialization | Security_Provider_Initialization | Verifica che il provider di sicurezza sia inizializzato all'avvio dell'applicazione per Google Play Services. |
WebView
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-WebView_Asset_Loader | WebView_Asset_Loader | Esamina la configurazione di sicurezza di rete dell'app. Verifica che non vengano rilevati errori di linting nella configurazione. |
| T-WebView_JavaScript | WebView_JavaScript | Per ogni WebView, vai a una pagina che richiede JavaScript. |
| T-WebView_Navigation | WebView_Asset_Loader, WebView_JavaScript |
In ogni WebView, prova a navigare verso siti e contenuti che non vengono caricati direttamente dalla tua app. |
Esecuzione
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-App_Bundles | App_Bundles | Verifica che l'app utilizzi Android App Bundle e non carichi dinamicamente il codice dall'esterno dell'APK dell'app. |
Crittografia
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Cryptographic_Algorithms | Cryptographic_Algorithms | Verifica che l'app utilizzi algoritmi crittografici e un generatore di numeri casuali efficaci forniti dalla piattaforma. Verifica inoltre che l'app non implementi algoritmi personalizzati. |
Google Play
Verifica che la tua app sia pronta per Google Play.
Norme
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Play_Content_Policies | Play_Content_Policies, Play_Content_Rating, Play_User_Reviews |
Accedi a Google Play Console per esaminare il tuo profilo sviluppatore, la descrizione dell'app, gli screenshot, l'immagine in primo piano, la classificazione dei contenuti e il feedback degli utenti. |
Pagina dei dettagli dell'app
| ID | Funzionalità | Descrizione |
|---|---|---|
| T-Play_Feature_Graphic | Play_Feature_Graphic | Scarica l'immagine in primo piano e gli screenshot e riducili in modo che corrispondano alle dimensioni di visualizzazione sui dispositivi e sui fattori di forma che hai scelto come target. |
| T-Play_Graphic_Assets | Play_Feature_Graphic, Play_Device_References, Play_Misleading_Content |
Esamina tutti gli asset grafici, i contenuti multimediali, il testo, le librerie di codice e altri contenuti inclusi nell'app o nel download del file di espansione. |
Archivia
Versioni precedenti delle norme sulla qualità principali delle app: