瀏覽器掃碼開啟Android/iOS App

xiangzhihong發表於2022-04-28

開啟瀏覽器,掃描某個二維碼時需要啟動特定的App,要實現這樣的需求,我們首先需要解析HTML頁面的二維碼,通常解析後的內容格式為:

<a href="[scheme]://[host]/[path]?[query]">啟動App</a> 
//測試連結
<a href="myapp://jp.app/openwith?name=zhangsan&age=26">啟動App</a> 
  • scheme:判別啟動的App。
  • host:適當記述。
  • path:傳值時必須的key,沒有可以不傳。
  • query:獲取值的Key和Value,沒有可以不傳。

首先,我們開啟Android工程的AndroidManifest.xml配置檔案,然後在啟動頁面Activity下追加以下內容。

<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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>  
</intent-filter>

需要說明的是,intent-filter的內容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】這2個,不能與這次追加的內容混合在一起。因為如果加入了同一個Activity,會導致應用圖示在桌面消失等問題,所以一般情況配置如下。

<intent-filter>  
    <action android:name="android.intent.action.MAIN"/>  
    <category android:name="android.intent.category.LAUNCHER" />  
</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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>  
</intent-filter> 

接下來,在Activity中需要取值的地方新增以下程式碼,可以直接寫在OnCreate函式裡的。

val value = intent
        val action = value.action
        if (Intent.ACTION_VIEW == action) {
            val uri: Uri? = value.data
            if (uri != null) {
                val name: String? = uri.getQueryParameter("name")
               val age: String? = uri.getQueryParameter("age")
                ...  //處理業務
            }
        }

經過上面的處理後,就可以完成瀏覽器掃碼開啟Android/iOS App的功能了。需要注意的是,一定要用自帶瀏覽器或者谷歌瀏覽器,不要用什麼Uc、騰訊瀏覽器。

最近遇到這麼一個需求: 當使用者在手機瀏覽器中點選一個按鈕時,如果手機上已經該應用程式,則直接開啟,如果沒有安裝,則轉向應用下載頁面。 對於這一需求,可以使用【scheme://host:port/path or pathPrefix or pathPattern】的方式,下面的Android的開發文件:

http://developer.android.com/guide/topics/manifest/data-element.html

下面是具體的示例程式碼:

<a id="applink1" href="http://test.xx.com/demo/test.php">開啟</a>

然後,給目標Activity增加以下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="test.xx.com "
       android:path="/demo/test.php"
       android:scheme="http" /> 
</intent-filter>

增加該filter後,該Activity就能處理 http://test.xx.com/demo/test.php。在瀏覽器中點選“開始”,發起對該URL的請求時,如果本機安裝了這個應用,系統就會彈出一個選擇,詢問你想使用瀏覽器開啟,還是使用該應用開啟。
在這裡插入圖片描述

相關文章