今天來(lái)說(shuō)說(shuō)一個(gè)很實(shí)用的技術(shù),因?yàn)樵趯?shí)際開發(fā)中很多項(xiàng)目都是有多端的,不僅僅是移動(dòng)端,還會(huì)有網(wǎng)頁(yè)端等等,以及同一個(gè)公司有多個(gè)APP需要互相引流等等,那么這個(gè)時(shí)候就會(huì)出現(xiàn)H5頁(yè)面跳轉(zhuǎn)到APP,一個(gè)APP跳轉(zhuǎn)到另外一個(gè)APP的需求,比如下面的截圖就是在微信里面分享的簡(jiǎn)書鏈接,然后點(diǎn)擊“打開APP”就會(huì)跳轉(zhuǎn)到手機(jī)里下載的簡(jiǎn)書APP同樣的頁(yè)面,如下圖:


這里就使用到了一個(gè)叫URL Schemes的東西,那么下面我們就開始講一下怎么配置這個(gè)URL Schemes。

配置完之后,可以打開Safari進(jìn)行驗(yàn)證,在地址欄輸入上面配置好的URL Schemes,比如:iosbaiduzhidao://

輸入完成,點(diǎn)擊enter就會(huì)有下面的效果:

這個(gè)時(shí)候點(diǎn)擊打開就會(huì)打開APP,下面就需要在跳轉(zhuǎn)的目標(biāo)APP進(jìn)行相關(guān)的操作,會(huì)調(diào)用AppDelegate里面的:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
return YES;
}
當(dāng)通過(guò)URL Schemes打開APP時(shí),就會(huì)調(diào)用這個(gè)方法,并且將對(duì)應(yīng)的網(wǎng)址URL通過(guò)方法對(duì)應(yīng)的參數(shù)URL傳遞給APP。比如:輸入了一個(gè)網(wǎng)址iosbaiduzhidao://test/product/123,這時(shí)候在APP中就能取到product/123,然后知道了需要跳轉(zhuǎn)到Product頁(yè)面,id是123,效果如下:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
if ([url.scheme isEqualToString:@"iosbaiduzhidao"]){
DLog(@"scheme:%@\nhost:%@\nquery:%@",url.scheme,url.host,url.query);
}
return YES;
}
return YES;
}
獲取到了參數(shù),那么接下來(lái)要做的就是跳轉(zhuǎn)到指定的頁(yè)面了,比如這里就是跳轉(zhuǎn)到商品詳情,完整代碼如下:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
if ([url.scheme isEqualToString:@"iosbaiduzhidao"]){
DLog(@"scheme:%@\nhost:%@\nquery:%@",url.scheme,url.host,url.query);
//從H5打開指定頁(yè)面
NSString *goodsID = [self getParamByName:@"goodsId" URLString:url.absoluteString];
if (goodsID.length > 0) {
XMFGoodsDetailViewController *VCtrl = [[XMFGoodsDetailViewController alloc]initWithGoodsID:goodsID];
//具體根據(jù)項(xiàng)目使用的導(dǎo)航控制器
//獲取導(dǎo)航控制器
XMFBaseUseingTabarController *tabVC = (XMFBaseUseingTabarController *)self.window.rootViewController;
XMFBaseNavigationController *pushClassStance = (XMFBaseNavigationController *)tabVC.viewControllers[tabVC.selectedIndex];
// 跳轉(zhuǎn)到對(duì)應(yīng)的控制器
[pushClassStance pushViewController:VCtrl animated:YES];
}
return YES;
}else{
return YES;
}
}
通過(guò)這樣子就完整地實(shí)現(xiàn)了從H5打開指定APP跳轉(zhuǎn)到APP的指定頁(yè)面。
下面單獨(dú)說(shuō)一下從一個(gè)APP跳轉(zhuǎn)到指定APP的注意點(diǎn),除了上面的全部操作之外,還需要在這個(gè)APP里面(不是跳轉(zhuǎn)后的目標(biāo)APP)的info.plist配置一下白名單,如下圖:

同時(shí)在跳轉(zhuǎn)前的APP里面使用下面代碼實(shí)現(xiàn)跳轉(zhuǎn)到指定APP,如下:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"iosbaiduzhidao://test/product/123"]];
這樣之后,就完整實(shí)現(xiàn)了H5以及一個(gè)APP跳轉(zhuǎn)到指定APP的一個(gè)操作。
如果以上的方法幫助到你了,歡迎分享,更歡迎簡(jiǎn)書底部贊賞,也可以直接打開支付寶進(jìn)行打賞支持作者創(chuàng)作,感謝感謝!
支付寶賬號(hào):zouhuaping123@qq.com
歡迎和我交流,QQ和微信:834537795(小蜜蜂)