一、前言
如果你在用 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 誤認為是危險連結,可以通過申述的方式解封,申述地址。
本文對你有幫助嗎?留言、點贊、轉發是最大的支援,謝謝!
references:
protecting-hundreds-of-millions-mores
Webkit-WebView
whitepaper
公眾號後臺回覆成長『成長』,將會得到我準備的學習資料,也能回覆『加群』,一起學習進步;你還能回覆『提問』,向我發起提問。
推薦閱讀:
關於字元編碼,你需要知道的都在這裡 | 圖解:HTTP 範圍請求 | Java 異常處理 | 安卓防止使用者關閉動畫導致動畫失效 | Git 找回遺失的程式碼 | 阿里的 Alpha 助力 App 啟動速度優化