一沉颂、概述
1.1条摸、技術(shù)描述
官方的描述如下:
Seamlessly link to content inside your app, or on your website in iOS 9 or later. With universal links, you can always give users the most integrated mobile experience, even when your app isn’t installed on their device.
iOS9.0后開始支持,使用“通用鏈接”技術(shù)的App铸屉,支持點(diǎn)擊外部的url鏈接钉蒲,如果App有安裝,則直接打開App且可以直接到具體頁(yè)面彻坛;如果App未安裝顷啼,則會(huì)在Safari打開,并且提示按鈕昌屉,點(diǎn)擊可以跳轉(zhuǎn)AppStore下載地址頁(yè)钙蒙。
總的來說,其和Scheme技術(shù)相近间驮,都是允許外部喚起App的技術(shù)方案躬厌,都是DeepLink
的實(shí)現(xiàn)方式之一。
1.2竞帽、使用場(chǎng)景:
- 拉新:通過活動(dòng)鏈接分享到社交平臺(tái)扛施,新用戶點(diǎn)擊可以跳轉(zhuǎn)到App的下載介紹頁(yè)鸿捧,點(diǎn)擊下載可以直接到AppStore的下載頁(yè)進(jìn)行下載。
- 活動(dòng)溯源回流分析:活動(dòng)鏈接分享到社交平臺(tái)后疙渣,用戶點(diǎn)擊跳轉(zhuǎn)回App的具體頁(yè)面匙奴,這樣可以更準(zhǔn)確分析活動(dòng)效果,看有多少用戶點(diǎn)擊跳回昌阿。
- 廣告精準(zhǔn)投放:點(diǎn)擊廣告饥脑,可以直接拉起目標(biāo)App,提高廣告的轉(zhuǎn)化率懦冰。
1.3灶轰、對(duì)比UniversalLink ,Scheme存在的缺點(diǎn)
Scheme是以appShcema://url_path
打開app的方式刷钢,必須在xcode的URL Types
配置聲明笋颤,支持的Scheme前綴。
- Scheme無(wú)法判斷是否安裝App内地。如果已經(jīng)安裝則跳轉(zhuǎn)成功伴澄,未安裝打開失敗沒有效果。
- 任何App都可以用同一個(gè)名字阱缓,有些釣魚App如果暫用被安裝了非凌,可能被欺騙。
可以說UniversalLink解決Scheme上面兩個(gè)弊端荆针,提供更加流暢和安全的用戶體驗(yàn)肖卧。
二柑晒、UniversalLink大概配置(具體自行Search,網(wǎng)上教程很多)
環(huán)境要求:
后端服務(wù)器必須https,且擁有該域名下的上傳到根目錄的權(quán)限允乐;
只支持iOS9+的系統(tǒng)忘闻,舊系統(tǒng)只能走Schema贞间。開發(fā)者中心配置:針對(duì)具體的AppId進(jìn)行配置坝锰,在在Application Services里開啟Associated Domains。
XCode工程配置:在Associated Domains下配置
applinks:xxx域名xxx
今魔,必須以applinks:
開頭勺像。編寫
apple-app-site-association
配置文件,并且上傳到后端服務(wù)器根目錄下错森,文件格式如下咏删。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "開發(fā)者后臺(tái)的應(yīng)用id",
"paths": [ "/openapp/*"]
},
{
"appID": "開發(fā)者后臺(tái)的應(yīng)用id",
"paths": [ ""]
}
]
}
}
- 代碼處理UniversalLink,在以下方法中攔截處理url
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
- 校驗(yàn)UniversalLink是否配置成功问词,有以下兩種方法
- “備忘錄”應(yīng)用中督函,輸入U(xiǎn)niversalLinks,點(diǎn)擊彈窗“跳轉(zhuǎn)到某app”,則說明成功辰狡。
- 在Safari中打開锋叨,在出現(xiàn)的網(wǎng)頁(yè)上方下滑,可以看到有在”XX”應(yīng)用中打開宛篇。
三娃磺、UniversalLink的原理
1、當(dāng)App初次安裝后或者更新版本后的
第一次啟動(dòng)(第二次啟動(dòng)就不會(huì))
叫倍,向工程配置的applinks:
的域名請(qǐng)求apple-app-site-association
配置文件偷卧。2、App自動(dòng)的將
apple-app-site-association
配置文件向iOS系統(tǒng)配置吆倦。3听诸、當(dāng)任何WebView發(fā)起UniversalLink的url的時(shí)候,系統(tǒng)遍歷注冊(cè)過的通用鏈接蚕泽,如果命中則直接打開App觸發(fā)Delegate方法晌梨。
-
4、如果沒命中须妻,WebView繼續(xù)跳轉(zhuǎn)加載url仔蝌。
以上都是系統(tǒng)默默替你做的,我們要做的就是確保配置的正確性荒吏。
四敛惊、常見問題
4.1、UniversalLink的跨域要求:使用UniversalLink網(wǎng)頁(yè)的域名必須和UniversalLink的域名不同绰更。
a瞧挤、如果外部的網(wǎng)頁(yè)的域名A,在當(dāng)前網(wǎng)頁(yè)點(diǎn)擊發(fā)起UniversalLink的跳轉(zhuǎn)动知,這個(gè)UniversalLink的域名B皿伺。
b员辩、則必須要求 B 和 A 是不同域名盒粮,才會(huì)觸發(fā)Universal Link。
c奠滑、如果B 和 A 是相同域名丹皱,只會(huì)繼續(xù)在當(dāng)前WebView里面進(jìn)行跳轉(zhuǎn),即使你的Universal Link一切正常宋税,根本不會(huì)打開App摊崭。4.2、不同App配置相同一個(gè)UniversalLink域名
假設(shè)有App1杰赛、App2兩個(gè)不同的應(yīng)用呢簸,都需要配置UniversalLink,這個(gè)UniversalLink的域名可以相同,可以通過配置文件里面的path
進(jìn)行區(qū)分根时。-
4.3瘦赫、UniversalLink的更新時(shí)機(jī)問題
apple-app-association
只有在以下兩種情況下才會(huì)更新:
a、App安裝后的第一次Launch蛤迎。
b确虱、App版本更新后的第一次Launch。因此替裆,如果確實(shí)需要部署好幾個(gè)版本后修改
apple-app-association
的配置信息校辩,想要挽回又讓那部分用戶無(wú)感,則App必須重新打包發(fā)版辆童。 4.4宜咒、由于
apple-app-association
配置文件下載失敗問題
在開發(fā)過程中,遇到過測(cè)試手機(jī)昨天可以胸遇,今天就不行了荧呐,代碼沒有改過。這有可能測(cè)試手機(jī)連接抓包纸镊,代理等倍阐,導(dǎo)致安裝app后第一次啟動(dòng),apple-app-association
配置文件撈取不到逗威,導(dǎo)致無(wú)法跳轉(zhuǎn)峰搪。
這種情況下,重啟手機(jī)凯旭,并且重新安裝包概耻。
五、URL Schemes 使用概述
下面簡(jiǎn)單說說Schemes的配置方法罐呼;
5.1鞠柄、使用URL Scheme
跳轉(zhuǎn)到其他應(yīng)用
第一步、設(shè)置白名單
app的info.plist
文件中增加LSApplicationQueriesSchemes
字段類型為Array嫉柴,然后把第三方應(yīng)用的Schemes加入厌杜。例如微信weixin://
等等第二步、使用
openUrl
直接跳轉(zhuǎn)第三方计螺,調(diào)用之前確認(rèn)下是否可以跳轉(zhuǎn)夯尽。
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: customURL]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
} else {
....
}
5.2、自定義URL Scheme登馒,其他應(yīng)用跳轉(zhuǎn)到我們的app
第一步匙握、聲明自定義的Schemes
在App內(nèi)的info
->URL Ttpes
->新增自定義URL Schemes
。第二步陈轿、在ApplicationDelegate實(shí)現(xiàn)回調(diào)函數(shù)中
主要是區(qū)分不同的Schemes圈纺,判斷不同的回調(diào)來源秦忿,做不同的業(yè)務(wù)邏輯處理。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
第三步:測(cè)試
在Safari或者H5網(wǎng)頁(yè)中直接使用自定義的schemes打開蛾娶,就可以喚起我們app小渊。自定義Schemes的命名規(guī)則(沒有強(qiáng)制規(guī)定,業(yè)內(nèi)通用的做法如下)
一般普通字符串茫叭,可以包括點(diǎn)符號(hào)酬屉。例如com.xxx.pay://
或者wxpay://
等。
也可以像微信那樣揍愁,使用路徑區(qū)分業(yè)務(wù)呐萨。例如appKey://platform:wechat
、appKey://platform:oauth
六莽囤、其他谬擦、
市面有些第三方平臺(tái)提供的Link接入方案,其實(shí)也是利用利用UniversalLink和Scheme實(shí)現(xiàn)的朽缎,例如:UMeng的ULink功能惨远,友盟更多做好統(tǒng)計(jì)分析等業(yè)務(wù)場(chǎng)景。
微信對(duì)于Schemes和UniversalLink的使用
使用微信分享的sdk话肖,返回App的時(shí)候發(fā)現(xiàn)北秽,微信有時(shí)候使用Schemes而有時(shí)候使用UniversalLink。
微信的判斷策略是什么最筒?檢測(cè)是否支持Schemes或者UniversalLink贺氓?或者是有策略使用某一種?
這個(gè)不得而知床蜘,有知道的朋友幫忙解答下辙培,萬(wàn)分感謝。