如何從推廣簡訊連結喚起 App ?這種一鍵跳轉的方式瞭解一下!
一、需求描述
寫這篇文章,也是緣於運營的一個需求:在 App 運營過程中,會有大量的推廣簡訊,裡面附有連結,目的是引導使用者參與活動。如果使用者手機沒有安裝我們的 App 就引導其去下載頁,如果使用者已經安裝了我們的 App 就直接在 App 中開啟對應的活動。
二、方案討論
對需求進行分析,歸納起來實際上就是一個問題,如何從簡訊喚起App?
這裡有兩種方案。
第一種,也是最理想的直接從簡訊喚起,也就是點選簡訊中的連結後如果安裝了 App 就跳轉到 App,如果沒有安裝就在瀏覽器開啟對應頁面
方案一 : 點選簡訊直接喚起
第二種,經瀏覽器中轉喚起,也就是點選簡訊連結後先用瀏覽器開啟對應頁面,在頁面中進行“判斷”(實際上不是真正的判斷,而是發一個scheme給系統)如果安裝了 App 就跳轉到 App,否則就停留在當前頁。
方案二 : 點選簡訊經瀏覽器中轉喚起
下面將對第二種方案進行分析、實施。
三、經瀏覽器中轉喚起 App
使用者往往會首先跳轉到瀏覽器(對應的是下載頁面),經過瀏覽器中轉,喚起 App。
而實現這一途徑我們可以採用Shareinstall。
Shareinstall減少了應用的程式碼冗餘,提供了通用的一鍵拉起介面。通過 URL Scheme 和 Universal Links 實現在不同瀏覽器中拉起APP。
以下是Shareinstall的工作原理:
(1)
由於安全隱私的原因,目前在網頁端是無法通過js指令碼直接判斷某個APP是否已經安裝,只能首先通過js嘗試性的啟動app,然後再進入安裝流程。web網頁上啟動app的方式有兩種:1)URL Scheme;2)Universal Link
(2)
URL Scheme:
android與ios均支援自定義scheme,通過訪問自定義schema的url即可啟動對應的app,如weixin://dl/scan這個url,這裡的weixin就是自定義的schema。js啟動app的具體方法主要有iframe.src,window.location等,如下:
var iframe = document.createElement(“iframe”);
iframe.style.display = “none”;
iframe.src = schemaUrl;
document.body.appendChild(iframe);
window.location=schemaUrl;
(3)
部分瀏覽器由於人為限制無法直接使用scheme啟動app,例如微信與QQ的內建瀏覽器,但在微信與QQ中,可以通過整合應用寶的微下載來啟動app,下面就來介紹下應用寶的具體情況:
目前主要通過監聽各種dom事件(如:pagehide,visibilitychange,unload等)或通過setTimeout根據時間差來(早期ios系統中,通過schema可立即啟動app,同時導致瀏覽器js指令碼暫停執行,指令碼恢復執行時通過時間差就能大致的判斷app是否啟動成功)。但現實情況下,由於各種瀏覽器與系統的差異性,無法通過js百分百的準確判斷app是否啟動成功;比如從ios9.2開始,通過schema啟動app時,ios系統會彈出一個非模態的系統提示框,詢問使用者是否同意啟動,在使用者沒有做出選擇前,js指令碼將繼續執行,這將導致js完全無法判斷app是否啟動成功。
(4)
Universal Link(通用連結):
ios9開始提供通用連結的特性,app開發時可配置一個與app對應的關聯域名,在ios9以上系統的所有瀏覽器中,訪問任何一個url連結前,系統將檢查本地是否已安裝與url域名相對應的app,如果已安裝對應的app,將進一步檢查連結url的路徑,是否應當啟動該app,而不在瀏覽器中訪問此url連結。但是通用連結存在一個容易讓人迷惑的地方,在經過通用連結啟動app後,使用者可以選擇使用safari訪問此url,系統會默默的記住使用者的選擇,在下次訪問通用連結的url時,系統將不再啟動app,而是直接在瀏覽器中訪問此url,並且沒有明顯的提示;(在safari中,使用者只有手動往下拽了該頁面時,才會出現一個詢問使用者開啟app的banner,其它瀏覽器則未必有此功能,而是完完全全的忽略掉通用連結)
(5)
應用寶微下載:
正常情況下,微信內建瀏覽器中,無法通過scheme啟動app,無法下載apk,也無法跳轉到app store,但微信與QQ均集成了對應用寶的支援。通過使用應用寶的微下載功能,android下的微信與QQ幫助判斷某個app是否已安裝,已安裝的情況下,提示使用者直接啟動app(在應用寶中需配置啟動用的scheme),未安裝的情況下,可直接下載已上架到應用寶的apk檔案;ios下,由於無法判斷某個應用是否已安裝(特別是ios>=9.2出現的提示視窗),應用寶只提供了跳轉app store的功能,而沒有啟動app的功能。