Haga que la recuperación automática de autorizaciones esté disponible para miles de millones de dispositivos más


Publicado por Peter Visontay, ingeniero de software; Bessie Jiang, ingeniera informática

Ilustración de una persona sosteniendo el teléfono

La mayoría de los usuarios pasan mucho tiempo en sus teléfonos inteligentes. Ya sea trabajando, jugando o conectándose con amigos, las personas a menudo usan aplicaciones como su puerta de entrada principal a sus vidas digitales. Las aplicaciones a menudo necesitan solicitar ciertos permisos para funcionar, pero con docenas de aplicaciones en un dispositivo determinado, puede ser difícil mantenerse al día con los permisos que ha otorgado anteriormente, especialmente si no ha utilizado una aplicación durante un período prolongado de tiempo. tiempo.

En Android 11, presentamos el función de reinicio automático de autorización. Esta función ayuda a proteger la privacidad del usuario al restaurar automáticamente las aplicaciones. permisos de tiempo de ejecución – que son permisos que muestran un mensaje al usuario cuando se solicita – si la aplicación no se usa durante algunos meses. A partir de diciembre de 2021, lo ampliaremos a miles de millones de dispositivos más. Esta función se habilitará automáticamente en dispositivos con Servicios de Google Play con Android 6.0 (nivel de API 23) o posterior.

La función estará habilitada de forma predeterminada para las aplicaciones destinadas a Android 11 (nivel de API 30) o posterior. Sin embargo, los usuarios pueden habilitar manualmente el restablecimiento automático de los permisos para las aplicaciones dirigidas a los niveles de API 23 a 29.

Entonces, ¿qué significa esto para los desarrolladores?

Excepciones

Algunas aplicaciones y permisos se eximen automáticamente de la revocación, como las aplicaciones activas del Administrador de dispositivos utilizadas por las empresas y los permisos establecidos por la política corporativa.

Solicitar al usuario que desactive la recuperación automática

Si es necesario, los desarrolladores pueden pedirle al usuario que evite que el sistema restaure los permisos de la aplicación. Esto es útil en situaciones en las que los usuarios esperan que la aplicación se ejecute principalmente en segundo plano, incluso sin interactuar con ella. Se enumeran los principales casos de uso aquí.

Comparación de comportamiento actual y nuevo

Comportamiento actual Nuevo comportamiento
Los permisos se restablecen automáticamente a Android 11 (nivel de API 30) y superior dispositivos. Los permisos se restauran automáticamente en los siguientes dispositivos:

  • Dispositivos con los servicios de Google Play que ejecutan una versión entre Android 6.0 (nivel de API 23) y Android 10 (nivel de API 29), incluido.
  • Todos los dispositivos en funcionamiento Android 11 (nivel de API 30) y superior dispositivos.
Los permisos se restablecen de forma predeterminada para las aplicaciones destinadas a Android 11 o posterior. El usuario puede habilitar manualmente la recuperación automática para aplicaciones destinadas a Android 6.0 (nivel de API 23) o posterior. Sin cambios con respecto al comportamiento actual.
Las aplicaciones pueden solicitar al usuario que desactive la recuperación automática de la aplicación. Sin cambios con respecto al comportamiento actual.

Se necesitan cambios de código

Si una aplicación tiene como objetivo al menos API 30 y le pide al usuario que desactive los permisos de restablecimiento automático, los desarrolladores deberán realizar algunos cambios de código simples. Si la aplicación no deshabilita la recuperación automática, no se requieren cambios de código.

Nota: Esta API solo está destinada a aplicaciones cuyo targetSDK sea API 30 o superior, porque el restablecimiento automático de permisos solo se aplica a estas aplicaciones de forma predeterminada. Los desarrolladores no necesitan cambiar nada si el targetSDK de la aplicación es API 29 o inferior.

La siguiente tabla resume la nueva API multiplataforma (en comparación con la API publicada en Android 11):

Acción API de Android 11
(solo funciona en dispositivos Android 11 y posteriores)
Nueva API multiplataforma
(funciona en dispositivos Android 6.0 y superiores, incluidos los dispositivos Android 11 y superiores)
Compruebe si el restablecimiento automático de permisos está habilitado en su dispositivo Comprobar si Build.VERSION.SDK_INT >= Build.VERSION_CODES.R Llama androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
Compruebe si la restauración automática está deshabilitada para su aplicación Llama PackageManager.
isAutoRevokeWhitelisted()
Llama androidx.core.content.
PackageManagerCompat.
getUnusedAppRestrictionsStatus()
Solicite al usuario que desactive la recuperación automática de su aplicación. Envíe una intención con acción
Intent.ACTION_AUTO_REVOKE_PERMISSIONS
Envíe una intención creada con androidx.core.content.
IntentCompat.
createManageUnusedAppRestrictionsIntent()

Esta API multiplataforma es parte de Núcleo Jetpack biblioteca y estará disponible en Jetpack Core v1.7.0. Esta API ahora está disponible en versión beta.

Lógica de ejemplo para una aplicación que solicita al usuario que desactive la recuperación automática:

val future: ListenableFuture<Int> =
    PackageManagerCompat.getUnusedAppRestrictionsStatus(context)
future.addListener(
  { onResult(future.get()) },
   ContextCompat.getMainExecutor(context)
)

fun onResult(appRestrictionsStatus: Int) {
  when (appRestrictionsStatus) {
    // Status could not be fetched. Check logs for details.
    ERROR -> { }

    // Restrictions do not apply to your app on this device.
    FEATURE_NOT_AVAILABLE -> { }
    // Restrictions have been disabled by the user for your app.
    DISABLED -> { }

    // If the user doesn't start your app for months, its permissions 
    // will be revoked and/or it will be hibernated. 
    // See the API_* constants for details.
    API_30_BACKPORT, API_30, API_31 -> 
      handleRestrictions(appRestrictionsStatus)
  }
}

fun handleRestrictions(appRestrictionsStatus: Int) {
  // If your app works primarily in the background, you can ask the user
  // to disable these restrictions. Check if you have already asked the
  // user to disable these restrictions. If not, you can show a message to 
  // the user explaining why permission auto-reset and Hibernation should be 
  // disabled. Tell them that they will now be redirected to a page where 
  // they can disable these features.

  Intent intent = IntentCompat.createManageUnusedAppRestrictionsIntent
    (context, packageName)

  // Must use startActivityForResult(), not startActivity(), even if 
  // you don't use the result code returned in onActivityResult().
  startActivityForResult(intent, REQUEST_CODE)
}

La lógica anterior funcionará en dispositivos Android 6.0: Android 10 y también Android 11+. Basta con utilizar solo las nuevas API; Ya no será necesario llamar a las API de recuperación automática de Android 11.

Compatibilidad con la hibernación de aplicaciones en Android 12

Las nuevas API también son compatibles con suspensión de la aplicación introducida por Android 12 (API nivel 31). La hibernación es una nueva restricción que se aplica a las aplicaciones no utilizadas. Esta función no está disponible en versiones de SO anteriores a Android 12.

los getUnusedAppRestrictionsStatus() La API volverá API_31 Si los permisos de restablecimiento automático y la hibernación de la aplicación se aplican a una aplicación.

Historial de lanzamiento

  • 15 de septiembre de 2021 – Las API de recuperación automática multiplataforma ahora están en versión beta (biblioteca Jetpack Core 1.7.0 beta), por lo que los desarrolladores pueden comenzar a usar estas API hoy. Su uso es seguro incluso en dispositivos que no admiten la recuperación automática de permisos (la API devolverá FEATURE_NOT_AVAILABLE en estos dispositivos).
  • Octubre de 2021 – Las API de reparación automática multiplataforma están disponibles como API estables (Jetpack Core 1.7.0).
  • Diciembre de 2021 – La función de permisos de restablecimiento automático comenzará una implementación por fases en todos los dispositivos con tecnología de Google Play Services que ejecuten una versión entre Android 6.0 y Android 10. En estos dispositivos, los usuarios ahora pueden ir a la página de configuración de restablecimiento automático y habilitar / deshabilitar el restablecimiento automático para aplicaciones específicas. El sistema comenzará a restablecer automáticamente los permisos de las aplicaciones no utilizadas unas semanas después de iniciar la función en un dispositivo.
  • T1 2022 – La función de restablecimiento automático de permisos llegará a todos los dispositivos que ejecuten una versión entre Android 6.0 y Android 10.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *