Android DeepLink 深度鏈接技術實現 Android 從瀏覽器啓動應用 Android 從瀏覽器啓動應用

一、DeepLink 技術介紹

DeepLink,即爲深度鏈接技術,主要應用場景是通過Web頁面直接調用Android原生app,並且把需要的參數通過Uri的形式,直接傳遞給app,節省用戶的註冊成本。

DeepLink 通常運用於App社交分享、App廣告引流、App裂變活動、Web to App、分享效果統計、沉默用戶喚醒等場景,對廣告引流、活動推廣、新聞類、電商類、遊戲類、視頻直播類App的引流推廣和轉化都有着奇效。

常見使用場景如下:

  • 電商類:在分享商品鏈接中點擊,進入 App 內對應店鋪或購物頁面
  • 資訊類:在分享新聞鏈接中點擊,進入 App 內對應內容頁面
  • 遊戲類:在分享邀請組隊的鏈接中點擊,進入 App 內對應的遊戲房間或戰隊隊伍中
  • 廣告:在社交平臺點擊相關廣告,進入 App 內對應內容頁面
  • 拉新活動:例如老帶新邀請、福利抽獎等 H5 頁面活動,參與者可以點擊進入 App 內對應活動參與頁面

App 間的自由跳轉,解決的不僅僅是用戶體驗問題,更是拓展 App 的應用寬度問題,有了深度鏈接後,App 之間不再是獨立的個體平臺,開發者可以在移動端再現網頁端的自由跳轉,將廣告、活動營銷、裂變拉新、用戶喚醒等業務結合其中,創造一個更加完整、精簡的轉化鏈,能給 App 的運營和推廣帶來更多想象空間。

二、Android DeepLink 技術實現

Android的DeepLink實現首先需要在Web頁面調起Android App,這塊的基礎實現,我們在之前整理的 Android 從瀏覽器啓動應用 裏面已經講述了。

這裏我們再進行更多的擴展和說明。

移動端深度鏈接,本質上是使用URI的schema,移動操作系統提供解析schema的能力,判斷schema屬於哪個app,喚起並將參數傳遞給App。

URI實例:myapp://test/spec?param1=p1&param2=p2

其中需要注意的是:

  • App1必須支持,如微信屏蔽了很多schema,一般手機瀏覽器不會屏蔽shcema;
  • APP2必須支持,APP也需要開發,讓系統知道其對應的schema,並解析參數定位到具體位置。

Android 深度鏈接喚起App順序:

  1. 打開用戶指定的首選APP(如果用戶指定了URI對應的APP);
  2. 打開處理URI的唯一APP;
  3. 對話框中選擇相應的APP(URI對應多個APP的情況)

如何進行URI Schema的配置,可以參照  Android 從瀏覽器啓動應用即在Activity的配置文件中添加如下:

<intent-filter>
   <data android:scheme="***" /> /* URI Schema 在此進行配置 */
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

data可配置的內容如下:

<data
     android:scheme="xxxx"
     android:host="xxxx"
     android:port="xxxx"
     android:path="xxxx"
     android:pathPattern="xxxx"
     android:pathPrefix="xxxx"
     android:mimeType="xxxx"/>

這裏我們解釋一個每個字段所代表得意思:

  • scheme:協議類型,我們可以自定義,一般是項目或公司縮寫,String
  • host:域名地址,String
  • port:端口,int。
  • path:訪問的路徑,String
  • pathPrefix:訪問的路徑的前綴,String
  • pathPattern:訪問路徑的匹配格式,相對於path和pathPrefix更爲靈活,String
  • mimeType:資源類型,例如常見的:video/*, image/png, text/plain。

通過這幾個配置項,我們可以知道data實際上爲當前的頁面綁定了一個Uri地址,通過Uri直接打開這個Activity

Uri的結構如下:

<scheme> :// <host> : <port> / [ <path> | <pathPrefix> | <pathPattern> ]

scheme和host不可缺省,否則配置無效;path,pathPrefix,pathPattern一般指定一個就可以了,pathPattern與host不可同時使用;mimeType可以不設置,如果設置了,跳轉的時候必須加上mimeType,否則不能匹配到Activity。 

三、延遲深度鏈接

延遲深度鏈接,也稱爲Deferred Deep Linking,也就是深度鏈接的延遲版,實際上延遲深度鏈接是對深度鏈接功能的一個細分,是指在用戶點擊深度鏈接中打開APP的按鈕時,如果手機沒有安裝APP能夠自動跳轉到APP的下載頁面。

延遲深度鏈接對於APP而言最大的作用在於縮短了下載路徑,能夠有效地提升APP的下載量。我們回想一下沒有延遲深度鏈接的場景,當用戶收到一個好友發來的或者在Web上瀏覽的一個推廣鏈接,比如是某電商APP的一件商品,如果他的手機沒有安裝該APP那麼他的操作路徑是“退出鏈接-打開應用商店-搜索APP-安裝APP”,如果使用了延遲深度鏈接用戶的操作路徑就會優化成“點擊鏈接內按鈕-安裝APP”。在這種優化之中,用戶的主動操作只留下了最開始的按鈕觸發,既是對用戶操作的一種體驗優化,更減少了到達下載路徑之前用戶的主觀思考環境,讓用戶在改變主意之前完成了下載。

實現方案:

在頁面按鈕上新增定時,默認調用啓動App的URI,當超時時間達到的時候,如果未離開當前頁就跳轉到下載頁面。

<script language="javascript"> 
function callApp( url ) {
    var timeout, t = 1000, hasApp = true;
    setTimeout(function () {
        if (hasApp) {
            alert('安裝了app');
        } else {
            alert('未安裝app');
        }
        document.body.removeChild(ifr);
    }, 2000)
    var t1 = Date.now();
    var ifr = document.createElement("iframe");
    ifr.setAttribute('src', url);
    ifr.setAttribute('style', 'display:none');
    document.body.appendChild(ifr);
    timeout = setTimeout(function () {
         var t2 = Date.now();
         if (!t1 || t2 - t1 < t + 100) {
             hasApp = false;
         }
    }, t);
}
</script>

注:此處存在一個問題,即在Android手機上會出現彈窗提示打開某App,此時如果沒及時點擊的話,可能後面會直接執行下載邏輯。

此問題,本人測試了openinstall和MobLink這兩家的SDK,它們也沒解決此問題。

下面是可以酌情參考的一些其他人的文章:

https://www.jianshu.com/p/69cc8c6a8f93

https://blog.csdn.net/qq_30740239/article/details/51969660 

四、技術拓展

1. 推薦閱讀

https://blog.csdn.net/weixin_43652781/article/details/91800049

https://blog.csdn.net/weixin_40094522/article/details/87666254

https://blog.csdn.net/u011315960/article/details/82458806

2. 推薦相關SDK

openinstall:https://www.openinstall.io/pullUp.html

MobLink:https://www.mob.com/mobservice/moblink

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章