一切为了运营!如何从推广短信链接唤起 App?
?●●●
需求描述
寫這篇文章,也是緣于運營的一個需求:在 App 運營過程中,會有大量的推廣短信,里面附有鏈接,目的是引導用戶參與活動。如果用戶手機沒有安裝我們的 App 就引導其去下載頁,如果用戶已經安裝了我們的 App 就直接在 App 中打開對應的活動。
?●●●
方案討論
對需求進行分析,歸納起來實際上就是一個問題,如何從短信喚起App?
這里有兩種方案。
第一種,也是最理想的直接從短信喚起,也就是點擊短信中的鏈接后如果安裝了 App 就跳轉到 App,如果沒有安裝就在瀏覽器打開對應頁面,如下圖:
第二種,經瀏覽器中轉喚起,也就是點擊短信鏈接后先用瀏覽器打開對應頁面,在頁面中進行“判斷”(實際上不是真正的判斷,而是發一個scheme給系統)如果安裝了 App 就跳轉到 App,否則就停留在當前頁。
下面將對這兩種方案分別進行分析、實施。
?●●●
從短信直接喚起 App
通常,App 監聽私有短域名strange.com(不要問我為什么是短域名,因為短信就是按字算錢的,能省一分是一分)地址:
<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="strange.com" ? ? ? ?android:pathPattern=".*" ? ? ? ?android:scheme="https"/><data ? ? ? ?android:host="strange.com" ? ? ? ?android:pathPattern=".*" ? ? ? ?android:scheme="http"/> </intent-filter>1. Android 系統
當點擊短信中的鏈接后,系統會自行判斷,如果安裝了 App 就會出一個彈框讓用戶選擇在 App 中打開還是在瀏覽器中打開,如圖。
對用戶來說要多做一次選擇,這絕對不是好的體驗。
為了解決這個問題,Android 6.0 開始支持?Deep Links,讓用戶點擊鏈接直達App。
首先,在 intent-filter 中添加?android:autoVerify="true"。
<intent-filter android:autoVerify="true"><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/><dataandroid:host="strange.com"android:scheme="https"/></intent-filter>其次,在私有域下上傳一個 json 文件:?https://strange.com/.well-known/assetlinks.json
文件內容:
[{"relation": ["delegate_permission/common.handle_all_urls"],"target": {"namespace": "android_app","package_name": "應用ID","sha256_cert_fingerprints":["簽名證書指紋"] ? ? ? ?} ? ?} ]系統在安裝應用后會自動訪問 json 文件進行檢驗,如果檢驗通過,用戶訪問?strange.com?域名下的鏈接會直接跳轉到應用。
2.iOS 系統
必須采用?Universal Links,否則點擊還是直接跳轉到瀏覽器。
從短信直接喚起 App 總結:
要實現短信直接喚起 App,Android可以用?intent-filter?對域名進行監聽,但是會出彈框讓用戶進行選擇,為了更好的體驗,建議采用 Deep Links 技術方案,只支持 6.0 以上系統;iOS 只能采用 Universal Links 技術方案,只支持 9.0 以上系統。
系統 | 首選方案 | 備選方案 |
Android | Deep Links(Android 6.0+) | intent-filter |
iOS | Universal Links(iOS 9.0+) | 無,只能跳瀏覽器 |
?
●●●
經瀏覽器中轉喚起 App
上表所示,如果只能用備選方案,那么用戶就有可能會首先跳轉到瀏覽器(對應的是下載頁面),經過瀏覽器中轉,喚起 App。
通常的做法是,App 中監聽scheme?strange:
<intent-filter><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/><action android:name="android.intent.action.VIEW"/><data android:scheme="strange"/></intent-filter>H5 頁面中內嵌:
<iframe src="strange://login" style="display: none;"></iframe>或者執行腳本:
window.location.href="strange://login"因為瀏覽器只會處理http、https協議,當瀏覽器打開我們的 H5 下載頁面遇到不能處理的私有協議?strange,就會發?intent?給系統,如果有 App 可以處理這個協議會出彈框詢問用戶是否用該 App 打開,否則什么都不做,具體效果:
雖然彈框體驗欠缺,不過也是目前比較好的方案了。
兼容性問題
可是,重點來了,我們在實際測試過程中發現了一堆兼容性問題,在說明這些兼容性問題前,我們先解釋一個概念:intent://?協議。
Android Chrome 25+ 后已經不支持自定義?scheme?的方式,只支持?intent://?協議,最終要的是需要用戶手動進行?點擊?才能跳轉,舉個例子:
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end"> Take a QR code </a> <iframe href="intent://xxx" style="display: none;">></iframe>// 失效 <iframe href="strange://xxx" style="display: none;">></iframe>// 失效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 的方式。
問題出在第 1 種情況,因為只能手動喚起,我們需要對瀏覽器類型進行判斷(瀏覽器沒有提供是否支持自定義 scheme、intent://的 API 只能通過 UA 判斷),結合我們有限的測試結果,如果是錘子、Chrome 原生瀏覽器,需在頁面中內置一個“下載應用”的按鈕引導用戶點擊。
// 如果安裝了 App 就跳轉,否則就訪問 S.browser_fallback_url 的值 http://strange.com <a href="intent://strange/#Intent;scheme=strange://login;package=com.strange;S.browser_fallback_url=http%3A%2F%2Fstrange.com;end">跳轉到活動頁/下載</a>我們來分析一下瀏覽器的 UA ,舉幾個例子:
可以看出小米瀏覽器是在 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?的瀏覽器。
如下圖所示:?
當然除了技術層面的,短信本身的穩定性到達率也很重要。網易云短信,三網合一,驗證碼、運營短信、通知短信全能發,而且關鍵價格一樣。活兒好不好,戳【閱讀原文】,申請試用短信,試試就知道~
總結
以上是生活随笔為你收集整理的一切为了运营!如何从推广短信链接唤起 App?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNS调度原理解析
- 下一篇: 【揭秘】视频直播关键技术