什麼是 universal links: (通用連接) 一種可以方便的經過傳統 HTTP 連接來啓動 APP, 使用相同的網址打開web page和 APP的方式。前端
第一點,連接打開網址 顧名思義web
第二點,連接打開app, 一般 咱們都會用 url scheme(schema) 就是 在info 中 能夠配置幾個目標需求app的 一個 schema (關鍵key 惟一應用標識),而後使用 openUrl 方法打開. 這裏用 連接打開. 安全
緣由: (1)schema 方式容易暴露用戶數據:若是有人拿到 schema 利用 AppDelegate 裏面 canOpenURL:方法 就能夠知道 用戶手機裏面 都安裝了啥 , 我也不知道 爲何有這麼多人會取巧 用在了 外門邪道,固然 蘋果疾惡如仇 , 在iOS9裏面 對該策略有了限制,不能 用 跑代碼的方式來檢測 用戶APP安裝使用狀況了 服務器
(2)schema 容易重複: 極可能 沒有交集的兩個開發團隊 取了相同的 url scheme 名字,而後 iPhone本身蒙圈了,到底該怎麼辦,而後手機default狀態 沒有任何處理 ,接着用戶就會不知道該幹啥: 「我剛剛不是點了那個按鈕麼,這個手機卡住了仍是怎麼着 沒反應呢」?微信
(3)universal links 不只僅能解決以上兩個問題 (沒錯 更安全 不怕信息泄漏 有人再檢測 你手機app列表了, 域名惟一了),並且 是上下文連接緊密的,你能夠直接跳轉已經安裝的app或者 跳轉去下載這個應用 或者其餘 的連接什麼的app
服務端操做: ide
這個 universal links 須要服務端的小夥伴 幫忙處理一下,註冊一個域名,好比http://xxxx.com 做爲咱們的universal link.測試
(1)首先須要購買SSL證書,爲了 使用 SSL經過 get 請求訪問到訪問域名(以及下面的JSON)url
(2)而後配置一些服務spa
「支持上傳一個 JSON 文件到你的域名」 :這個須要在服務器的根目錄下面,添加文件名爲apple-app-site-association(沒有後綴)的一個文件,而後在裏面添加上以下的內容:
{ "applinks": { "apps": [], "details": [ { "appID": "XXXXXXXX", "paths": [ "/videos/\*" ] } ] } }
關鍵 是 appId 是 開發者帳號的 teamId 和 app的bundleId 拼成的 例如:
teamId + 「.」 + bundleId 拼寫成的字符串
客戶前端操做:
註冊你的App,使其可以處理universal links
須要在 Xcode 的 capabilities 裏 添加你的 app 域名, 必須使用 「applinks:」做爲前綴還添加一些你可能擁有的子域和擴展(www.xxxx.com, tests.xxxx.com 等等)。
而後就能夠用 目標連接 放在 safari 裏 測試 看看能不能跳轉應用 ,或者 去下載應用了.
有相似的第三方,使用集成的方式 ,不須要咱們域名的問題,只須要 提供 teamId, 而後爲咱們生成一個」短連接」,把這個連接 放在微信 或者 safari裏 就能夠一鍵跳轉應用 或者提示去下載應用了.
而後 根據需求 是打開頁面 仍是怎麼的處理方法
由於 這個iOS9的新特性麼,,若是 你還要支持 相對比較低的版本 必定要有預判斷, 否則 會致使crash. 而且 頗有可能 蘋果 不測試這種問題 ,你的應用就上線了,等用戶受影響了才反應過來.還得加急從新打包
都是血淚經驗: 咱們項目 使用 iOS9 font 而後仍然有至關一部分 iOS7的用戶反饋 開啓就閃退.沒招 咱們好多用戶都鍾情低版本 不肯意升級. 而後 咱們緊急 修復這個問題 從新上架.(蘋果 根本沒審覈低版本系統好吧~)
備註: 測試拿真機 , 模擬器 很差使