1. 前言
最近遇到了一個問題,H5頁面使用URL Scheme喚起第三方APP,在手機瀏覽器已經測試通過了,但是在APP裏面,卻失敗了。
本篇文章不介紹如何使用URL Scheme喚起APP,如果想知道的朋友,可以查看下列文章:
迴歸正題,我們以“愛奇藝在線視頻網站(https://m.iqiyi.com)”爲例,使用WebView來加載,顯示如下:
點擊“打開看看”,正常情況是打開愛奇藝APP(如果手機沒安裝,會彈出下載APP安裝包的提示窗口),但實際上卻報錯了,報錯信息的大概意思是:未知的URL Scheme,如下圖所示:
2. 解決方案
經過查找相關資料,並調試相關代碼,定位到了問題所在。
mWebView.setWebViewClient(new WebViewClient());
原來是因爲WebView設置WebViewClient,導致所有URL都默認使用WebView進行加載了,但是像“iqiyi://mobile/register_business/qyclient?pluginParams=%25”(這是喚起愛奇藝APP的URL的一部分)這種自定義URL,WebView是無法加載成功的。
如果已經瞭解過URL Scheme的朋友,應該是知道Android可以這樣來喚起第三方APP。
// url是符合第三方APP所規定的Scheme的URL,可以用來喚起第三方APP
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
所以,我們可以通過攔截URL的方式來解決這個問題,具體代碼如下:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// WebView可以加載Http、Https和file這三種URL,所以除了這三種URL外,其他都要另外處理
if (!url.startsWith("http") && !url.startsWith("file")) {
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
} catch (Exception e) {
// 如果找不到合適的APP來加載URL,則會拋出異常
e.printStackTrace();
}
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
完整的demo可以查看 AndroidWebView。
如果想進一步交流和學習的同學,可以加一下QQ羣哦!