Postado por Peter Visontay e Bessie Jiang, engenheiros de software
Colaboradores: Inara Ramji, engenheira de software; Rodrigo Farell, designer de interação; James Kelly, gerente de produtos; Henry Chin, gerente de programas.
A maioria dos usuários passa muito tempo nos smartphones. Seja para trabalhar, jogar ou se conectar aos amigos, as pessoas costumam usar apps como o principal gateway de suas vidas digitais. Para funcionar, os apps geralmente precisam solicitar algumas permissões. Mas, com dezenas de apps em um mesmo dispositivo, pode ser complicado memorizar quais permissões você já concedeu, principalmente se você não tiver utilizado um app por um período prolongado.
No Android 11, introduzimos o recurso de redefinição automática de permissões. Ele ajuda a proteger a privacidade do usuário ao redefinir automaticamente as permissões em tempo de execução de um app, que são as permissões que exibem um prompt para o usuário quando solicitadas, caso o app não seja utilizado há meses. A partir de dezembro de 2021, expandiremos esse recurso para outros bilhões de dispositivos. O recurso será ativado automaticamente nos dispositivos com o Google Play Services que executam o Android 6.0 (API nível 23) ou posterior.
Ele será ativado por padrão para os apps segmentados para o Android 11 (API nível 30) ou posterior. No entanto, os usuários podem ativar manualmente a redefinição automática de permissões para os apps segmentados para as APIs níveis 23 a 29.
Mas o que isso significa para os desenvolvedores?
Alguns apps e permissões ficaram automaticamente isentos da revogação, como os apps administradores de dispositivos utilizados por grandes empresas e as permissões fixadas por políticas empresariais.
Se necessário, os desenvolvedores podem solicitar que os usuários impeçam o sistema de redefinir as permissões dos apps. Isso é útil em situações nas quais os usuários esperam que um app funcione principalmente em segundo plano, mesmo que não haja interação com ele. Os principais casos de uso são listados aqui.
Se o app for segmentado pelo menos para a API 30 e solicitar ao usuário que desative a redefinição automática de permissões, os desenvolvedores precisarão fazer algumas mudanças simples no código. Se o app não desativar a redefinição automática, não serão necessárias mudanças no código.
Observação: essa API destina-se apenas aos apps cujo targetSDK seja a API 30 ou posterior, porque a redefinição automática de permissões só se aplica a esses apps por padrão. Os desenvolvedores não precisam fazer nenhuma mudança se o targetSDK do app for a API 29 ou anterior.
A tabela abaixo resume a nova API multiplataforma (em comparação com a API publicada no Android 11):
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
PackageManager.isAutoRevokeWhitelisted()
Intent.ACTION_AUTO_REVOKE_PERMISSIONS
androidx.core.content.IntentCompat.createManageUnusedAppRestrictionsIntent()
Essa API multiplataforma faz parte da biblioteca Jetpack Core e estará disponível no Jetpack Core v1.7.0. Essa API já está disponível na versão Beta.
Amostra de lógica para um app que exige que o usuário desative a redefinição 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) }
A lógica acima funcionará em dispositivos com Android 6.0 a 10 e também com Android 11 ou posterior. Basta usar apenas as novas APIs; não é mais preciso chamar as APIs de redefinição automática do Android 11.
As novas APIs também são compatíveis com a hibernação de apps introduzida com o Android 12 (API nível 31). A hibernação é uma nova restrição aplicada a apps não utilizados. Esse recurso não está disponível nas versões do SO anteriores ao Android 12.
A API getUnusedAppRestrictionsStatus() retornará API_31 se a redefinição automática de permissões e a hibernação de apps se aplicarem a um app.
getUnusedAppRestrictionsStatus()
API_31
Postar um comentário
Nenhum comentário :
Postar um comentário