公司最近做扫码跳转功能,其实有点类似淘宝粘贴链接后的跳转,原理其实是一样的,下面说一下我的处理。
因为iOS的原因,这边从第三方扫码里进入的话统一提示用户使用Safari打开,打开后自动提示是否跳转到“XXX APP”,在下方处理你点击链接后获取的内容。在这里,需要链接里有一个特殊的字符,你能判断这是你自己的链接后做的操作,否则会任意一个链接都会进入此方法。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{}
这种情况是APP已经开了一个进程在后台,于是要保证APP在任何界面下都能跳转到指定的页面,于是我们要在APPDelegate处理跳转,在这里做跳转主要就是要获取到当前可视的控制器,获取到当前的控制器后用push方法即可。如下代码所示:
获取到当前控制器
-(UIViewController *)currentViewController
{
UIViewController * currVC = nil;
UIViewController * Rootvc = self.window.rootViewController ;
do {
if ([Rootvc isKindOfClass:[UINavigationController class]]) {
UINavigationController * nav = (UINavigationController *)Rootvc;
UIViewController * v = [nav.viewControllers lastObject];
currVC = v;
Rootvc = v.presentedViewController;
continue;
}else if([Rootvc isKindOfClass:[UITabBarController class]]){
UITabBarController * tabVC = (UITabBarController *)Rootvc;
currVC = tabVC;
Rootvc = [tabVC.viewControllers objectAtIndex:tabVC.selectedIndex];
continue;
}else if ([Rootvc isKindOfClass:[XXXCustom class]]){
XXXCustom * tabVC = (XXXCustom *)Rootvc;
currVC = tabVC;
Rootvc = tabVC.selectedViewController;
continue;
}
} while (Rootvc!=nil);
return currVC;
}
用获取到的控制器再到openURL方法里,push控制器即可。
当然,大家在实际开发中的时候,有很多其他的判断条件,要考虑到是否登录,是否有权限等,所以开发结合实际情况在跳转前做自己的相应操作即可。
网友评论