Universal Links 相關(guān)文檔
先上效果:
工作原理
1燎竖、App第一次啟動(dòng)時(shí)璃弄,或App更新后第一次啟動(dòng)時(shí),會(huì)通過Associated Domains里取的域名构回,通過GET請(qǐng)求訪問apple-app-site-association的文件
2夏块、訪問到到apple-app-site-association文件,統(tǒng)一注冊(cè)到系統(tǒng)
3纤掸、任意Webview(包括第三方應(yīng)用內(nèi)的Webview)發(fā)起跳轉(zhuǎn)(必須要跨域跳轉(zhuǎn))脐供,如果命中通過apple-app-site-association注冊(cè)的通用鏈接,就會(huì)找到AppID
4借跪、如果下載安裝過該App則會(huì)打開App 觸發(fā) Universal Link Delegate事件政己,如果沒安裝,則繼續(xù)跳轉(zhuǎn)url
應(yīng)用場景
1掏愁、微信?WechatOpenSDK_NoPay 1.8.6.1版本初始化需要配置universalLink
/*! @brief WXApi的成員函數(shù)歇由,向微信終端程序注冊(cè)第三方應(yīng)用。?
* 需要在每次啟動(dòng)第三方應(yīng)用程序時(shí)調(diào)用果港。
* @attention 請(qǐng)保證在主線程中調(diào)用此函數(shù)?
* @param appid 微信開發(fā)者ID
* @param universalLink 微信開發(fā)者Universal Link
* @return 成功返回YES沦泌,失敗返回NO。?
*/
+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;
2辛掠、類似淘寶谢谦、小紅書詳情自動(dòng)跳轉(zhuǎn)到原生App,若未安裝,可以顯示原鏈接內(nèi)容
開始配置
1他宛、配置developer.apple.com?后臺(tái) Certificates, Identifiers & Profiles 船侧,在Identifiers 中 找到對(duì)應(yīng)的 Identifiers,進(jìn)行配置
2厅各、在工程中镜撩,配置Domains,配置Domains队塘,需要?applinks: 開頭袁梗,結(jié)構(gòu)為:applinks:<domains>, 例如:applinks:www.baidu.com
3、服務(wù)端配置apple-app-site-association文件憔古,通過瀏覽器能夠直接訪問:https://<domains>/.well-known/apple-app-site-association 或者?https://<domains>/apple-app-site-association能夠直接訪問到配置文件
apple-app-site-association 模板:
{
?"applinks": {
?????"apps": [],
?????"details": [ {
?????????????"appID": "9JA89QQLNQ.com.apple.wwdc",? ? // TeamID.BoundleID
?????????????"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]? ? // 正則匹配URL域名后面的路徑
?????????}, {
?????????????"appID": "ABCD1234.com.apple.wwdc",
?????????????"paths": [ "*" ]
?????????} ]
?????}
}當(dāng)safri瀏覽器訪問https://<domains>/wwdc/news/ 或?https://<domains>/videos/wwdc/2015/xxx 時(shí)遮怜,會(huì)檢測iOS設(shè)備是否安裝?9JA89QQLNQ.com.apple.wwdc 這個(gè)App,如果安裝鸿市,則會(huì)跳轉(zhuǎn)到原生應(yīng)用锯梁,并保留safri頁面,如果未安裝焰情,則停留safri頁面陌凳,并打開當(dāng)前網(wǎng)頁。
當(dāng)有多個(gè)details時(shí)内舟,匹配規(guī)則從上到下一次匹配合敦,匹配到后就不再往下匹配
這個(gè)步驟坑比較多,且排查困難
坑1:運(yùn)維存放文件時(shí)验游,不能以json文件格式保存充岛。不需要加任何擴(kuò)展名
Don’t append?.json?to the?apple-app-site-association?filename.
坑2:通過瀏覽器返回時(shí),Response Headers的Content-Type設(shè)置為:text/html耕蝉,不能用text/plain崔梗。因?yàn)閠ext/plain返回的瀏覽器會(huì)當(dāng)作文本不作任何解析
坑3:必須要Https下才能正確訪問到,且文件必須在根目錄下才能訪問
最總目的是 https://<domains>/.well-known/apple-app-site-association 或 https://<domains>/apple-app-site-association 能訪問
目前我們的方案可以參考一下:
nginx 配置
? ? location /apple-app-site-association {
? ? ? ? charset UTF-8;
? ? ? ? default_type text/html;
? ? ? ? return 200?'{\"applinks\":{\"apps\":[],\"details\":[{\"appID\":\"appID.com.xxxx\",\"paths\":[\"*\", \"/*\"]}]}}'
????}
? ?
官方驗(yàn)證鏈接:蘋果官方測試鏈接
配置結(jié)果說明:
1赔硫、
Error no apps associated with url
配置異常炒俱,沒有訪問到apple-app-site-association的文件
2、
Error?no apps with domain entitlements
The entitlement data used to verify deep link dual authentication is from the current released version of your app. This data may take 48 hours to update.
48小時(shí)后生效
3爪膊、
配置成功的標(biāo)志