Modifiche del comportamento: tutte le app

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

Nella parte inferiore del riquadro a scomparsa delle notifiche è presente un pulsante che indica la
  di app attualmente in esecuzione in background. Quando premi
  questo pulsante, viene visualizzata una finestra di dialogo che elenca i nomi delle diverse app. La
  Il pulsante di arresto si trova a destra di ogni app
. Figura 1. Flusso di lavoro di Task Manager , che consente agli utenti di interrompere le app che hanno servizi in primo piano in corso. Questo flusso di lavoro viene visualizzato solo su dispositivi con Android 13 o versioni successive.

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.

Anteprima del testo copiata senza segnalare i contenuti sensibili
. Anteprima del testo copiata senza segnalare i contenuti sensibili.
Anteprima del testo copiato che segnala contenuti sensibili.
. Anteprima del testo copiato che segnala contenuti sensibili.

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 provider SpeechService 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.