需求描述
●●●
方案討論
對需求進行分析, 歸納起來實際上就是一個問題, 如何從短信喚起App?
這裡有兩種方案。
第一種, 也是最理想的直接從短信喚起, 也就是點擊短信中的連結後如果安裝了 App 就跳轉到 App, 如果沒有安裝就在流覽器打開對應頁面, 如下圖:
第二種, 經流覽器中轉喚起, 也就是點擊短信連結後先用流覽器打開對應頁面, 在頁面中進行“判斷”(實際上不是真正的判斷, 而是發一個scheme給系統)如果安裝了 App 就跳轉到 App, 否則就停留在當前頁。
下面將對這兩種方案分別進行分析、實施。
●●●
從短信直接喚起 App
通常,
android:pathPattern=".*"
android:scheme="https"/>
android:host="strange.com"
android:pathPattern=".*"
android:scheme="http"/>
1. Android 系統
當點擊短信中的連結後, 系統會自行判斷, 如果安裝了 App 就會出一個彈框讓用戶選擇在 App 中打開還是在流覽器中打開, 如圖。
對用戶來說要多做一次選擇,
為了解決這個問題, Android 6.0 開始支持 Deep Links, 讓用戶點選連結直達App。
首先, 在 intent-filter 中添加 android:autoVerify="true"。
其次, 在私有域下上傳一個 json 檔: https://strange.com/.well-known/assetlinks.json
檔內容:
[系統在安裝應用後會自動訪問 json 檔進行檢驗, 如果檢驗通過, 用戶訪問 strange.com 功能變數名稱下的連結會直接跳轉到應用。
2.iOS 系統
必須採用 Universal Links, 否則點擊還是直接跳轉到流覽器。
從短信直接喚起 App 總結:
要實現短信直接喚起 App, Android可以用 intent-filter 對功能變數名稱進行監聽, 但是會出彈框讓用戶進行選擇, 為了更好的體驗, 建議採用 Deep Links 技術方案, 只支援 6.0 以上系統;iOS 只能採用 Universal Links 技術方案, 只支援 9.0 以上系統。
系統首選方案備選方案AndroidDeep Links(Android 6.0+)intent-filteriOSUniversal Links(iOS 9.0+)無, 只能跳流覽器●●●
經流覽器中轉喚起 App
通常的做法是, App 中監聽scheme strange:
H5 頁面中內嵌:
或者執行腳本:
雖然彈框體驗欠缺, 不過也是目前比較好的方案了。
相容性問題
可是, 重點來了, 我們在實際測試過程中發現了一堆相容性問題, 在說明這些相容性問題前, 我們先解釋一個概念:intent:// 協議。
Android Chrome 25+ 後已經不支援自訂 scheme 的方式, 只支援 intent:// 協定, 最終要的是需要使用者手動進行 點擊 才能跳轉,
>// 失效
>// 失效
intent:// 協定格式說明:
intent:目前市面上大多協力廠商流覽器都是基於 Chrome 開發, 這就帶來了相容性問題(沒有條件覆蓋所有的系統流覽器, 這裡只是有限測試的結果):
1、部分流覽器, 只支援 intent:// 協議 手動 喚起, 如chrome、錘子。
2、部分流覽器只支援 scheme 喚起, 如 UC 流覽器。
3、大部分流覽器, 同時支援 scheme 私有協定和intent:// 協議 自動 喚起。 但, 都沒有按標準的 intent:// 協議來實現(除了 360 流覽器, 給 360 點個贊):
· 有的流覽器在 App 沒安裝時並沒有執行S.browser_fallback_url, 而是跳轉到應用市場如獵豹流覽器4.46.3、樂視流覽器 1.2.1.29。
· 有的流覽器不支持S.browser_fallback_url如搜狗流覽器、歐朋流覽器、獵豹流覽器。
· 有的流覽器無論應用有無安裝S.browser_fallback_url一直都會執行如 QQ 流覽器。
所以對這部分流覽器, 不能使用 intent:// 協議。
4、更奇葩者, 二者都不支持, 如百度流覽器。
相容性問題解決方案
針對上述三個相容性問題, 第 4 種情況無解我們直接忽略, 第 2 第 3 種情況只能用自訂scheme 的方式。
// 如果安裝了 App 就跳轉, 否則就訪問 S.browser_fallback_url 的值 http://strange.com我們來分析一下流覽器的 UA , 舉幾個例子:
//小米系統流覽器User-Agent:Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; MI 3W Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/8.9.5
// 小米 Chrome 原生流覽器
User-Agent:Mozilla/5.0 (Linux; Android 6.0.1; MI 3W Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.108 Mobile Safari/537.36
// 錘子系統流覽器
User-Agent:Mozilla/5.0 (Linux; Android 5.1.1; YQ603 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.11 Mobile Safari/537.36
// 錘子 Chrome 原生流覽器
User-Agent:Mozilla/5.0 (Linux; Android 5.1.1; YQ603 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36
可以看出小米流覽器是在 Chrome 原生流覽器的 UA 上增加了 XiaoMi/MiuiBrowser/8.9.5 這部分特徵碼。類似的,很多協力廠商流覽器都是在 Chrome 基礎上增加自己的特徵碼,換句話說 Chrome 原生流覽器 UA 沒有自己的特徵。
而錘子系統流覽器和 Chrome 原生流覽器 UA 幾乎一樣,這就使得判斷是否錘子系統流覽器、 Chrome 原生流覽器 變得異常困難,要想盡可能完美解決問題只能使用排除法。
排除法由於不可能排除所有非 Chrome 原生流覽器,可能會存在誤傷的可能。
經流覽器中轉喚起 App 總結:
要實現經流覽器中轉 自動 喚起 App,Android和 iOS 都可以通過 自訂 scheme 的方式,但 Android 的情況稍顯複雜,因為部分流覽器並不支援,必須換成 intent:// 協定的方式 手動 喚起。
考慮到流覽器判斷的難度,結合流覽器市場佔有率的情況,我們最終的方案是暫時忽略 錘子系統流覽器、 Chrome 原生流覽器 這部分不支援 自訂 scheme 自動喚起 App 的用戶。
●●●
從短信喚起 App 最終方案
綜合起來就是:
· 通過 Deep Links(iOS則是Universal Links),可以實現點擊短信連結直接喚起 App;
· 如果系統因為各種原因不支援 Deep Links,備選方案是 intent filter,不過會出彈框讓用戶選擇用哪個 App 打開連結;
· 如果用戶沒有選擇我們的 App 而是選擇了流覽器打開,則通過 自訂 scheme 嘗試喚起 App;
· 由於技術和成本問題,我們忽略不支援 自訂 scheme 的流覽器。
如下圖所示:
當然除了技術層面的,短信本身的穩定性到達率也很重要。網易雲短信,三網合一,驗證碼、運營短信、通知短信全能發,而且關鍵價格一樣。
以上由網易企業資訊化服務提供者,湖南領先網路科技整理發佈。
網易企業服務(qiye163.co)是網易憑藉其20年品牌優勢與經驗在企業郵箱的基礎上,為進一步佈局企業市場而打造的企業級產品矩陣,致力於提供一站式企業資訊化解決方案。湖南領先網路科技是網易企業產品授權經銷商,專業為企業提供網易企業郵箱、網易辦公套件等一站式企業資訊化專業解決方案。辦理網易企業郵箱及旗下企業產品相關業務,就找湖南領先網路科技。
// 小米 Chrome 原生流覽器
User-Agent:Mozilla/5.0 (Linux; Android 6.0.1; MI 3W Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.108 Mobile Safari/537.36
// 錘子系統流覽器
User-Agent:Mozilla/5.0 (Linux; Android 5.1.1; YQ603 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.11 Mobile Safari/537.36
// 錘子 Chrome 原生流覽器
User-Agent:Mozilla/5.0 (Linux; Android 5.1.1; YQ603 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36
可以看出小米流覽器是在 Chrome 原生流覽器的 UA 上增加了 XiaoMi/MiuiBrowser/8.9.5 這部分特徵碼。類似的,很多協力廠商流覽器都是在 Chrome 基礎上增加自己的特徵碼,換句話說 Chrome 原生流覽器 UA 沒有自己的特徵。
而錘子系統流覽器和 Chrome 原生流覽器 UA 幾乎一樣,這就使得判斷是否錘子系統流覽器、 Chrome 原生流覽器 變得異常困難,要想盡可能完美解決問題只能使用排除法。
排除法由於不可能排除所有非 Chrome 原生流覽器,可能會存在誤傷的可能。
經流覽器中轉喚起 App 總結:
要實現經流覽器中轉 自動 喚起 App,Android和 iOS 都可以通過 自訂 scheme 的方式,但 Android 的情況稍顯複雜,因為部分流覽器並不支援,必須換成 intent:// 協定的方式 手動 喚起。
考慮到流覽器判斷的難度,結合流覽器市場佔有率的情況,我們最終的方案是暫時忽略 錘子系統流覽器、 Chrome 原生流覽器 這部分不支援 自訂 scheme 自動喚起 App 的用戶。
●●●
從短信喚起 App 最終方案
綜合起來就是:
· 通過 Deep Links(iOS則是Universal Links),可以實現點擊短信連結直接喚起 App;
· 如果系統因為各種原因不支援 Deep Links,備選方案是 intent filter,不過會出彈框讓用戶選擇用哪個 App 打開連結;
· 如果用戶沒有選擇我們的 App 而是選擇了流覽器打開,則通過 自訂 scheme 嘗試喚起 App;
· 由於技術和成本問題,我們忽略不支援 自訂 scheme 的流覽器。
如下圖所示:
當然除了技術層面的,短信本身的穩定性到達率也很重要。網易雲短信,三網合一,驗證碼、運營短信、通知短信全能發,而且關鍵價格一樣。
以上由網易企業資訊化服務提供者,湖南領先網路科技整理發佈。
網易企業服務(qiye163.co)是網易憑藉其20年品牌優勢與經驗在企業郵箱的基礎上,為進一步佈局企業市場而打造的企業級產品矩陣,致力於提供一站式企業資訊化解決方案。湖南領先網路科技是網易企業產品授權經銷商,專業為企業提供網易企業郵箱、網易辦公套件等一站式企業資訊化專業解決方案。辦理網易企業郵箱及旗下企業產品相關業務,就找湖南領先網路科技。