Android 關于AppLinks

App links 允許開發(fā)者將 app 和他們的 web 域名關聯(lián)儒喊。這一舉措是為了最小化用戶遇到“打 開方式”對話框的概率蛹尝。

客戶端工作:

1后豫、App Links 支持 Android6.0+,開發(fā)時請設置編譯和目標版本 api 為 23突那。

2挫酿、在需要支持 App Link 的 activity 增加 intent-filter,并設置相關內容:

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

android:scheme 必須聲明為http愕难,https 或者兩者都聲明早龟,并且不能聲明其他 scheme。同時必須聲明category為 android.intent.action.VIEW和 android.intent.category.BROWSABLE猫缭。
??當聲明以上內容后葱弟,再 android 6.0+打開對應鏈接時,并且瀏覽器啟動時猜丹,系統(tǒng)就會彈出選擇框供用戶選擇打開鏈接的app芝加。為了讓系統(tǒng)將的app作為默認打開鏈接的app,我們需設置 android:autoVerify為 true射窒。同時在域名服務器做相應配置藏杖。當app manifest中有至少一個 intent-filter設置 autoVerify為true時将塑,當程序安裝時,系統(tǒng)會認證所有注冊在app manifest中的域名蝌麸,只有所有的域名認證通過系統(tǒng)才會將 app 作為對應域名的默認處理對象(貌似現(xiàn)在有個 bug点寥,當?shù)谝淮嗡?域名認證成功后,修改 app manifest 新增其他域名祥楣,再次安裝或升級時隨意新添加的域名也 會被認證成功并作為默認 app开财,估計以后會被改掉。误褪。。)碾褂。 認證只會在安裝和升級的時候會發(fā)生兽间,因此對大多數(shù)用戶來說,再次通過驗證的機會是 在 app 下一次升級的時候

服務端工作:

為了讓app驗證成功正塌,對應的域名服務器必須聲明與app的關聯(lián)嘀略。域名服務器通過一個 json 文件聲明與 app 的聯(lián)系,規(guī)則如下:

https://domain[:optional_port]/.well-known/assetlinks.json

注意乓诽,驗證服務通過 https 服務加密帜羊,所以保證需保證文件可通過 https 服務訪問,不論 intent-filter 中是否聲明了 scheme 為 https鸠天。在第一個 M 預覽版中讼育,重定向到 HTTPS,或者任何其他重定向(301稠集,302 或者 307)貌似都會被忽略并被視為失敗奶段。 assetlinks.json 文件中需包含以下內容:

  • package_name:程序包名
  • sha256_cert_fingerprints:程序簽名文件 SHA256,支持多個簽名信息

示例:

[{ 
  "relation": ["delegate_permission/common.handle_all_urls"], 
  "target": { 
    "namespace": "android_app", 
    "package_name": "com.example", 
    "sha256_cert_fingerprints": 
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:
96:B2:3F:CF:44:E5"] 
  } 
}]

支持多個 app 示例:

[{ 
  "relation": ["delegate_permission/common.handle_all_urls"], 
  "target": { 
    "namespace": "android_app", 
    "package_name": "example.com.puppies.app", 
    "sha256_cert_fingerprints": 
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:
96:B2:3F:CF:44:E5"] 
  } 
  }, 
  { 
  "relation": ["delegate_permission/common.handle_all_urls"], 
  "target": { 
    "namespace": "android_app", 
    "package_name": "example.com.monkeys.app", 
    "sha256_cert_fingerprints": 
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:
96:B2:3F:CF:44:E5"] 
  } 
}]

測試:

當所有程序工作準備完成,可通過以下請求測試域名服務器配置:

https://digitalassetlinks.googleapis.com/v1/statements:list? 
   source.web.site=https://<domain1>:<port>& 
   relation=delegate_permission/common.handle_all_urls 

測試客服端:

adb shell am start -a android.intent.action.VIEW \ 
    -c android.intent.category.BROWSABLE \ 
    -d "http://<domain1>:<port>" 

檢查link配置狀態(tài)剥纷,可以通過以下命令檢查當前程序對uri的處理方式(最好安裝完成等待一段時間(20s)后再查看):

adb shell dumpsys package domain-preferred-apps
 --or--
adb shell dumpsys package d

如果你的程序對應的Status為always則表示驗證成功了痹籍,訪問對應域名時會默認打開

App Links 實現(xiàn)過程:

App 鏈接認證涉及到安卓系統(tǒng)的兩個組建:Package Manager 和 Intent Filter Verifier。 PackageManager 是一個無處不在的標準組建 - 它負責驗證所安裝的 apk 是否有效晦鞋,授予 app 權限蹲缠,另外還可以通過它知道系統(tǒng)上安裝了些什么 app。而 Intent Filter Verifier 則是 Android M 上才有的新玩意兒悠垛。這個組建負責獲取鏈接指向的 JSON 認證线定,解析它,驗證它鼎文,然后將 報告返回給 PackageManger渔肩。
??App 鏈接認證在安裝的時候就一次性完成。不必在每次點擊鏈接的時候都阻塞網(wǎng)絡拇惋。

Paste_Image.png

當一個 package 安裝的時候周偎,或者現(xiàn)有的 package 升級的時候:

  1. PackageManager 對即將安裝的 apk 做常規(guī)的驗證抹剩。
  2. 如果成功,這個 package 將被安裝蓉坎,同時發(fā)出一個帶有 android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION 的廣播 intent澳眷,intent 中還攜 帶有該 package 的信息。
  3. Intent Filter Verifier 的廣播接收器將獲取這個廣播蛉艾。
  4. 從 package 的標簽中編譯出一個特有主機名的列表钳踊。
  5. verifier 嘗試從每個特有的主機名中獲取 statements.json。
  6. 每一個被獲取的 JSON 文件都會檢查它的 application ID 和安裝包的證書勿侯。
  7. 只有當所有文件同時滿足時拓瞪,才會發(fā)送成功信息到 PackageManager,否則失敗助琐。
  8. PackageManager 存儲結果祭埂。如果認證失敗,app 鏈接將無法指向你的 app - 你的 app 會像 往常一樣出現(xiàn)在“打開方式”對話框中(除非另一個 app 通過了同一域名的驗證)兵钮。

如果 verifier 不能在 5 秒之內和你的 web 服務器建立鏈接并接收到 HTTP 響應蛆橡,認證會失 敗。同樣的掘譬,如果在認證開始的時候設備是離線的泰演,或者網(wǎng)絡環(huán)境很差,認證也會失敗葱轩。

https://developer.android.com/training/app-links/index.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末睦焕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子酿箭,更是在濱河造成了極大的恐慌复亏,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缭嫡,死亡現(xiàn)場離奇詭異缔御,居然都是意外死亡,警方通過查閱死者的電腦和手機妇蛀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門耕突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人评架,你說我怎么就攤上這事眷茁。” “怎么了纵诞?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵上祈,是天一觀的道長。 經(jīng)常有香客問我,道長登刺,這世上最難降的妖魔是什么籽腕? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮纸俭,結果婚禮上皇耗,老公的妹妹穿的比我還像新娘。我一直安慰自己揍很,他們只是感情好郎楼,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窒悔,像睡著了一般呜袁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上简珠,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天傅寡,我揣著相機與錄音,去河邊找鬼北救。 笑死,一個胖子當著我的面吹牛芜抒,可吹牛的內容都是我干的珍策。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼宅倒,長吁一口氣:“原來是場噩夢啊……” “哼攘宙!你這毒婦竟也來了?” 一聲冷哼從身側響起拐迁,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蹭劈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后线召,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺韧,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年缓淹,在試婚紗的時候發(fā)現(xiàn)自己被綠了哈打。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡讯壶,死狀恐怖料仗,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情伏蚊,我是刑警寧澤立轧,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響氛改,放射性物質發(fā)生泄漏帐萎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一平窘、第九天 我趴在偏房一處隱蔽的房頂上張望吓肋。 院中可真熱鬧,春花似錦瑰艘、人聲如沸是鬼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽均蜜。三九已至,卻和暖如春芒率,著一層夾襖步出監(jiān)牢的瞬間囤耳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工偶芍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留充择,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓匪蟀,卻偏偏與公主長得像椎麦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子材彪,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,305評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程观挎,因...
    小菜c閱讀 6,444評論 0 17
  • 你來 我好好的在這 你走 我好好的在這 最后 我能做的 只有不打擾 不動心 痛著安靜 悄悄想你
    藥石有情閱讀 145評論 6 2
  • 它又出來了嘁捷,它又來了,又來了......壓得我喘不過氣显熏,為什么不讓直接讓我解脫雄嚣?為什么要活在這個世上,你有什么資格...
    丟掉沿途閱讀 222評論 0 0
  • 人之初佃延,性本善现诀。 我選擇了善良,不是我軟弱履肃。 ...
    羅欣羽閱讀 502評論 0 0