Android DeepLink介紹與使用

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

基本概念

Deep Link,又叫deep linking,中文翻譯做深層連接。html

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

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

商業價值

相信你們或多或少看到過這樣的頁面:git

deeplink

底部有一個「App內打開」,點擊後若是安裝過應用直接跳到應用的對應頁面,若是沒安裝則跳到下載應用頁。github

Deeplink(深度連接)

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

Deferred deeplink( 延遲深度連接)

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

  • 1.當用戶點擊連接的時候判斷APP是否安裝,若是用戶沒有安裝時,引導用戶跳轉到應用商店下載應用。
  • 2.用戶匹配功能,當用戶點擊連接時和用戶啓動APP時,分別將這兩次用戶Device Fingerprint(設備指紋信息)傳到服務器進行模糊匹配,使用戶下載且啓動APP時,直接打開相應的指定頁面。

經過上面的2個技術方案,不只:①可讓被分享者更快更便捷的回到APP,且回到指定的活動頁面,並且:②能夠引導未安裝APP的用戶下載APP、③分享者和被分享者的關係鏈會經過設備指紋信息記錄下來,在業務場景中給出相應的獎勵。json

使用deeplink先後對比: 瀏覽器

對比

基本使用

具體見Demo:WebViewStudy服務器

HTML頁面:deeplink.html

<a href="[scheme]://[host]/[path]?[query]">啓動應用程序</a> 
複製代碼

示例:

<a href="will://link/testId">當即打開(直接打開)&gt;&gt;</a>
複製代碼

AndroidManifest.xml

<!--用於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>
複製代碼

MyWebViewClient.class

@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;
    }
複製代碼

DeepLinkActivity.java

/** * 從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 有兩個單詞:

  • URL,咱們都很清楚,www.apple.com 就是個 URL,也叫它連接或網址;
  • Schemes,表示的是一個 URL 中的一個位置——最初始的位置,即 ://以前的那段字符。好比 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:15088888888@qq.com">郵件</a>
複製代碼

與URL同樣,URL Schemes也能夠經過傳參打開特定的APP界面。

Applink

基本介紹

官網文檔:Verify Android App Links

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生效的狀況就頗有限了,好比只能從記事本應用、短信應用這些進行跳轉。通常商用實現的是打開系統瀏覽器,經過系統瀏覽器打開應用的對應頁面。

京東及淘寶的CPS便是使用此方式實現的。 京東CPS商品推廣接入流程 Android 阿里百川cps SDK接入流程

一些經常使用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

參考連接

相關文章
相關標籤/搜索