La piattaforma Android 13 include modifiche del comportamento che potrebbero interessare la tua app. La
Le seguenti modifiche del comportamento si applicano a tutte le app quando vengono eseguite su Android 13:
indipendentemente da targetSdkVersion
. Devi testare l'app e poi modificarla come
necessarie per supportarli in modo adeguato, ove applicabile.
Assicurati di esaminare anche l'elenco delle modifiche del comportamento che interessano solo le app che hanno come target Android 13.
Prestazioni e batteria
Task Manager
A partire da Android 13 (livello API 33), gli utenti possono completare un flusso di lavoro dalla riquadro di notifica a scomparsa per interrompere le app con servizi in primo piano in corso, come mostrato come mostrato nella figura 1. Questo invito è noto come Task Manager. Le app devono essere in grado di gestire questa situazione avviato dall'utente interruzione del servizio.
Migliora la gestione dei job di precaricamento utilizzando JobScheduler
JobScheduler consente alle app di contrassegnare job specifici come "prefetch"
di lavoro (utilizzando JobInfo.Builder.setPrefetch()
), il che significa che idealmente dovrebbero
in prossimità e prima del lancio successivo dell'app per migliorare l'esperienza utente.
Storicamente, JobScheduler utilizzava l'indicatore solo per consentire il precaricamento dei job
utilizzare in modo opportuno dati
liberi o in eccesso.
In Android 13 (livello API 33) e versioni successive, il sistema tenta di determinare il prossimo avvio di un'app e utilizzare questa stima per l'esecuzione dei job di precaricamento. Le app devono provare a utilizzare job di precaricamento per qualsiasi lavoro desiderato da svolgere prima del successivo lancio dell'app.
Utilizzo delle risorse della batteria
Android 13 (livello API 33) offre al sistema i seguenti modi per migliorare gestisci la durata della batteria del dispositivo:
- Regole aggiornate relative ai casi in cui il sistema inserisce la tua app nello stato "Limitato" Per app Bucket di standby.
- Nuove limitazioni al lavoro che la tua app può svolgere quando l'utente la posiziona nel "limitato" stato per l'utilizzo della batteria in background.
Quando testi la tua app con queste modifiche, assicurati di controllare quanto segue cose:
Testa il modo in cui l'app risponde quando il sistema la inserisce nella categoria "limitato" Per app Bucket di standby. Utilizza la seguente comando Android Debug Bridge (ADB) per assegnare la tua app a questo bucket:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Testa come la tua app risponde alle seguenti limitazioni comunemente applicate per le app "con restrizioni" per l'utilizzo della batteria in background:
- Impossibile avviare i servizi in primo piano
- I servizi in primo piano esistenti vengono rimossi da quello in primo piano
- Le sveglie non vengono attivate
- I job non vengono eseguiti
Usa il seguente comando ADB per inserire la tua app in questo "limitato" stato:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
Quote di Firebase Cloud Message (FCM) con priorità elevata
Android 13 (livello API 33) aggiorna le quote di Firebase Cloud Messaging (FCM) per migliorare l'affidabilità della distribuzione FCM ad alta priorità per le app che mostrano notifiche in risposta a FCM ad alta priorità. In Android 13 (livello API 33) è cambiato quanto segue:
- I bucket standby delle app non determinano più quanti FCM ad alta priorità può essere utilizzato da un'app.
- Le quote FCM con priorità elevata vengono scalate in proporzione al numero di notifiche mostrate all'utente in risposta agli FCM con priorità elevata.
Come nelle versioni precedenti di Android, gli FCM ad alta priorità che superano la quota vengono ridotti alla priorità normale. Quando avvii Servizi in primo piano (FGS) in risposta a una FCM, ti consigliamo di controllare il risultato di RemoteMessage.getPriority()
per verificare che sia PRIORITY_HIGH
e/o di gestire eventuali potenziali eccezioni di ForegroundServiceStartNotAllowedException
.
Se la tua applicazione non pubblica sempre notifiche in risposta a FCM ad alta priorità, ti consigliamo di modificare la priorità di questi FCM impostandola su normal in modo che i messaggi che generano una notifica non vengano sottoposti a downgrade.
Privacy
Autorizzazione di runtime per le notifiche
Android 13 (livello API 33) introduce un runtime
autorizzazione di notifica:
POST_NOTIFICATIONS
Questa modifica consente agli utenti di concentrarsi sulle notifiche più importanti per
che li rappresentano.
Ti consigliamo vivamente di scegliere come target Android 13 o versioni successive il prima possibile. per ottenere gli effetti dell'ulteriore controllo e della flessibilità dei questa funzionalità.
Scopri di più su best practice relative alle autorizzazioni app.
Nascondi contenuti sensibili negli appunti
Se la tua app consente agli utenti di copiare contenuti sensibili, come password o credito
scheda, agli appunti, devi aggiungere un flag a ClipData
ClipDescription
prima di chiamare ClipboardManager#setPrimaryClip()
. Aggiunta in corso...
questo flag impedisce la visualizzazione di contenuti sensibili nell'anteprima dei contenuti.
Per segnalare contenuti sensibili, aggiungi un extra booleano alla ClipDescription
. Tutti
di cui le app devono eseguire questa operazione, indipendentemente dal livello API scelto come target.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
Per ulteriori informazioni sulla nuova UI degli appunti, visita la Pagina delle funzionalità Copia e incolla.
Sicurezza
Esegui la migrazione dall'ID utente condiviso
Se la tua app utilizza il modello deprecato
Attributo android:sharedUserId
e non dipende più dalla funzionalità dell'attributo, puoi impostare il valore
android:sharedUserMaxSdkVersion
a 32
, come mostrato nello snippet di codice riportato di seguito:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
Questo attributo indica al sistema che la tua app non fa più affidamento su un elemento
ID utente. Se la tua app dichiara android:sharedUserMaxSdkVersion
ed è appena stata
installata su dispositivi con Android 13 o versioni successive, la tua app
si comporta come se non avessi mai definito android:sharedUserId
. App aggiornate ancora in uso
l'ID utente condiviso esistente.
Gli ID utente condivisi causano un comportamento non deterministico all'interno del gestore di pacchetti. La tua app dovrebbe invece usare meccanismi di comunicazione adeguati, come i servizi e fornitori di contenuti, per facilitare l'interoperabilità tra i componenti condivisi.
Esperienza utente
Notifiche dei servizi in primo piano ignorabili
Sui dispositivi con Android 13 o versioni successive, gli utenti possono ignorare notifiche associate al primo piano aggiuntivi di predefinito.
Funzionalità di base
Copia legacy dell'implementazione del servizio vocale rimossa
Android 13 rimuove l'implementazione di SpeechService
, tra cui
IME per le funzioni vocali, RecognitionService
e basata sull'intent
API: da
l'app Google.
In Android 12, sono state apportate le seguenti modifiche:
- È stata eseguita la migrazione di
SpeechService
funzionalità in Speech Services da Google , che è diventato il providerSpeechService
predefinito. - La funzionalità di
RecognitionService
è stata spostata nel sistema Android App Intelligence per supportare il riconoscimento vocale sul dispositivo.
Per mantenere la compatibilità delle app su Android 12, l'app Google usa un trampolino per deviare il traffico all'app Servizi vocali di Google. Nella Android 13, questo trampolino è stato rimosso.
Le app devono usare il provider predefinito del dispositivo per SpeechService
, anziché
hardcoded di un'app specifica.