iOS Universal Links踩坑之旅

20191031關(guān)于Universal Links appID的取值說(shuō)明岗喉,見(jiàn)下面文章內(nèi)容


自從微信7.0.5版本放開(kāi) Universal Links之后脐恩,就把這種無(wú)縫喚醒App的方式提上日程了(主要是遇到每一個(gè)測(cè)試都要解釋一下schemes的缺點(diǎn)蛋勺,太煩了)。通過(guò)鏈接跳轉(zhuǎn)到App應(yīng)用內(nèi)部頁(yè)面撤卢,目前iOS主流的方案有兩個(gè):

  1. URL Schemes
  2. Universal Links

需求

如果手機(jī)中有安裝App則跳轉(zhuǎn)到App內(nèi)部頁(yè)面悄窃,沒(méi)有安裝App的話,則應(yīng)跳轉(zhuǎn)到App Store下載頁(yè)面或指定頁(yè)面女仰。

URL Schemes

URL Schemes是iOS9之前比較主流的一種跳轉(zhuǎn)方案了猜年,更多的是用在了兩個(gè)App相互跳轉(zhuǎn)中。也可以在Safari中輸入Schemes://跳轉(zhuǎn)到App內(nèi)部疾忍。 例如weixin://乔外。

但是這種方式很不順滑,在每次跳轉(zhuǎn)的時(shí)候都會(huì)彈框詢問(wèn)一罩。如果iPhone中如果沒(méi)有安裝則會(huì)直接彈出錯(cuò)誤提示(這也是每次測(cè)試說(shuō)這個(gè)是缺陷的時(shí)候我要解釋N遍的苦惱)杨幼,而且微信也封了這種跳轉(zhuǎn),現(xiàn)在微信放開(kāi)Universal Links就趕緊開(kāi)干。

Universal Links

如果英文棒棒噠的話建議直接看官方文檔 Support Universal Links

Universal Links(通用鏈接)是iOS9.0出的新技術(shù)差购。如果我們的應(yīng)用支持通用鏈接四瘫,那么我們就可以無(wú)縫的鏈接到App內(nèi)部,流暢的跳轉(zhuǎn)體驗(yàn)欲逃,簡(jiǎn)易的接入方式找蜜,同時(shí)又解決H5Native間的無(wú)縫切換;對(duì)于應(yīng)用層面稳析,站外引流效率提高(手機(jī)中沒(méi)有安裝此App)洗做,轉(zhuǎn)化率提高等等。
從iOS 9.2開(kāi)始彰居,在相同的domain內(nèi)Universal Links是不work的诚纸,必須要 跨域 才生效,實(shí)測(cè)值需要跨子域名即可裕菠,比如 m.domain.com 跳轉(zhuǎn) o.domain.com 是可以觸發(fā)跳轉(zhuǎn)App咬清。

使用條件
1.有一個(gè)注冊(cè)的域名。
2.支持https請(qǐng)求奴潘,并且CA證書(shū)是有效的
3.能夠上傳文件到自己的域名(一個(gè)名為apple-app-site-association的json格式文件)
4.Xcode7, iOS 9以上旧烧,并且在Xcode項(xiàng)目中做好適配
1.準(zhǔn)備接入工作
  • 首先是將項(xiàng)目中CapabilitiesAssociated Domains打開(kāi),并填上你的域名画髓,前綴是applinks掘剪。如果你的域名是mywebsite.com,則填上applinks:mywebsite.com(如圖1)奈虾。
    App會(huì)在第一次啟動(dòng)的時(shí)候通過(guò)填寫的域名來(lái)下載apple-app-site-association文件夺谁,該文件會(huì)在接下來(lái)說(shuō)明。

    圖1

  • 配置后會(huì)發(fā)現(xiàn)項(xiàng)目中多了一個(gè)APPNAME.entitlements文件(如圖2)

    圖2

  • 然后去開(kāi)發(fā)者中心當(dāng)前證書(shū)下打開(kāi)Associated Domains開(kāi)關(guān)肉微,并更新一下證書(shū)

    圖3

  • 同時(shí)把Team ID記錄下來(lái)匾鸥,下面會(huì)用到

    圖4

2.創(chuàng)建apple-app-site-association文件

創(chuàng)建一個(gè)apple-app-site-association文件(注意是沒(méi)有后綴的),其內(nèi)容是json格式碉纳,官方示例如下

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}
特別需要注意:(這個(gè)坑搞了我好幾天勿负,最后發(fā)現(xiàn)還是官方文檔靠譜)

The value of the appID key is the team ID or app ID prefix, followed by the bundle ID. (The appID value is the same value that’s associated with the “application-identifier” key in your app’s entitlements after you build it.)

appID 的 格式為 teamID.bundleId或者app ID prefix.bundleId形式,切記不要搞錯(cuò)@筒堋奴愉!很多文檔只是說(shuō)teamID,但是官方文檔是說(shuō)team ID or app ID prefix铁孵,不知道用哪個(gè)的時(shí)候你可以把你編譯之后的包解壓看看embedded.mobileprovision文件里面的application-identifier值是什么就用什么锭硼。
比如說(shuō)我的teamID9JA89QQLNQbundleIdcom.apple.wwdc那么我的appID就是:9JA89QQLNQ.com.apple.wwdc

paths的配置蜕劝,實(shí)際上就是限制哪些路徑可以喚醒App檀头,哪些路徑不能喚醒App轰异,其中 * 表示任意路徑

3.上傳apple-app-site-association文件

apple-app-site-association文件保存的位置

4.檢查配置文件是否正常

1.使用瀏覽器打開(kāi)我們上傳的文件路徑,應(yīng)該可以直接看到剛剛上傳的json文件期升。
https://mywebsite.com/apple-app-site-association
或者
https://mywebsite.com/.well-knowna/apple-app-site-association

坑1:注意:這里在瀏覽器打開(kāi)應(yīng)該是可以看到j(luò)son格式的文件內(nèi)容惊奇,在這里被坑好久,如果不是播赁,則要修改此文件服務(wù)器的返回格式 修改nginx返回json或者文本格式詳解

2.蘋果也提供了一個(gè)官方網(wǎng)頁(yè)供我們開(kāi)發(fā)者來(lái)驗(yàn)證自己的網(wǎng)頁(yè)配置是否有效颂郎。
驗(yàn)證地址:App Search API Validation Tool

3.終極辦法-使用Charles進(jìn)行抓包查看有沒(méi)有下載

5.如果第四步?jīng)]問(wèn)題就可以編譯App來(lái)檢查

坑2:clean一下Xcode再跑,不然有時(shí)候Xcode抽風(fēng)了你還以為是服務(wù)器配置錯(cuò)了
坑3:如果你配的是applinks:www.mywebsite.com則要用這個(gè)鏈接喚醒:https://www.mywebsite.com/.well-knowna/apple-app-site-association容为;
如果你配的是applinsk:mywebsite.com則要用這個(gè)鏈接喚醒:https://mywebsite.com/.well-knowna/apple-app-site-association乓序,切記切記!

在備忘錄輸入你配的對(duì)應(yīng)域名坎背,點(diǎn)擊可直接跳轉(zhuǎn)到App替劈,長(zhǎng)按會(huì)顯示(在“AppName”中打開(kāi))。


圖5

這樣就成功啦得滤!

問(wèn)題匯總:

  • 備忘錄和safari中都可以打開(kāi)app陨献,怎么分享到其他app里面就不行了?

    未跨域?qū)е碌亩纾悍窒淼轿⑿诺逆溄邮?https://www.mydomain.com/share.html眨业,然后該網(wǎng)頁(yè)中的“在app內(nèi)打開(kāi)”按鈕配置的通用鏈接為 https://www.mydomain.com/index.html
    跨域的意思是說(shuō)沮协,通用鏈接 和 調(diào)用通用鏈接的網(wǎng)頁(yè)不要使用同一域名龄捡。
    即如果通用鏈接域名為“www.mydomain.com”,則通用鏈接所處的網(wǎng)頁(yè)域名就不能是“www.mydomain.com”慷暂。

  • 在項(xiàng)目的 AppDelegate 里實(shí)現(xiàn)回調(diào)方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
{
    if ([userActivity.activityType   isEqualToString:NSUserActivityTypeBrowsingWeb]) {

      NSURL *webpageURL = userActivity.webpageURL;
      NSString *host = webpageURL.host;

      if ([host isEqualToString:@"xxxx.com"]) { 
        // 解析路徑聘殖、跳轉(zhuǎn)到指定界面 and so on...
    }
    else {
      [[UIApplication sharedApplication]openURL:webpageURL];
    }
  }
  return YES;
}

擴(kuò)展閱讀:
Universal Link(iOS)踩坑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呜呐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悍募,老刑警劉巖蘑辑,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坠宴,居然都是意外死亡洋魂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)副砍,“玉大人衔肢,你說(shuō)我怎么就攤上這事』眙幔” “怎么了角骤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)心剥。 經(jīng)常有香客問(wèn)我邦尊,道長(zhǎng),這世上最難降的妖魔是什么优烧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任蝉揍,我火速辦了婚禮,結(jié)果婚禮上畦娄,老公的妹妹穿的比我還像新娘又沾。我一直安慰自己,他們只是感情好熙卡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布杖刷。 她就那樣靜靜地躺著,像睡著了一般再膳。 火紅的嫁衣襯著肌膚如雪挺勿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天喂柒,我揣著相機(jī)與錄音不瓶,去河邊找鬼。 笑死灾杰,一個(gè)胖子當(dāng)著我的面吹牛蚊丐,可吹牛的內(nèi)容都是我干的圣勒。 我是一名探鬼主播檀葛,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼攀圈!你這毒婦竟也來(lái)了昭娩?” 一聲冷哼從身側(cè)響起凛篙,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栏渺,沒(méi)想到半個(gè)月后呛梆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磕诊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年填物,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纹腌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滞磺,死狀恐怖升薯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情击困,我是刑警寧澤涎劈,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站沛励,受9級(jí)特大地震影響责语,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜目派,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一坤候、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧企蹭,春花似錦白筹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至送漠,卻和暖如春顽照,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闽寡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工代兵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷狈。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓植影,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涎永。 傳聞我的和親對(duì)象是個(gè)殘疾皇子思币,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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