若是你在用 Android 原生系統(Google Play 服務),在使用 WebView 加載某些網頁時,必定遇到過如下的安全警告紅屏。html
這是 WebView 的安全瀏覽保護策略,在 Android 8.0(API Level 26)開始的默認策略,被應用在全部 App 的 WebView 當中。android
Google 會本身維護一套「不安全」網站的列表,並經過 Google Play 服務,同步到全部的設備上。當你要訪問某些被標記爲「不安全」的網站時,它就會以此「紅屏」警告用戶。web
注意這是默認策略,雖然出發點是爲了保護用戶,可是有時候咱們本身的 App 仍是要有自主管控的權利。chrome
那咱們有辦法在本身的 App 內,關閉此項保護嗎?畢竟個人應用我作主,安不安全本身來管控。安全
今天就來聊聊,如何在 Android 8.0(API Level 26)中,關閉此安全保護策略。ide
自 2018 年 4 月起,隨着 WebView 66 發佈,Google Play 保護機制,將在 WebView 中默認開始此安全瀏覽策略。學習
而 Android 開發者在使用 WebView 時,無需再進行任何更改,便可享受此項保護服務。自 Android 8.0 開始,WebView 中即已經集成安全瀏覽功能,而且與 Android 版的 Chrome 採用相同的底層技術。優化
一旦觸發 WebView 的安全機制,就會出現相似下圖這樣的「紅屏」警告。動畫
Google 會自維護一套不良網站的列表,以確保用戶能夠在瀏覽以前,發出警告。爲了同步這部分列表,Google 花費了很大的努力,就是爲了保護用戶的安全。網站
在 Android 8.0 及以上的設備中,WebView 的安全瀏覽策略,是默認生效的。
也就是說,若是咱們想要使用它,咱們什麼額外的工做都不須要作,可是咱們若是不想採用它,就須要經過一個方法將其關閉。
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。
WebView 的安全策略是默認開始的,若是想要關閉它,須要經過 WebSettings 這個類,其中有 setSafeBrowsingEnabled(boolean)
方法,能夠用於設置是否開啓安全模式。
webSettings.safeBrowsingEnabled = false
此方法是一種全局的策略,也就是要麼開啓、要麼關閉。
使用 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 誤認爲是危險連接,能夠經過申述的方式解封,申述地址。
本文對你有幫助嗎?留言、點贊、轉發是最大的支持,謝謝!
references:
protecting-hundreds-of-millions-mores
Webkit-WebView
whitepaper
公衆號後臺回覆成長『 成長』,將會獲得我準備的學習資料,也能回覆『 加羣』,一塊兒學習進步;你還能回覆『 提問』,向我發起提問。
推薦閱讀:
關於字符編碼,你須要知道的都在這裏 | 圖解:HTTP 範圍請求 | Java 異常處理 | 安卓防止用戶關閉動畫致使動畫失效 | Git 找回遺失的代碼 | 阿里的 Alpha 助力 App 啓動速度優化