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è):
URL Schemes
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í)又解決H5
和Native
間的無(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)目中
Capabilities
中Associated 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ō)明。
-
配置后會(huì)發(fā)現(xiàn)項(xiàng)目中多了一個(gè)
APPNAME.entitlements
文件(如圖2)
-
然后去開(kāi)發(fā)者中心當(dāng)前證書(shū)下打開(kāi)
Associated Domains
開(kāi)關(guān)肉微,并更新一下證書(shū)
-
同時(shí)把
Team ID
記錄下來(lái)匾鸥,下面會(huì)用到
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ō)我的teamID
是9JA89QQLNQ
,bundleId
是com.apple.wwdc
那么我的appID
就是:9JA89QQLNQ.com.apple.wwdc
paths
的配置蜕劝,實(shí)際上就是限制哪些路徑可以喚醒App
檀头,哪些路徑不能喚醒App
轰异,其中 *
表示任意路徑
3.上傳apple-app-site-association
文件
apple-app-site-association
文件保存的位置
- 根目錄下 etc.https://mywebsite.com/apple-app-site-association
-
.well-known
文件夾下(推薦,蘋果在iOS9.3
更改了通用鏈接的請(qǐng)求文件的位置鳖擒,但是仍然支持上面的路徑)溉浙。在根目錄新建.well-known
文件夾(不要忘記前面的.
)。etc.https://mywebsite.com/.well-known.apple-app-site-association(我直接放在這里蒋荚,第一個(gè)就沒(méi)有放了戳稽,簡(jiǎn)單粗暴)
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))。
這樣就成功啦得滤!
問(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)踩坑