一、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¶m2=p2
其中需要注意的是:
- App1必須支持,如微信屏蔽了很多schema,一般手機瀏覽器不會屏蔽shcema;
- APP2必須支持,APP也需要開發,讓系統知道其對應的schema,並解析參數定位到具體位置。
Android 深度鏈接喚起App順序:
- 打開用戶指定的首選APP(如果用戶指定了URI對應的APP);
- 打開處理URI的唯一APP;
- 對話框中選擇相應的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