本文主要內(nèi)容參考此文章,主要是為了記錄
產(chǎn)品需求
用戶從qq/微信分享出去的H5頁(yè)面滞诺,當(dāng)點(diǎn)擊H5頁(yè)面的某個(gè)按鈕時(shí)飘哨,要實(shí)現(xiàn)如下功能:
1.當(dāng)用戶未安裝App時(shí)扫茅,跳轉(zhuǎn)到AppStore頁(yè)面引導(dǎo)用戶下載
2.當(dāng)用戶已安裝App時(shí),喚醒App并跳轉(zhuǎn)到App里面的某一個(gè)指定頁(yè)面
傳統(tǒng)的url schema實(shí)現(xiàn)方式存在兩個(gè)弊端逗嫡,一是跳轉(zhuǎn)的時(shí)候會(huì)有一個(gè)提示框:“是否打開(kāi)XXX”青自,用戶體驗(yàn)不好,二是微信屏蔽了URL Scheme驱证,必須是在微信的白名單里面才可跳轉(zhuǎn)延窜,也就意味著用戶在微信里面是無(wú)法一鍵直達(dá)App的。這對(duì)于大多數(shù)公司來(lái)講抹锄,是難以承受的逆瑞。而通用鏈接Universal Link正是可以解決上述問(wèn)題的技術(shù)手段。
通用鏈接介紹及優(yōu)點(diǎn)
通用鏈接具體實(shí)施步驟
這里可以分兩種實(shí)現(xiàn)方式伙单,第一種是自己去配置通用鏈接获高,第二種是通過(guò)一些第三方SDK來(lái)實(shí)現(xiàn)此功能。
①自己配置通用鏈接
iOS的UniversalLink開(kāi)發(fā)總結(jié) 不建議問(wèn)題太多
②用第三方SDK去集成配置(魔窗吻育,LinkedME等)
下面以魔窗為例念秧,講解如何配置。魔窗iOS集成文檔
用魔窗的話iOS端只需要做三部分操作布疼,分別是魔窗后臺(tái)配置部分摊趾,Xcode配置部分,代碼實(shí)現(xiàn)部分缎除。下面將詳細(xì)描述步驟严就。
魔窗后臺(tái)配置部分
①注冊(cè)一個(gè)魔窗賬號(hào) 魔窗注冊(cè)
②賬號(hào)注冊(cè)完畢后,登錄魔窗點(diǎn)擊右上角新增產(chǎn)品然后選擇App器罐。
③要填寫(xiě)的信息分為三部分梢为,分別是產(chǎn)品信息,App信息轰坊,魔窗位信息铸董。魔窗位信息可以不填。
④想要使用深度鏈接肴沫,還需要配置魔窗的mlink服務(wù)粟害,如下圖
至此,魔窗的所有配置均已做完颤芬。
小結(jié):魔窗的配置是為了獲得五個(gè)關(guān)鍵參數(shù)悲幅,以供后面配置使用套鹅。分別是URL Scheme,魔窗App key汰具,魔窗mLink key 魔窗域名 魔窗短連接卓鹿。
Xcode配置部分
Xcode這邊配置非常容易,就兩步即可留荔。
①配置URL Scheme 這里的identifier可填可不填沒(méi)影響吟孙,URL Schemes這里填在魔窗后臺(tái)配置時(shí),你寫(xiě)的URL Scheme聚蝶,魔窗跟Xcode這里二者必須保持一致
②applinks配置 這里的Domains一定要填你之前在魔窗配置后獲得的那個(gè)魔窗域名杰妓,這里要保證不能出差錯(cuò),否則無(wú)法完成跳轉(zhuǎn)
Xcode的配置到這里就完成了碘勉。
代碼實(shí)現(xiàn)部分
①集成魔窗sdk巷挥,手動(dòng)和cocopods兩種方式,手動(dòng)請(qǐng)參考魔窗文檔验靡,下面只講cocopods集成
pod 'MagicWindowSDK'
pod install
記住不要pod update句各,因?yàn)槟Т皊dk自己集成了微信分享,非常容易跟shareSDK 友盟分享SDK沖突晴叨。
②Appdelegate中實(shí)現(xiàn)注冊(cè)魔窗
//引入魔窗的SDK頭文件
#import "MWApi.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[MWApi registerMLinkDefaultHandler:^(NSURL * _Nonnull url, NSDictionary * _Nullable params) {
NSLog(@"%@",params);
[self jumpToControllerWith:params];
}];
[MWApi registerMLinkHandlerWithKey:@"iOSXZNSGoddessZhunleKey" handler:^(NSURL *url, NSDictionary *params) {
//自行處理跳轉(zhuǎn)邏輯凿宾,示例如下:
NSLog(@"%@",params);
[self jumpToControllerWith:params];
}];
}
- (void)jumpToControllerWith:(NSDictionary *)userInfoDic {
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];//首先獲取當(dāng)前所在的控制器
if ([[userInfoDic objectForKey:@"xxx"] isEqualToString:@"xxx"]) {
//根據(jù)需求可以在這里判斷頁(yè)面的跳轉(zhuǎn)
} else {
//根據(jù)需求可以在這里判斷頁(yè)面的跳轉(zhuǎn)
}
}
- (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC {
UIViewController *currentVC;
if ([rootVC presentedViewController]) {
// 視圖是被presented出來(lái)的
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// 根視圖為UITabBarController
currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// 根視圖為UINavigationController
currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
} else {
// 根視圖為非導(dǎo)航類(lèi)
currentVC = rootVC;
}
return currentVC;
}