標籤:
什麼是 universal links: (通用連結) 一種能夠方便的通過傳統 HTTP 連結來啟動 APP, 使用相同的網址開啟web page和 APP的方式。
第一點,連結開啟網址 顧名思義
第二點,連結開啟app, 通常 我們都會用 url scheme(schema) 就是 在info 中 可以配置幾個目標需求app的 一個 schema (關鍵key 唯一應用標識),然後使用 openUrl 方法開啟. 這裡用 連結開啟.
原因: (1)schema 方式容易暴露使用者資料:如果有人拿到 schema 利用 AppDelegate 裡面 canOpenURL:方法 就可以知道 使用者手機裡面 都安裝了啥 , 我也不知道 為什麼有這麼多人會取巧 用在了 外門邪道,當然 蘋果疾惡如仇 , 在iOS9裡面 對該策略有了限制,不能 用 跑代碼的方式來檢測 使用者APP安裝使用方式了
(2)schema 容易重複: 很可能 沒有交集的兩個Team Dev 取了相同的 url scheme 名字,然後 iPhone自己蒙圈了,到底該怎麼辦,然後手機default狀態 沒有任何處理 ,接著使用者就會不知道該幹啥: “我剛剛不是點了那個按鈕麼,這個手機卡住了還是怎麼著 沒反應呢”?
(3)universal links 不僅僅能解決以上兩個問題 (沒錯 更安全 不怕資訊洩漏 有人再檢測 你手機app列表了, 網域名稱唯一了),而且 是上下文連結緊密的,你可以直接跳轉已經安裝的app或者 跳轉去下載這個應用 或者其他 的連結什麼的
服務端操作:
這個 universal links 需要服務端的小夥伴 幫忙處理一下,註冊一個網域名稱,比如http://xxxx.com 作為我們的universal link.
(1)首先需要購買SSL認證,為了 使用 SSL通過 get 請求訪問到訪問網域名稱(以及下面的JSON)
(2)然後配置一些服務
“支援上傳一個 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的使用者反饋 開啟就閃退.沒招 我們好多使用者都鐘情低版本 不願意升級. 然後 我們緊急 修複這個問題 重新上架.(蘋果 根本沒審核低版本系統好吧~)
備忘: 測試拿真機 , 模擬器 不好使
iOS 9 的新功能 universal links