1. 程式人生 > >Web調起App研究報告

Web調起App研究報告

Android

經研究目前主要有以下兩種方式可以通過Web開啟App。

1、 自定義Scheme

2、 Chrome Intent

下面逐一介紹:

自定義Scheme

在Android瀏覽器中(非微信瀏覽器),可以通過scheme協議的方式喚醒本地app客戶端;scheme協議在app註冊之後,與前端進行統一約定,通過H5頁面訪問某個具體的協議地址,即可開啟對應的app客戶端頁面。

訪問協議地址,目前主要有3中方式,以demo為例:

1. 通過a標籤開啟,點選標籤是啟動

<a href="m://zyl.com ">開啟app </a><br/>

2. 通過iframe開啟,設定iframe.src即會啟動

<iframe src=" m://zyl.com "></iframe>

3. 直接通過window.location進行跳轉

window.location.href=

注意:

由於微信的白名單限制,無法通過scheme來喚醒本地app,只有白名單內的app才能通過微信瀏覽器喚醒,這個問題目前沒有找到合適的解決方案。

舉例說明

1、 在AndroidManifest的清單檔案裡的intent-filter中加入如下元素:

<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="

zyl.com"
android:scheme="m"/>
</intent-filter>

示例截圖如下:


2、 通過html頁面開啟Android本地App

<a href="m://zyl.com">開啟app by Scheme</a><br/>

示例截圖如下:


3、 如何獲取scheme方式的網頁傳參

Web端:

<a href="m://zyl.com?arg0=Jason&arg1=Zhao">開啟app by Scheme</a><br/>

示例截圖如下:

Android端:

1)、通過瀏覽器開啟這個網頁,獲取資料的方式如下:

Uri uri = getIntent().getData();
         String test1= uri.getQueryParameter("arg0");
         String test2= uri.getQueryParameter("arg1");

2)、通過webview開啟這個網頁,獲取資料的方式如下:

webView.setWebViewClient(new WebViewClient(){

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

Uri uri=Uri.parse(url);

if(uri.getScheme().equals("m")&&uri.getHost().equals("zyl.com")){

String arg0=uri.getQueryParameter("arg0");

String arg1=uri.getQueryParameter("arg1");

}else{

view.loadUrl(url);

}

return true;

}

});

Chrome Intent

Chrome Intent簡介

自定義的scheme可以搞定很多瀏覽器,但是Chrome除外。原因是為了更有序的打通瀏覽器頁面和本地應用,Chrome 25後不再支援自定義的scheme,比如通過設定window.location.href=將無法喚醒本地客戶端。

而推出了Chrome Intent,作為標準協議進行推廣,其格式如下:

intent:

HOST/URI-path // Optional host 
#Intent; 
package=[string]; 
action=[string]; 
category=[string]; 
component=[string]; 
scheme=[string];

S.browser_fallback_ur=[encoded_full_url];
end;

<a href="intent://zyl.com #Intent;scheme=m;package=com.zyl.demo.htmlcallapp1;S.browser_fallback_url=https%3A%2F%2Fwww.baidu.com;end">開啟app by Intent</a><br/>

S.browser_fallback_url這個引數很重要,在應用調起失敗時,要跳轉到的頁面。

Chrome Intent如何傳參:

<a href="intent://zyl.com?arg0=Jason&arg1=Zhao#Intent;scheme=m;package=com.zyl.demo.htmlcallapp1;S.browser_fallback_url=https%3A%2F%2Fwww.baidu.com;end">開啟app by Intent</a><br/>

示例截圖如下:


如何獲取scheme方式的網頁傳參

1)、通過瀏覽器開啟這個網頁,獲取資料的方式如下:

Uri uri = getIntent().getData();

String test1= uri.getQueryParameter("arg0");

String test2= uri.getQueryParameter("arg1");

2)、通過webview開啟這個網頁,獲取資料的方式如下:

webView.setWebViewClient(new WebViewClient(){

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

Uri uri=Uri.parse(url);

if(uri.getScheme().equals("m")&&uri.getHost().equals("zyl.com")){

String arg0=uri.getQueryParameter("arg0");

String arg1=uri.getQueryParameter("arg1");

}else{

view.loadUrl(url);

}

return true;

}

});

iOS

經研究目前主要有以下兩種方式可以通過Web開啟App。

1、 自定義Scheme

2、 Universal links

自定義Scheme方式與Android類似,此處不做過多的表述。參考文章中有具體的scheme和Universal links的配置方式。主要簡述Universal links。

Universal links為iOS9上一個所謂通用連結的深層連結特性,一種能夠方便的通過傳統HTTP連結來啟動app,使用相同的網址開啟網站和app;通過唯一的網址,就可以連結一個特定的檢視到你的app裡面,不需要特別的scheme。在iOS中,對比scheme的方式Universal links有以下優點:

1、 通過scheme啟動app時,瀏覽器會彈出確認框提示使用者是否開啟,而Universal links不會提示,體驗更好;

2、 Universal links可在微信瀏覽器中開啟外部app

參考文章:

H5CallUpNative 【重要】