1. 程式人生 > >Android DeepLink介紹與使用

Android DeepLink介紹與使用

deeplink.png
前段時間公司讓調研一下DeepLink,說以後會用到,之前看了很久,並做了個demo,現整理一下,方便以後查閱,如果有幸幫助到其他人就更好了。

基本概念

Deep Link,又叫deep linking,中文翻譯作深層連結。

簡單地從使用者體驗來講,Deep Link,就是可以讓你在手機的瀏覽器/Google Search上點選搜尋的結果,便能直接跳轉到已安裝的應用中的某一個頁面的技術。

對於不懂技術的運營人員來說就是一個分享功能,而從技術層面上去簡單理解是實現將某APP使用者帶到另外APP相對應的內容頁面,實現APP之間無縫跳轉!

商業價值

相信大家或多或少看到過這樣的頁面:

deeplink

底部有一個“App內開啟”,點選後如果安裝過應用直接跳到應用的對應頁面,如果沒安裝則跳到下載應用頁。

Deeplink(深度連結)

對於已經安裝APP,指向特定的頁面,和上面說的一致。

Deferred deeplink( 延遲深度連結)

相比deeplink,它增加了判斷APP是否被安裝,使用者匹配的2個功能;

  • 1.當用戶點選連結的時候判斷APP是否安裝,如果使用者沒有安裝時,引導使用者跳轉到應用商店下載應用。
  • 2.使用者匹配功能,當用戶點選連結時和使用者啟動APP時,分別將這兩次使用者Device Fingerprint(裝置指紋資訊)傳到伺服器進行模糊匹配,使使用者下載且啟動APP時,直接開啟相應的指定頁面。

通過上面的2個技術方案,不僅:①可以讓被分享者更快更便捷的回到APP,且回到指定的活動頁面,而且:②可以引導未安裝APP的使用者下載APP、③分享者和被分享者的關係鏈會通過裝置指紋資訊記錄下來,在業務場景中給出相應的獎勵。

使用deeplink前後對比:
對比

基本使用

<a href="[scheme]://[host]/[path]?[query]">啟動應用程式</a> 

示例:

<a href="will://link/testId">立即開啟(直接開啟)&gt;&gt;</a>
<!--用於DeepLink,html跳到此頁面  scheme_Adr: 'will://link/testid',-->
        <activity android:name=".DeepLinkActivity">
            <
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="link" android:scheme="will" /> </intent-filter> </activity> </application>
    @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (TextUtils.isEmpty(url)) {
            return false;
        }
        try {
            // 用於DeepLink測試
            if (url.startsWith("will://")) {
                Uri uri = Uri.parse(url);
                Log.e("---------scheme", uri.getScheme() + ";host: " + uri.getHost() + ";Id: " + uri.getPathSegments().get(0));
            }

            Intent intent1 = new Intent();
            intent1.setAction("android.intent.action.VIEW");
            Uri uri = Uri.parse(url);
            intent1.setData(uri);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mActivity.startActivity(intent1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
   /**
     * 從deep link中獲取資料
     * 'will://share/傳過來的資料'
     */
    private void getDataFromBrowser(TextView textView) {
        Uri data = getIntent().getData();
        try {
            String scheme = data.getScheme();
            String host = data.getHost();
            List<String> params = data.getPathSegments();
            // 從網頁傳過來的資料
            String testId = params.get(0);
            String text = "Scheme: " + scheme + "\n" + "host: " + host + "\n" + "params: " + testId;
            Log.e("ScrollingActivity", text);
            textView.setText(text);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

頁面具體顯示:

Scheme:will
host:link
params:testId

實現原理

DeepLink用到的核心技術就是:URL SCHEMES。不論是IOS還是Android。
URL Schemes 有兩個單詞:

  • Schemes,表示的是一個 URL 中的一個位置——最初始的位置,即 ?/之前的那段字元。比如 http://www.apple.com 這個網址的 Schemes 是 http。

我們可以像定位一個網頁一樣,用一種特殊的 URL 來定位一個應用甚至應用裡某個具體的功能。而定位這個應用的,就應該這個應用的 URL 的 Schemes 部分,也就是開頭兒那部分。但是需要注意的是應用的URL Schemes 並不唯一,也就是說一個應用可以“起多個名“,不同應用的URL Schemes也可能因為名字一樣發生衝突。

Android系統級應用,有一些已經定義了URL Schemes,比如簡訊是 sms:、通話是tel:、email是mailto:,在定義自己APP的URL Schemes的時候要避免跟系統應用名稱一樣。

<a href="tel:15088888888">電話</a>
<a href="sms:15088888888">簡訊</a>
<a href="mailto:[email protected]">郵件</a>

與URL一樣,URL Schemes也可以通過傳參開啟特定的APP介面。

Applink

基本介紹

Android App Links是一種特殊的Deep Links,它使Android系統能夠直接通過網站地址開啟應用程式對應的內容頁面,而不需要使用者選擇使用哪個應用來處理網站地址。

要新增Android App Links到應用中,需要在應用裡定義通過Http(s)地址開啟應用的intent filter,並驗證你確實擁有該應用和該網站。如果系統成功驗證到你擁有該網站,那麼系統會直接把URL對應的intent路由到你的應用。

為了驗證你對應用和網站的所有權,以下兩個步驟是必須的:

  • 1.在AndroidManifest裡要求系統自動進行App Links的所有權驗證。這個配置會告訴Android系統去驗證你的應用是否屬於在intent filter內指定的URL域名。
  • 2.在以下連結地址裡,放置一個數字資產連結的Json檔案,宣告你的網址和應用之間的關係:
  • https://domain.name/.well-known/assetlinks.json

與Deep Links的區別

  • Deep Links 是一種允許使用者進入應用某個特定Activity的intent filter。點選這類連結時,系統可能會彈出一個選擇列表,讓使用者在一堆能夠處理這類連結的應用裡(包括你的)選擇一個來處理該連結。圖一展示了這樣一種情況:使用者點選了一個地圖相關的連結,系統彈出一個選擇列表,讓使用者選擇是要使用地圖應用來處理,還是使用Chrome瀏覽器來處理。

  • App Links 是一種基於你的網站地址且驗證通過的Deep Links。因此,點選一個這樣的連結會直接開啟你的應用(如果已經安裝),系統將不會彈出選擇列表。當然,後續使用者可以更改配好設定,來指定由哪個應用程式處理這類連結。

下面這個列表描述更多差異:

item Deep Links App Links
Intent URL Scheme https, http,或者自定義 需為http或https
Intent Action 任意Action 需為android.intent.action.VIEW
Intent Category 任意Category 需為android.intent.category.BROWSABLEandroid.intent.category.DEFAULT
連結驗證 不需要 需要在網站上放置一個數字資產連結,並能夠通過HTTPS訪問
使用者體驗 可能會彈出一個選擇列表給使用者選擇用哪個應用處理連線 沒有彈框,系統直接開啟你的應用處理網站連線
相容性 所有Android版本 Android 6.0及以上

總結一下

  • 1.APP要想被其他APP直接開啟,自身得支援,讓自己具備被人開啟的能力。(URL Schemes)
  • 2.APP要想開啟其他的APP,自身也得支援。(判斷裝置是否安裝、各種跳轉的處理)

由於大部分應用,如微博、微信、第三方瀏覽器(包括Chrome),都不會將URL拋給系統處理(對scheme進行遮蔽),因此App Links生效的情況就很有限了,比如只能從記事本應用、簡訊應用這些進行跳轉。一般商用實現的是開啟系統瀏覽器,通過系統瀏覽器開啟應用的對應頁面。

一些常用APP的URL Schemes

知乎:回答 zhihu://answers/{id}使用者頁 zhihu://people/{id}
微信:
weixin://dl/scan 掃一掃weixin://dl/feedback 反饋weixin://dl/moments 朋友圈weixin://dl/settings 設定weixin://dl/notifications 訊息通知設定weixin://dl/chat 聊天設定weixin://dl/general 通用設定weixin://dl/officialaccounts 公眾號weixin://dl/games 遊戲weixin://dl/help 幫助weixin://dl/feedback 反饋weixin://dl/profile 個人資訊weixin://dl/features 功能外掛

騰訊微博:TencentWeibo://
淘寶:taobao://
支付寶:alipay://
微博:sinaweibo://
weico微博:weico://
QQ瀏覽器:mqqbrowser://
uc瀏覽器:ucbrowser://
海豚瀏覽器:dolphin://
搜狗瀏覽器:SogouMSE://
百度地圖:baidumap://
Chrome:googlechrome://
優酷:youku://
京東:openapp.jdmoble://
人人:renren://
美團:imeituan://
1號店:wccbyihaodian://
我查查:wcc://
有道詞典:ddictproapp://
點評:dianping://
微盤:sinavdisk://
豆瓣fm:doubanradio://
網易公開課:ntesopen://
名片全能王:camcard://
淘寶寶貝搜尋:taobao://http://s.taobao.com/?q=[prompt]
淘寶店鋪搜尋:taobao://http://shopsearch.t

參考連結