Android 自定義scheme及多端喚起使用方法

前言

DeepLink,深度連接技術,相似於web開發領域不單單是經過連接打開一個界面,而是打開界面的某個具體內容。經常使用於web端喚起app時,傳遞參數直接打開肯定的界面,如經過京東的分享出去的商品詳情頁,實如今京東app中打開。html

在移動開發領域,是指app在處理特定的url時可以直接跳轉到對應的內容頁面或者觸發特定的邏輯。這樣能夠在web端切換app時經過參數傳遞保留了當前的上下文狀態,又能夠借用web端的優點,更利於傳播,可利用搜索引擎的索引,增長app的日活和下載量等。java

移動端實現deeplink因而就有了Universal Link、App Link、URL schemes等android

Android配置scheme

如配置WebActivity完整的打開連接爲openapp://test:8000/detail,須要在AndroidManifest.xml配置web

<activity android:name=".WebActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <!--須要被js調起必須設置-->
        <category android:name="android.intent.category.BROWSABLE" />
        <!--協議部分-->
        <data android:host="test" android:path="/detail" android:port="8000" android:scheme="openapp" />
    </intent-filter>
</activity>
複製代碼

協議部分:(類比於http://locahost:8080/home)app

  • android:scheme:協議名,相似於http
  • android:host:主機名,相似於locahost
  • android:port:端口名。相似於8080中的端口
  • android:path:路徑名,相似於home
  • 還能夠配置imei等等。結構爲<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

Android端調起

經過指定Intent的Action爲Intent.ACTION_VIEW,傳入解析的Uriui

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("openapp://test:8000/detail?title=電視影音&url=https://u.jd.com/1dfFwO"));
startActivity(intent);
複製代碼

傳遞參數的方法跟web端同樣,經過問號?分隔,參數名和值之間使用等號=鏈接,多個參數之間使用&拼接。搜索引擎

Android端參數接收

Uri uri = getIntent().getData();
if (uri != null) {
    // 完整的url信息
    String totalUrl = uri.toString();
    Log.i(TAG, "完整url: " + totalUrl);
    // scheme 協議
    String scheme = uri.getScheme();
    Log.i(TAG, "scheme: " + scheme);
    // host 主機
    String host = uri.getHost();
    Log.i(TAG, "host: " + host);
    //port 端口
    int port = uri.getPort();
    Log.i(TAG, "port: " + port);
    // 訪問路徑
    String path = uri.getPath();
    Log.i(TAG, "path: " + path);
    // 獲取全部參數
    String query = uri.getQuery();
    Log.i(TAG, "query: " + query);
    //獲取指定參數值
    String title = uri.getQueryParameter("title");
    Log.i(TAG, "title: " + title);
    String url = uri.getQueryParameter("url");
    Log.i(TAG, "url: " + url);
}
複製代碼

喚起後能夠看見打印的日誌信息: {% asset_img 15705317238763.png%}url

拿到參數以後就能夠進行後續的使用操做啦spa

web端喚起

直接當作一個普通的鏈接形式,直接跳轉日誌

window.location = "openapp://test:8000/detail?title=電視影音&url=https://u.jd.com/1dfFwO";  
複製代碼

或者設置超連接等待用戶點擊

<a href="openapp://test:8000/detail?title=電視影音&url=https://u.jd.com/1dfFwO">在app中打開</a>
複製代碼

原文連接

💡 更多好文歡迎關注個人公衆號~

公衆號
相關文章
相關標籤/搜索