Android WebView加載H5頁面,H5頁面使用URL Scheme喚起APP失敗

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羣哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章