一, 前言
如果你在用 Android 原生系统 (Google Play 服务), 在使用 webView 加载某些网页时, 一定遇到过以下的安全警告红屏.
这是 WebView 的安全浏览保护策略, 在 Android 8.0(API Level 26) 开始的默认策略, 被应用在所有 App 的 WebView 当中.
Google 会自己维护一套 "不安全" 网站的列表, 并通过 Google Play 服务, 同步到所有的设备上. 当你要访问某些被标记为 "不安全" 的网站时, 它就会以此 "红屏" 警告用户.
注意这是默认策略, 虽然出发点是为了保护用户, 但是有时候我们自己的 App 还是要有自主管控的权利.
那我们有办法在自己的 App 内, 关闭此项保护吗? 毕竟我的应用我做主, 安不安全自己来管控.
今天就来聊聊, 如何在 Android 8.0(API Level 26) 中, 关闭此安全保护策略.
二, 什么是 WebView 的安全策略
自 2018 年 4 月起, 随着 WebView 66 发布, Google Play 保护机制, 将在 WebView 中默认开始此安全浏览策略.
而 Android 开发者在使用 WebView 时, 无需再进行任何更改, 即可享受此项保护服务. 自 Android 8.0 开始, WebView 中即已经集成安全浏览功能, 并且与 Android 版的 Chrome 采用相同的底层技术.
一旦触发 WebView 的安全机制, 就会出现类似下图这样的 "红屏" 警告.
[
Google 会自维护一套不良网站的列表, 以确保用户可以在浏览之前, 发出警告. 为了同步这部分列表, Google 花费了很大的努力, 就是为了保护用户的安全.
三, 如何控制安全策略
在 Android 8.0 及以上的设备中, WebView 的安全浏览策略, 是默认生效的.
也就是说, 如果我们想要使用它, 我们什么额外的工作都不需要做, 但是我们如果不想采用它, 就需要通过一个方法将其关闭.
3.1 如何监控开启
WebView 的安全浏览, 是依赖于 Google Play 和 Chrome 更新的, 也就是说, 虽然你的设备是 Android 8.0, 但是此策略也是有可能没有生效的.
那么如何确定此功能是否生效呢?
WebView 提供了一个方法 startSafeBrowsing() 方法, 来主动开启安全浏览策略, 在回调中, 我们可以知道当前设备是否准备好了, 符合开启安全浏览的条件.
- WebView.startSafeBrowsing(this, object : ValueCallback<Boolean> {
- override fun onReceiveValue(value: Boolean?) {
- val isOpen = value ?:false
- if (isOpen) {
- Log.i("cxmy_dev", "Safe browsing. On")
- } else {
- Log.i("cxmy_dev", "Safe browsing. Off")
- }
- }
- })
注意回调内的 value 可能为 null.
3.2 如何关闭安全策略
WebView 的安全策略是默认开始的, 如果想要关闭它, 需要通过 WebSettings 这个类, 其中有 setSafeBrowsingEnabled(boolean) 方法, 可以用于设置是否开启安全模式.
webSettings.safeBrowsingEnabled = false
此方法是一种全局的策略, 也就是要么开启, 要么关闭.
3.3 配置白名单
使用 setSafeBrowsingEnable() 方法, 只能做二态的设置, 要么开启要么关闭. 如果我们想设置, 只允许某些 Host 不经过安全策略校验, 如何设置呢?
WebView 还提供了一个 setSafeBrowsingWhiteList() 的方法, 用于设置一个安全策略的白名单.
- var array = ArrayList<String>()
- array.add("example.com")
- WebView.setSafeBrowsingWhitelist(array, object : ValueCallback<Boolean> {
- override fun onReceiveValue(value: Boolean?) {
- }
- })
setSafeBrowsingWhiteList() 方法很灵活, 可以通过配置指定域名及其子域名, 或者仅此域名不包含其子域名. 还可以直接配置 IP 地址, 支持 IPV4 和 IPV6.
四, 小结时刻
今天我们聊到如何关闭 WebView 的安全浏览策略, 本文涉及的 API, 全部仅支持 API Level 27, 使用的时候注意判断.
当然, WebView 的安全浏览是有必要的, 所以如果你的域名被 Google 误认为是危险链接, 可以通过申述的方式解封, 申述地址 https://support.google.com/chrome/answer/99020 .
最后给大家分享一份非常系统和全面的 Android 进阶技术大纲及进阶资料, 及面试题集
想学习更多 Android 知识, 请加入 Android 技术开发企鹅交流 7520 16839
进群与大牛们一起讨论, 还可获取 Android 高级架构资料, 源码, 笔记, 视频
包括 高级 UI,Gradle,RxJava, 小程序, Hybrid, 移动架构, React Native, 性能优化等全面的 Android 高级实践技术讲解性能优化架构思维导图, 和 BATJ 面试题及答案!
群里免费分享给有需要的朋友, 希望能够帮助一些在这个行业发展迷茫的, 或者想系统深入提升以及困于瓶颈的朋友, 在网上博客论坛等地方少花些时间找资料, 把有限的时间, 真正花在学习上, 所以我在这免费分享一些架构资料及给大家. 希望在这些资料中都有你需要的内容.
来源: http://www.jianshu.com/p/e4ace42b4b5a