【iOS/Android】自家 Web page 中關聯 App

有很多產品都是同時具備 Web 端和 App 端的形態(tài)遗座。比如簡書舀凛,經常可以在朋友圈看到來自這里的分享途蒋,所以在傳播方面就很倚重 Web猛遍,然后在頁面上對 App 進行關聯,提高導流轉化率。

目標效果

最終實現的效果有以下三條:

  1. 若用戶未安裝 App螃壤,則顯示 App 信息抗果,方便用戶點擊安裝。
  2. 若用戶已安裝 App奸晴,則自動調起并在 APP 中進行顯示冤馏。
  3. 若用戶已安裝 App,但仍然切換到瀏覽器閱覽寄啼,則提供手動點擊打開 App 的方式逮光。

本文將介紹如何在自己的產品中達到上述效果。

由于 Web 頁面是在瀏覽器中顯示的墩划,所以能否實現功能和用戶所用具體瀏覽器相關涕刚。
本文以 iOS Safari 及 Android Chrome 為主,會提及微信的內置瀏覽器乙帮,但不再不包含其他杜漠。

先來看效果圖

效果 2 的自動打開 App 在上圖中并未體現

iOS


Smart App Banners

這是 iOS 6 之后 Safari 默認支持的功能,可以實現效果 1 和 3察净,請參見上圖前兩幅驾茴。

具體實現方法很簡單,只需要在 Web 中加入一條 meta 信息指定 App ID 和 URL即可氢卡。

<meta name="apple-itunes-app" content="app-id=888237539, app-argument=http://jianshu.com/p/d7ae65ccac3e">

點擊打開后具體行為(顯示文章)及數據(文章 ID)可以通過 app-argument 指定锈至,然后在此方法中處理 application:openURL:sourceApplication:annotation:[1]

推薦一個第三方庫 HHRouter,很方便即可將 URL 映射至 View Controller

具體過程及原理可參考官方文檔說明译秦,此處不再詳述峡捡。

要注意此功能在模擬器中無法生效
另外如果 App 是首次要實現此功能,實機也無法觸發(fā)第二幅圖的效果
等包含此功能的版本在 Apple Store 發(fā)布之后筑悴,才能看到第二幅圖的效果

Universal Links

這是從 iOS 9 之后才支持的功能们拙,可以實現效果 2,各位自己分享本文到微信中雷猪,然后選擇在 Safari 中打開即可看到睛竣。

實現上,首先在 Server 創(chuàng)建『apple-app-site-association』文件(需支持 HTTPS[2] 訪問)求摇,記載哪些 Web 路徑應該在 App 中打開射沟,例如簡書的 https://jianshu.com/apple-app-site-association,可見支持文章与境、專題验夯、用戶信息、文集這四種頁面摔刁。

{
 "applinks": {
   "apps": [],
   "details": [
     {
       "appID": "KS7QAPBMXA.com.jianshu.Hugo",
       "paths": [ "/p/*", "/collection/*", "/users/*", "/notebooks/*" ]
     }
   ]
 }
}

接下來在設置 App 中支持域名

  • 啟用 Associated Domains 服務
    登錄開發(fā)者中心挥转,在 Identifiers -> App IDs 下找到對應 ID enable 即可。

  • 關聯域名
    用 Xcode 打開項目,在 TARGETS -> Capabilities 下找到 Associated Domains 項目绑谣,填入域名即可党窜。

最后,App 中實現 application:continueUserActivity:restorationHandler: 就好借宵。

詳情可參考官方文檔說明幌衣,另外提供一個官方工具可以檢測某網址是否支持 Universal Links 等功能。

自定義 URL Schemes

也可以利用來打開 App壤玫,例如簡書點擊 打開應用 按鈕就會調用 jianshu:// 來嘗試打開自己的 App豁护,請參見上圖第三幅。

和 Universal Links 區(qū)別是欲间,這個不能自動打開 App楚里,會給用戶彈出一個確認框,經用戶同意才可以猎贴。

實現上也很簡單班缎,在 Info.plist -> URL types 創(chuàng)建 item 定義 CFBundleURLNameCFBundleURLSchemes 即可。前者不重要她渴,一般用域名的反序吝梅,后者即是自定義的 Schemes。

接下來 App 里實現此方法 application:openURL:sourceApplication:annotation:[1]

具體可參考官方文檔惹骂,另外提供一個官方樣例代碼

Android


Smart App Banner

很遺憾官方并沒有提供類似于 iOS 的同等功能做瞪,不過這款 jQuery 插件[3] 大致可以模擬出該效果对粪。

當然也需要在 Web 中加入 meta 來標志 App 的包名

<meta name="google-play-app" content="app-id=com.jianshu.haruki">

雖然 name 是 google-play-app,不過當用戶點擊查看 App 的按鈕后装蓬,各種商店 App 都可以響應著拭,所以只要 App 在各大商店上架就可以正常使用。

該插件沒法判斷用戶是否已經安裝了 App牍帚,無法實現圖中第 2 幅的效果

Intent Filters

已安裝 App 的狀態(tài)自動打開的功能儡遮,需要 App 自己響應自家域名的 http/https。

<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:scheme="http" android:host="jianshu.com" />
</intent-filter>

這里推薦一個開原庫 ActivityRouter暗赶,可以用注解的方式配置 Activity 自動響應 Web URL鄙币。

@Router("http://jianshu.com/p/:postId")
public class PostActivity extends Activity {
 ...
}

當訪問自家的網頁時,系統會提示用戶是否用 App 打開蹂随,如果用戶選擇了『總是』的話十嘿,以后就可以實現自動打開了。

自定義 URL Schemes

手動點擊打開打開 App 的話岳锁,觸發(fā) intent:// 的調用即可(例如放在 a 標簽中)绩衷。不過要注意必須由用戶手勢觸發(fā),否則調用無效。

實現方式類似上方的自動打開咳燕,不過 intent 調用需要遵循一定格式勿决,詳見官方文檔

window.location = "intent://notes/d7ae65ccac3e/#Intent;scheme=jianshu;package=com.jianshu.haruki;end"

App 側首先配置響應自定義 scheme

<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:scheme="jianshu" />
</intent-filter>

邏輯仍然可以用 ActivityRouter 很方便的實現。

如果用戶沒有安裝 App 時招盲,Chrome 會嘗試打開 Google Play低缩,可能會對用戶造成一點困擾。


  1. iOS 9 之后請使用 application:openURL:options: ? ?

  2. 這個使用目前流行的 Let's Encrypt 可以很方便實現 ?

  3. 這款插件還同時支持 Windows Phone 以及 iOS 4/5宪肖,雖然沒啥人用 ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末表制,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子控乾,更是在濱河造成了極大的恐慌么介,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕衡,死亡現場離奇詭異壤短,居然都是意外死亡,警方通過查閱死者的電腦和手機慨仿,發(fā)現死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門久脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镰吆,你說我怎么就攤上這事帘撰。” “怎么了万皿?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵摧找,是天一觀的道長。 經常有香客問我牢硅,道長蹬耘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任减余,我火速辦了婚禮综苔,結果婚禮上,老公的妹妹穿的比我還像新娘位岔。我一直安慰自己如筛,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布赃承。 她就那樣靜靜地躺著妙黍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞧剖。 梳的紋絲不亂的頭發(fā)上拭嫁,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天可免,我揣著相機與錄音,去河邊找鬼做粤。 笑死浇借,一個胖子當著我的面吹牛,可吹牛的內容都是我干的怕品。 我是一名探鬼主播妇垢,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肉康!你這毒婦竟也來了闯估?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤吼和,失蹤者是張志新(化名)和其女友劉穎涨薪,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體炫乓,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡刚夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了末捣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侠姑。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖箩做,靈堂內的尸體忽然破棺而出莽红,到底是詐尸還是另有隱情,我是刑警寧澤邦邦,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布船老,位于F島的核電站,受9級特大地震影響圃酵,放射性物質發(fā)生泄漏。R本人自食惡果不足惜馍管,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一郭赐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧确沸,春花似錦捌锭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桨菜,卻和暖如春豁状,著一層夾襖步出監(jiān)牢的瞬間捉偏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工泻红, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夭禽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓谊路,卻偏偏與公主長得像讹躯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缠劝,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • 發(fā)現 關注 消息 iOS 第三方庫潮梯、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,094評論 4 62
  • 最近北京轉涼惨恭,我很應景的患了入冬以來的第一場感冒秉馏。噴嚏不停,鼻涕不止喉恋,一天下來沃饶,垃圾桶里塞滿了紙巾。下班的時候轻黑,同...
    桃夭淼淼閱讀 236評論 0 1
  • 制約因素是創(chuàng)造力的基礎糊肤,正因為約束力量的存在,才使得人不斷思考如何滿足制約而實現目標氓鄙,在這樣的循環(huán)下不斷進步馆揉。
    云之魚閱讀 375評論 0 0
  • 記憶里面, 夏天的正午總是聽到院子里大樹上的知了聲抖拦, 乘涼的時候有奶奶的大蒲扇升酣, 有清甜的西瓜, 有濃郁的樹蔭态罪!
    康小白閱讀 368評論 1 3