iOS 喚起APP之Universal Link(通用鏈接)

iOS 9之前宵呛,一直使用的是URL Schemes技術來從外部對App進行跳轉遍愿,但是iOS系統(tǒng)中進行URL Schemes跳轉的時候如果沒有安裝App,會提示Cannot open Page的提示净嘀,而且當注冊有多個scheme相同的時候狂魔,目前沒有辦法區(qū)分,但是從iOS 9起可以使用Universal Links技術進行跳轉頁面凌彬,這是一種體驗更加完美的解決方案

  • 什么是Universal Link(通用鏈接)
    Universal LinkAppleiOS 9推出的一種能夠方便的通過傳統(tǒng)HTTPS鏈接來啟動APP的功能沸柔。如果你的應用支持Universal Link,當用戶點擊一個鏈接時可以跳轉到你的網(wǎng)站并獲得無縫重定向到對應的APP铲敛,且不需要通過Safari瀏覽器褐澎。如果你的應用不支持的話,則會在Safari中打開該鏈接

  • 支持Universal Link(通用鏈接)
    先決條件:必須有一個支持HTTPS的域名伐蒋,并且擁有該域名下上傳到根目錄的權限(為了上傳Apple指定文件)

  • 集成步驟

  1. 開發(fā)者中心配置
    找到對應的App ID工三,在Application Services列表里有Associated Domains一條,把它變?yōu)?code>Enabled就可以了

    配置App ID支持Associated Domains

  2. 工程配置
    targets->Capabilites->Associated Domains先鱼,在其中的Domains中填入你想支持的域名俭正,必須以applinks:為前綴,如:applinks:domain

    配置項目中的Associated Domains

  3. 配置指定文件
    創(chuàng)建一個內(nèi)容為json格式的文件焙畔,蘋果將會在合適的時候掸读,從我們在項目中填入的域名請求這個文件。這個文件名必須為apple-app-site-association,切記沒有后綴名寺枉,文件內(nèi)容大概是這樣子:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

appID:組成方式是TeamID.BundleID抑淫。如上面的9JA89QQLNQ就是teamId。登陸開發(fā)者中心姥闪,在Account -> Membership里面可以找到Team ID
paths:設定你的app支持的路徑列表始苇,只有這些指定路徑的鏈接,才能被app所處理筐喳。*的寫法代表了可識別域名下所有鏈接

  • 注意:蘋果是根據(jù)域名下的paths處理要打開的應用的催式,所以要避免相同的paths對應多個appID
  1. 上傳該文件
    上傳該文件到你的域名所對應的根目錄或者.well-known目錄下,這是為了蘋果能獲取到你上傳的文件避归。上傳完后荣月,先訪問一下,看看是否能夠獲取到梳毙,當你在瀏覽器中輸入這個文件鏈接后哺窄,應該是直接下載apple-app-site-association文件

  2. 代碼中的相關支持
    當點擊某個鏈接,可以直接進我們的app账锹,但是我們的目的是要能夠獲取到用戶進來的鏈接萌业,根據(jù)鏈接來展示給用戶相應的內(nèi)容,我們需要在工程里實現(xiàn)AppDelegate對應的方法:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    // NSUserActivityTypeBrowsingWeb 由Universal Links喚醒的APP
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]){
        NSURL *webpageURL = userActivity.webpageURL;
        NSString *host = webpageURL.host;
        if ([host isEqualToString:@"api.r2games.com.cn"]){
            //進行我們的處理
            NSLog(@"TODO....");
        }else{
            NSLog(@"openurl");
            [[UIApplication sharedApplication] openURL:webpageURL options:nil completionHandler:nil];
            // [[UIApplication sharedApplication] openURL:webpageURL];
        }
    }
    return YES;
}

蘋果為了方便開發(fā)者奸柬,提供了一個網(wǎng)頁驗證我們編寫的這個apple-app-site-association是否合法有效生年,但是蘋果官方給的檢測接口不靠譜,可以把通用鏈接地址在瀏覽器或者記事本上填寫訪問廓奕,能拉起應用就是配置成功了抱婉,不能就說明配置有問題或者還沒有生效,一般配置完成最快要30分鐘后才能生效

  • 三方工具:校驗AASA文件有效性

  • 注意如果掛了代理桌粉,SSL的設置一定不要監(jiān)控蘋果的這個https://app-site-association.cdn-apple.com域名蒸绩,可能會導致訪問通用鏈接無效

  • Universal Link(通用鏈接)注意點

  1. Universal Link跨域
    Universal Link有跨域問題,Universal Link必須要求跨域铃肯,如果不跨域侵贵,就不會跳轉(iOS 9.2之后的改動)要求具備跨域能力即可
    假如當前網(wǎng)頁的域名是A,當前網(wǎng)頁發(fā)起跳轉的域名是B缘薛,必須要求BA是不同域名才會觸發(fā)Universal Link,如果BA是相同域名卡睦,只會繼續(xù)在當前WebView里面進行跳轉宴胧,哪怕你的Universal Link一切正常,根本不會打開App
  2. Universal Link請求apple-app-site-association時機
  • 當我們的App在設備上第一次運行時表锻,如果支持Associated Domains功能恕齐,那么iOS會自動去GET定義的Domain下的apple-app-site-association文件

  • iOS會先請求https://domain.com/.well-known/apple-app-site-association,如果此文件請求不到瞬逊,再去請求https://domain.com/apple-app-site-association显歧,所以如果想要避免服務器接收過多GET請求仪或,可以直接把apple-app-site-association放在./well-known目錄下

  • 服務器上apple-app-site-association的更新不會讓iOS本地的apple-app-site-association同步更新,即iOS只會在App第一次啟動時請求一次士骤,以后除非App更新或重新安裝范删,否則不會在每次打開時請求apple-app-site-association

  • Universal Link的好處

  1. 之前的Custom URL scheme是自定義的協(xié)議,因此在沒有安裝該app的情況下是無法直接打開的拷肌。而Universal Links本身就是一個能夠指向web頁面或者app內(nèi)容頁的標準web link到旦,因此能夠很好的兼容其他情況
  2. Universal links是從服務器上查詢是哪個app需要被打開,因此不存在Custom URL scheme那樣名字被搶占巨缘、沖突的情況
  3. Universal links支持從其他app中的UIWebView中跳轉到目標app
  4. 提供Universal link給別的app進行app間的交流時添忘,對方并不能夠用這個方法去檢測你的app是否被安裝(之前的custom scheme URLcanOpenURL方法可以)

附:[官方文檔] Support Universal Links
附:我的博客地址

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市若锁,隨后出現(xiàn)的幾起案子搁骑,更是在濱河造成了極大的恐慌,老刑警劉巖又固,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仲器,死亡現(xiàn)場離奇詭異,居然都是意外死亡口予,警方通過查閱死者的電腦和手機娄周,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沪停,“玉大人煤辨,你說我怎么就攤上這事∧菊牛” “怎么了众辨?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舷礼。 經(jīng)常有香客問我鹃彻,道長,這世上最難降的妖魔是什么妻献? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任蛛株,我火速辦了婚禮,結果婚禮上育拨,老公的妹妹穿的比我還像新娘谨履。我一直安慰自己,他們只是感情好熬丧,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布笋粟。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪害捕。 梳的紋絲不亂的頭發(fā)上绿淋,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音尝盼,去河邊找鬼吞滞。 笑死,一個胖子當著我的面吹牛东涡,可吹牛的內(nèi)容都是我干的冯吓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼疮跑,長吁一口氣:“原來是場噩夢啊……” “哼组贺!你這毒婦竟也來了?” 一聲冷哼從身側響起祖娘,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤失尖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渐苏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掀潮,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年琼富,在試婚紗的時候發(fā)現(xiàn)自己被綠了仪吧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞠眉,死狀恐怖薯鼠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情械蹋,我是刑警寧澤出皇,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站哗戈,受9級特大地震影響郊艘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唯咬,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一纱注、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胆胰,春花似錦奈附、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勉盅,卻和暖如春佑颇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背草娜。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工挑胸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宰闰。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓茬贵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親移袍。 傳聞我的和親對象是個殘疾皇子解藻,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容