2018-09-27

1、需求說(shuō)明

應(yīng)用間跳轉(zhuǎn):通過(guò)一個(gè)AppA內(nèi)的某一個(gè)操作打開(kāi)另外一個(gè)一個(gè)AppB,AppB若下載則直接跳轉(zhuǎn)過(guò)去,若未下載則跳到應(yīng)用商店讓用戶(hù)下載;

網(wǎng)頁(yè)跳轉(zhuǎn)App:手機(jī)打開(kāi)網(wǎng)頁(yè),通過(guò)網(wǎng)頁(yè)上的某一個(gè)操作打開(kāi)App,若已安裝App則跳轉(zhuǎn)App,若未安裝App則跳到應(yīng)用商店讓用戶(hù)下載;

2野哭、使用方法

應(yīng)用間跳轉(zhuǎn)可以通過(guò)URL Scheme來(lái)實(shí)現(xiàn),將參數(shù)配置在url scheme后面,喚醒a(bǔ)pp再進(jìn)行頁(yè)面跳轉(zhuǎn)邏輯;

需要特別說(shuō)明的微信和QQ分享內(nèi)容url scheme和Universal Links方式統(tǒng)統(tǒng)被禁用了,除非你是騰訊系的加入他們的白名單;

網(wǎng)頁(yè)跳轉(zhuǎn)App可以通過(guò)meta 標(biāo)簽來(lái)實(shí)現(xiàn);

下面我們對(duì)URL Scheme在塔、meta 標(biāo)簽、Universal Links一一進(jìn)行說(shuō)明.

方法一: URL Scheme

URL Scheme是什么

由于蘋(píng)果的app都是在沙盒中拨黔,相互是不能訪問(wèn)數(shù)據(jù)的蛔溃。但是蘋(píng)果還是給出了一個(gè)可以在app之間跳轉(zhuǎn)的方法:URL Scheme。簡(jiǎn)單的說(shuō)篱蝇,URL Scheme就是一個(gè)可以讓app相互之間可以跳轉(zhuǎn)的協(xié)議贺待。每個(gè)app的URL Scheme都是不一樣的,如果存在一樣的URL Scheme零截,那么系統(tǒng)就會(huì)響應(yīng)先安裝那個(gè)app的URL Scheme麸塞,因?yàn)楹蟀惭b的app的URL Scheme被覆蓋掉了,是不能被調(diào)用的涧衙。

URL Scheme有什么作用

那么app之間的跳轉(zhuǎn)有什么作用呢哪工?我們所使用的每一個(gè)app就相當(dāng)于一個(gè)功能,app的跳轉(zhuǎn)可以使得每個(gè)app就像一個(gè)功能組件一樣弧哎,幫助我們完成需要做的事情雁比,比如三方支付,搜索撤嫩,導(dǎo)航偎捎,分享等等

URL Scheme怎么使用

要跳轉(zhuǎn)到別人的app,就要知道別人的app的跳轉(zhuǎn)協(xié)議是什么序攘,需要傳入什么參數(shù)茴她,我們常見(jiàn)的跳轉(zhuǎn)協(xié)議有下面這些:

1.打開(kāi)email
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://info@icloud.com"]]
2.打開(kāi)電話
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"tel://18688886666"]];
3.打開(kāi)SMS
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"sms:18688886666"]];

所以,如果我們希望別人打開(kāi)我們的app程奠,只要在plist文件中配置一下你的跳轉(zhuǎn)協(xié)議即可丈牢,如下圖所示:


跳轉(zhuǎn)協(xié)議配置.jpg

“emp601602://”就是我的跳轉(zhuǎn)協(xié)議了,編譯一下app梦染,在safari中輸入“emp601602:// ”就可以跳轉(zhuǎn)到我的app中赡麦。

但是在Xcode 9 下,新建的工程帕识,在plist文件中注冊(cè)URL Schemes泛粹,是無(wú)法從safari啟動(dòng)app的。
需要在如下位置注冊(cè)URL Schemes肮疗,


添加URL Schemes.jpg

“emp601602:// ”只能讓用戶(hù)跳轉(zhuǎn)到我們的app晶姊,之后的處理是在appDelegate的代理中,代理方法如下:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation

在這個(gè)方法里伪货,可以獲取到觸發(fā)這個(gè)方法的 URL们衙,可以通過(guò)對(duì)這個(gè) URL 進(jìn)行判斷钾怔,例如根據(jù)不同的 Host,不同的 Query String 來(lái)執(zhí)行不同的動(dòng)作蒙挑。

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    NSLog(@"%@", [url absoluteString]);
    
    // 在 host 等于 item.taobao.com 時(shí)宗侦,說(shuō)明一個(gè)寶貝詳情的 url,
    // 那么就使用本地的 TBItemDetailViewController 來(lái)顯示
    if ([[url host] isEqualToString:@"item.taobao.com"]) {
        
        // 這里只是簡(jiǎn)單地假設(shè) url 形式為 taobao://item.taobao.com/item.htm?id=12345678
        // 先獲取要查看的寶貝詳情的 itemId
        NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3];
        
        // 使用本地 ViewController 來(lái)顯示淘寶商品詳情
        TBItemDetailViewController *controller = [[TBItemDetailViewController alloc] initWithItemId:itemId];
        [self.navigationController pushViewController:controller animated:YES];
    }
}

在你的動(dòng)作執(zhí)行完成了之后忆蚀,有可能時(shí)需要返回到原有app的矾利,這樣就需要你的app跳轉(zhuǎn)協(xié)議的url里面應(yīng)該能傳入調(diào)用者app的跳轉(zhuǎn)協(xié)議,這樣用戶(hù)跳轉(zhuǎn)到你的app完成動(dòng)作后就能跳轉(zhuǎn)回去了馋袜。

方法二 :meta標(biāo)簽

現(xiàn)需要添加URL Scheme為 WideSchooliphoneApp,同時(shí)添加已上線的app-id以便于跳轉(zhuǎn)AppStore

<!DOCTYPE html>  
<html>  
<head>  
    <title>IOS 通過(guò)瀏覽器打開(kāi)App(小闊學(xué)堂)</title>  
    <meta charset="UTF-8" name="apple-itunes-app" content="app-id=xxxxxxx, affiliate-data=myAffiliateData, app-argument=WideSchooliphoneApp://">     
</head>  
<body>  
    <div class="back">  
    <p>  
        <font size="20px">  
        實(shí)時(shí)互動(dòng)<br>  
        直播課堂<br>  
        <a href="WideSchooliphoneApp://courseId=1234" >打開(kāi)小闊學(xué)堂PP</a><br>  
        大數(shù)據(jù)分析<br>  
        </font>  
    </p>  
    </div>  
</body>  
</html>

點(diǎn)擊頁(yè)面上的打開(kāi)小闊學(xué)堂


網(wǎng)頁(yè)顯示.png

方法三 : Universal Links

什么是Universal Links

Universal Links就是一個(gè)通用鏈接男旗,iOS9以上的用戶(hù),可以通過(guò)點(diǎn)擊這個(gè)鏈接無(wú)縫的重定向到一個(gè)app應(yīng)用欣鳖,而不需要通過(guò)safari打開(kāi)跳轉(zhuǎn)察皇。
如果用戶(hù)沒(méi)有安裝這個(gè)app,則會(huì)在safari中打開(kāi)這個(gè)鏈接指向的網(wǎng)頁(yè)泽台。

如何支持Universal Links

按照蘋(píng)果官方文檔來(lái)說(shuō)什荣,支持通用鏈接非常簡(jiǎn)單喲,只需要三步:
1.創(chuàng)建一個(gè)名字叫做apple-app-site-association师痕,包含固定格式的json文件
2.將這個(gè)文件上傳到你的服務(wù)器溃睹,可以將這個(gè)文件放到服務(wù)器的根目錄下而账,也可以放到.well-known這個(gè)子目錄下胰坟。
3.配置app,然后在app里面添加代理方法
如果已經(jīng)配置過(guò)Universal Links泞辐,那么在用戶(hù)第一次安裝app時(shí)笔横,蘋(píng)果會(huì)發(fā)送一個(gè)請(qǐng)求,請(qǐng)求你服務(wù)器上的apple-app-site-association文件咐吼。

請(qǐng)求apple-app-site-association文件成功之后吹缔,用戶(hù)就可以使用Universal Links喚醒a(bǔ)pp了。

詳細(xì)的配置流程如下

(1) 關(guān)于apple-app-site-association文件的配置
"applinks": {
        "apps": [],
        "details": [
            {
                "appID": "C9ANJ7EAW8.com.codyy.iWideSchooliphone",
                "paths": ["/h5/course.html*"]
            }
        ]
    }
}

創(chuàng)建一個(gè)包含上述格式的json文件锯茄,文件名字必須為apple-app-site-association厢塘,不能帶后綴名,有的電腦設(shè)置的隱藏后綴名肌幽,這點(diǎn)需要注意晚碾。

appID

appID 的 格式為 teamID.bundleId形式。

如何獲取teamID

登錄開(kāi)發(fā)者網(wǎng)站 喂急,找到Membership選項(xiàng)卡格嘁。

1159656-469273e6ee19a927.png

譬如說(shuō)我的teamID是xxxxxxxxxxx,bundleId是com.mytest.app
那么我的appID就是:xxxxxxxxxxx.com.mytest.app

path路徑

paths配置廊移,實(shí)際上就是限制哪些路徑可以喚醒a(bǔ)pp糕簿,哪些路徑不能喚醒a(bǔ)pp探入。格式如下:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/", "/videos/wwdc/201?/"]
使用*配置,則整個(gè)網(wǎng)站都可以使用

使用特定的URL,例如/wwdc/news/來(lái)指定某一個(gè)特殊的鏈接

在特定URL后面添加跟衅,例如 /videos/wwdc/2015/, 來(lái)指定網(wǎng)站的某一部分

除了使用來(lái)匹配任意字符闷畸,你也可以使用 ?來(lái)匹配單個(gè)字符,你可以在路徑當(dāng)中結(jié)合這兩個(gè)字符使用徒爹,例如 /foo//bar/201?/mypage

需要注意的是:配置的paths路徑,是區(qū)分大小寫(xiě)的

驗(yàn)證apple-app-site-association文件
文件配置完成之后芋类,將其上傳到你的服務(wù)器根目錄或者`.well-known`這個(gè)子目錄下隆嗅。
  • 確保使用https://yourdomain.com/apple-app-site-association這個(gè)鏈接可以訪問(wèn)到,yourdomain.com為你的服務(wù)器域名侯繁。
  • 也可以使用蘋(píng)果的驗(yàn)證網(wǎng)站胖喳,驗(yàn)證文件是否能被蘋(píng)果請(qǐng)求到。如果是未上線的應(yīng)用贮竟,使用驗(yàn)證網(wǎng)站時(shí)可能出現(xiàn)如下提示:
WX20180927-133604.png
  • 出現(xiàn)該提示為apple-app-site-association文件配置正確丽焊。
  • 出現(xiàn)404錯(cuò)誤碼提示,則為apple-app-site-association文件未上傳成功咕别,或者使用https://yourdomain.com/apple-app-site-association路徑無(wú)法訪問(wèn)技健。
(2) 建立web網(wǎng)頁(yè)和app應(yīng)用之間的關(guān)聯(lián) -> app IDs 配置 和 項(xiàng)目配置
app IDs 配置

進(jìn)入開(kāi)發(fā)者網(wǎng)站,找到你自己的bundleId惰拱,可以點(diǎn)擊edit按鈕雌贱,開(kāi)啟associate domains,如下圖:

associated domains.png

項(xiàng)目配置:

在項(xiàng)目的Capablities中開(kāi)啟Associated domains偿短,如下圖:


appLinks.png

注意domains可以添加多個(gè)欣孤,前綴必須為applinks:,applinks:后為你的服務(wù)器的域名昔逗。

代碼接收Universal Links喚醒

在appdelegate中實(shí)現(xiàn)上面這個(gè)方法降传,當(dāng)使用Universal Links喚醒a(bǔ)pp時(shí)就執(zhí)行這個(gè)方法。

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    NSLog(@"userActivity : %@",userActivity.webpageURL.description);
    return YES;
}
(3)驗(yàn)證以上配置
快捷驗(yàn)證勾怒,在備忘錄中輸入https://yourdomain.com/apple-app-site-association婆排,長(zhǎng)按這個(gè)鏈接,出現(xiàn)下圖提示則配置成功
IMG_0100.png

目前知曉的就是以上三種方法,其中的坑還需要一個(gè)個(gè)踩踩.
參考文章:
iOS9 Universal Links踩坑之旅笔链,移動(dòng)應(yīng)用之deeplink喚醒a(bǔ)pp

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末段只,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卡乾,更是在濱河造成了極大的恐慌翼悴,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鹦赎,居然都是意外死亡谍椅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)古话,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雏吭,“玉大人,你說(shuō)我怎么就攤上這事陪踩≌让牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵肩狂,是天一觀的道長(zhǎng)摘完。 經(jīng)常有香客問(wèn)我,道長(zhǎng)傻谁,這世上最難降的妖魔是什么孝治? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮审磁,結(jié)果婚禮上谈飒,老公的妹妹穿的比我還像新娘。我一直安慰自己态蒂,他們只是感情好杭措,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著钾恢,像睡著了一般手素。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赘那,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天刑桑,我揣著相機(jī)與錄音,去河邊找鬼募舟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闻察,可吹牛的內(nèi)容都是我干的拱礁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辕漂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呢灶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钉嘹,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸯乃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后跋涣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體缨睡,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸟悴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奖年。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片细诸。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陋守,靈堂內(nèi)的尸體忽然破棺而出震贵,到底是詐尸還是另有隱情,我是刑警寧澤水评,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布猩系,位于F島的核電站,受9級(jí)特大地震影響中燥,放射性物質(zhì)發(fā)生泄漏蝙眶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一褪那、第九天 我趴在偏房一處隱蔽的房頂上張望幽纷。 院中可真熱鬧,春花似錦博敬、人聲如沸友浸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)收恢。三九已至,卻和暖如春祭往,著一層夾襖步出監(jiān)牢的瞬間伦意,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工硼补, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驮肉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓已骇,卻偏偏與公主長(zhǎng)得像离钝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褪储,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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