为数十亿台设备提供权限自动重置功能

为数十亿台设备提供权限自动重置功能
www.zeeklog.com  - 为数十亿台设备提供权限自动重置功能

作者 / 软件工程师 Peter Visontay 和 Bessie Jiang

贡献者 / 软件工程师 Inara Ramji、交互设计师 Rodrigo Farell、产品经理 James Kelly、项目经理 Henry Chin

大多数用户会在智能手机上花费大量时间。无论是工作、玩游戏,还是与朋友联系,人们总会使用应用并将其作为数字化生活的主要途径。应用通常需要请求某些权限才能正常运行,但在任何给定的设备都有数十个应用的情况下,要让之前授予的权限保持最新状态可能很困难,特别是在您长时间未使用某个应用时。

我们在 Android 11 中引入了 。这项功能有助于保护用户的隐私: 如果用户几个月未使用某应用,该功能就会自动重置此应用的 ,即请求时向用户显示提示的权限。2021 年 12 月起,我们会将这项功能扩展到数十亿台设备。该功能将自动在运行 Android 6.0 (API 级别 23) 或更高版本的使用  的设备上启用。

系统将默认为面向 Android 11 (API 级别 30) 或更高版本的应用启用该功能。不过,用户可以为面向 API 级别 23 到 29 的应用手动启用权限自动重置功能。

那么,这对开发者来说意味着什么呢?

例外

一些应用和权限将自动免于撤消,如企业使用的活动设备管理员应用,以及由企业政策固定的权限。

请求用户停用自动重置

如有需要,开发者可以请求用户阻止系统重置其应用的权限。适用于用户期望应用主要在后台运行,甚至无需与其互动的情况。您可以查看 。

比较当前行为与新行为

www.zeeklog.com  - 为数十亿台设备提供权限自动重置功能

必要的代码更改

如果一个应用面向 API 30 及更高版本,并请求用户停用权限自动重置,那么开发者需要做一些简单的代码更改。如果应用不停用自动重置,则无需进行代码更改。

注: 此 API 仅适用于 targetSDK 为 API 30 或更高版本的应用,因为仅这些应用具有权限自动重置。如果应用的 targetSDK 为 API 29 或更低版本,则开发者无需进行任何更改。

下表汇总了新的跨平台 API (与  中发布的 API 相比):

操作Android 11 API(适用于 Android 11 及更高版本的设备)新的跨平台 API(适用于 Android 6.0 及更高版本的设备,包含 Android 11 及更高版本的设备)
检查设备是否启用了权限自动重置功能检查是否 Build.VERSION.SDK_INT >= Build.VERSION_CODES.R调用 androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
检查您的应用是否停用自动重置调用 调用 androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
请求用户为您的应用停用自动重置发送带操作的 发送利用 androidx.core.content.IntentCompat.createManageUnusedAppRestrictionsIntent() 创建的 intent

这个跨平台 API 属于  库,将于 Jetpack Core v1.7.0 中推出,现已发布 Beta 版。

一个需要用户禁用自动停用自动重置的逻辑示例:

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)
}

以上逻辑适用于 Android 6.0 到 Android 10,以及 Android 11 和更高版本的设备。只需使用新 API 即可,您无需再调用 Android 11 的自动重置 API。

与 Android 12 中应用休眠功能的兼容

新 API 同样与  兼容。休眠是适用于未使用应用的一种新限制。该功能不适用于 Android 12 之前的操作系统版本。

如果权限自动重置和应用休眠都应用于一个应用,则 getUnusedAppRestrictionsStatus() API 将返回 API_31

发布时间表

  • 2021 年 9 月 15 日 - 跨平台自动重置 API 现已进入测试阶段 (Jetpack Core 1.7.0 Beta 版库),所以开发者现在就可以开始使用这些 API。即使在不支持权限自动重置的设备上,使用这些 API 也是安全的 (API 在这些设备上会返回 FEATURE_NOT_AVAILABLE)。
  • 2021 年 10 月 - 跨平台自动重置 API 可作为稳定的 API 使用 (Jetpack Core 1.7.0)。
  • 2021 年 12 月 - 权限自动重置功能将开始在由 Google Play 服务提供支持并运行 Android 6.0 到 Android 10 之间版本的设备上逐步推广。在这些设备上,用户可以前往自动重置设置页面,针对特定应用启用/停用自动重置。系统将在设备启用该功能几周后开始自动重置未使用应用的权限。
  • 2022 年第 1 季度 - 权限自动重置功能将覆盖所有运行 Android 6.0 到 Android 10 之间版本的设备。

欢迎您持续关注我们,随时获取最新资讯。

欢迎您  向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!

Read more

高级程序员值得一看的33本编程书籍

高级程序员值得一看的33本编程书籍

作为一名程序员,编程语言只是基础,只是工具,想实现从程序员到高级工程师的进步,需要花更多的精力在底层原理,算法,数据结构,编程思想上。推荐了33本高级程序员值得一看的书籍,注重底层知识,思想,用空的时候看一看,相信会获益匪浅。 科技之巅 麻省理工科技评论 50大全球突破性技术深度剖析        8.9折    ¥87.20         98.00 算法导论(原书第3版)/计算机科学丛书        6.8折    ¥87.40         128.00 分布式服务框架原理与实践        8.4折    ¥54.40         65.00 大话数据结构        8.5折    ¥50.20         59.00 腾讯Android自动化测试实战        8.5折    ¥58.70

By Ne0inhk
在Windows和Visual Studio上安装Boost

在Windows和Visual Studio上安装Boost

在Windows和Visual Studio上安装Boost 下载并安装boost 1,在boost的网站上下载一个boost的Windows版本的安装器。 这个程序会自动下载和安装boost。 整个Boost有接近 1G 那么大。 2,或者你也可以直接在boost网站上下载完整版的boost,下载以后安装。 建议你使用第一种方式下载。因为那个程序的下载速度非常快。我选择的是从日本下载。 在Visual Studio中启用boost 需要在项目属性中附加boost的目录。 我选择的安装Boost的目录如下: D:/C++Runtim/boost/boost_1_34_1/ 1,在“附加包含目录”中添加对boost头文件目录的包含。以便正确include boost的头文件。 对于我的配置来说,这里需要输入D:/C++Runtim/boost/boost_1_34_1/。 这个目录下面包含了头文件: 2,还需要附加boost的lib和dll文件 在“附加库目录”中包括boost的lib库目录文件夹。 对于我的配置来说,这里需要输入D:

By Ne0inhk
HTTPS 互联网世界的安全基础

HTTPS 互联网世界的安全基础

近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是模糊的知道大概是更安全,但到底怎么变得更安全的,实际上整个细节和流程并没有掌握的特别清晰。 所以这篇关于 HTTPS 的技术总结文章,主要提供一个关于 HTTPS 中的 S 一个整体的认识。从其产生的历史背景、设计目标说起,到分析其协议设计结构、交互流程是如何实现其目标。最后结合我们自己的案例分析下其中带来的影响。 下面我们就先从其诞生之初说起吧。 历史 S 代表 Secure,所以 HTTPS 自然就是更安全的 HTTP 的意思。互联网诞生之初 SSL(Secure Sockets Layer 安全套接层)是由 Netscape 这家最早的浏览器公司设计的,主要是用于 Web 的安全传输的协议,

By Ne0inhk