iOS App間相互跳轉漫談 part1

概述

文章介紹當下iOS系統中各類App之間的跳轉技術,並最終重點介紹UniversalLinks的一種特殊的使用技巧來幫助App來引流,提高轉化。html

背景

介紹下當下支持的App頁面跳轉技術及其優劣:ios

  1. Scheme跳轉 例如:json

    <appscheme>://detail?id=10000
    複製代碼

    用戶在系統中其餘App中點擊scheme連接;瀏覽器網頁中點擊scheme連接會彈出一個Alert彈框,讓用戶確認是否跳轉。 優點:與http的url提供相似,能夠經過URL直觀表達跳轉的頁面和意思。觸發條件能夠是用戶點擊,也能夠經過程序觸發JS或者App。 劣勢:跳轉時系統會彈出確認框讓用戶確認,體驗略差。而且不能知道App是否安裝,只能經過一些手段推測須要跳轉的App是否已經安裝,若是跳轉時沒有安裝則會彈出「Safari不能打開該網頁,由於網址無效。」的提示體驗打折扣,關於H5頁面如何推測App已經安裝後面會介紹。數組

  2. Smart App Banners 在HTML頁面中植入一個meta標籤,相似於:瀏覽器

    <meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
    複製代碼

    訪問這個頁面的時候在網頁加載完後往下拉頁面能夠看到App的跳轉入口,能夠承接跳轉的App的功能。 能夠手機訪問這個Demo頁面來體驗下 優點:對用戶而言,點擊進入不須要二次確認;自動檢測App安裝狀態,未安裝引導到App Store,已安裝則可直接打開App,並帶入預置在app-argument中的url值,讓App感知當前的頁面,能夠App中繼續行爲。 劣勢:最大的問題是跳轉操做不可經過程序控制,只能由用戶點擊觸發跳轉;另外一個產品經理不怎麼喜歡的是竟然還顯示評分星級,這是個頭疼的事情。bash

  3. Univeral Links 從iOS9開始,蘋果開放了一種新的App之間的跳轉方式,從使用體驗上來看,蘋果但願這種技術用於不打斷用戶的操做行爲爲前提,提供更好的App跳轉方式。舉例來講,正在訪問用戶正在訪問m.alibaba.com,那麼若是用戶已經安裝了Alibaba.com App那麼系統將自動引導到App,並將正在訪問的完整http連接提供到打開的App以提供在App上繼續以前行爲的能力。 這種技術帶來了完美的體驗,通俗點說,如今還能提供http的URL(固然須要https)直接打開App,並且沒有二次確認!固然也有些地方有待完善,這個下文會詳細提到。微信

三種技術各有優劣,組合使用可讓引流體驗變得很是好。下面會簡單介紹三種技術的部署方法和一些技巧。app

部署

Scheme方式跳轉

這種技術部署是須要App自己對scheme協議頭進行註冊的,並且這種註冊是屬於系統級別本地註冊關聯。dom

  1. 項目的Info.plist文件中,新增一個Key -> "URL Types"預置的Key輸入時有聯想。
  2. 新增完後會自動變成一個數組,展開查看第一個元素,將其中 "URL identifier" 置爲App的BundleID
  3. 而且平級新增一個Key -> "URL Schemes"預置Key有聯想。
  4. 新增完後自動變成數組,展開,在第一個元素中填入想要註冊的scheme協議頭便可,好比想要註冊 "enalibaba://",那麼只要輸入 "enalibaba" 便可。

這時App安裝後,協議頭即註冊生效,能夠經過瀏覽器地址欄中輸入該協議頭便可跳轉。ide

注意:由於是本地註冊,因此若是遇到某個其餘App也註冊這個協議頭那會發生什麼狀況呢?通過實踐測試結果發現,協議頭是本地搶注式,先被安裝的註冊的App擁有更高的優先權,當先裝的App被刪除時,第二註冊者會命中,以此後推。

App Smart Banner

這種方式是直接去中心化,去校驗,徹底自由的一種部署方式。

惟一須要作的只是在html頁面新增meta標籤便可

<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
複製代碼

使用iOS手機訪問這個地址 Demo頁面

Universal Links

這種方式更爲麻煩一些,由於至關於支持了http連接直接打開App,因此須要雙向授信才行。

網站端

  1. 建立一個名爲apple-app-site-association的JSON格式文件,防止在能夠被根目錄直接訪問到的地方。例如打算綁定m.alibaba.com那麼就須要https://m.alibaba.com/apple-app-site-association這個文件能夠正常訪問,mine/type 爲 json/text。
  2. 文件的內容格式以下
    {
         "applinks": {
             "apps": [],
             "details": [
                 {
                     "appID": "9JA89QQLNQ.com.apple.wwdc", //bundleid
                     "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"] //path 能夠通配符
                 },
                 { // 可配置多個域名和path匹配規則的綁定
                     "appID": "ABCD1234.com.apple.wwdc",
                     "paths": [ "*" ]
                 }
             ]
         }
     }
    複製代碼

App端

  1. 找到 Alibaba.entitlements 文件
  2. 在裏面 com.apple.developer.associated-domains 的數組下面添加一個item
  3. 值爲 applinks:m.alibaba.com 便可

固然App端能找到entitlements文件須要打開Capabilities中的Associated Domain能力,這須要開發者帳號項目才能開啓。

到這裏雙向綁定已作完,編譯項目到設備上,經過點擊在 備忘錄 中預置的匹配Universal Links連接,便可完美跳轉了。

爲何要放到備忘錄?不能直接瀏覽器地址欄打開嗎?答案是不行,還記得上面講過,蘋果但願的是不打斷用戶意圖的狀況下,因此在瀏覽器地址欄中直接輸入地址的行爲,蘋果認爲用戶有明顯意圖想要訪問http網頁,因此不會直接跳轉到App。固然程序也沒法控制,若是是JS程序跳轉某個UniversalLinks,那結果就是請求正常發出,並不會跳轉到App。

並且,並且,蘋果的初衷實際上是但願不一樣App之間能夠經過這種方式相互跳轉。 當初我親測微信跳轉Alibaba.com App完美跳轉。 後來,有一種很是規操做能夠阻擋這種跳轉,以致於現狀是幾乎全部App都禁用了UniversalLinks的外跳。 但我仍然有解決辦法,我會把UniversalLinks的運做原理和攻防技巧放在下一篇文章裏詳細描述。

豆知識

Scheme和Schema

其實正確的叫法應該叫Scheme[skim],而不是Schema['ski:mə],官方文檔在描述中也是一直使用Scheme。

從詞典上查看,這兩個詞的意思表達很是相近,都有計劃策劃的意思。

參考資料

Promoting Apps with Smart App Banners

Inter-App Communication

AppID查找工具

Support Universal Links

原文 - iOS App間相互跳轉漫談-UniversalLinks的極導致用]

相關文章
相關標籤/搜索