源码+视频解析地址:https://download.csdn.net/download/weixin_38716347/43090784
效果:
在开发过程中一般会从自己的App跳去另外一个App然后再跳回来的。
下面具例子新建两个工程AppA和AppB
步骤:1 填写白名单,用于在别的App跳回来的。
也可以在info.plist里面设置也是可以,两个地方随便你选择一个地方:
也可以吧info.plist的数组形式转换成代码形式来去设置
CFBundleURLTypes
CFBundleTypeRole
Editor
CFBundleURLSchemes
AppA
LSApplicationQueriesSchemes
AppB
然后再新建一个AppB用同样的方式来设置好它,然后接下来就是相互之前的跳转代码。
AppA跳过去的代码:
//跳转到AppB
-(void)buttonOneClick:(UIButton *)btn {
NSString *UrlStr = @"AppB://";
NSURL *url = [NSURL URLWithString:UrlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:nil completionHandler:nil];
}else{
//未安装软件
}
}
//跳转到App指定页面
- (void)buttonTwoClick:(UIButton *)btn {
NSString *UrlStr = @"AppB://ok";
NSURL *url = [NSURL URLWithString:UrlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:nil completionHandler:nil];
}else{
//未安装软件
}
}
//跳转到AppB获取URL的参数
-(void)buttonThreeClick:(UIButton *)btn {
NSString *UrlStr = @"AppB://ok?name:a&age:12";
NSURL *url = [NSURL URLWithString:UrlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:nil completionHandler:nil];
}else{
//未安装软件
}
}
在AppB的AppDelegate里面接收需要写的代码。
//如果是通过URL打开的本应用,则下面的方法会被执行 (用于跳转App的指定页面)
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
//1.获取请求的URL地址
NSString *urlString = [url absoluteString];
//2.判断地址中包含的信息为bbb则打开第二个页面
if ([urlString hasPrefix:@"AppB://ok"])
{
//获取window中加载的根视图,也就是那个导航
UINavigationController *navi = (UINavigationController *)self.window.rootViewController;
//为了触发push第二个界面的segue,需要拿到
//左边灰色背景的那个控制器的引用
//而灰色的那个控制器是navi的根视图控制器
ViewController *vc = (ViewController *)navi.topViewController;
[vc.navigationController pushViewController:[[BViewController alloc] init] animated:YES];
}
return YES;
}
// iOS9新版API
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
self.url = url;
//1.获取请求的URL地址
NSString *urlString = [url absoluteString];
//2.判断地址中包含的信息为bbb则打开第二个页面
if ([urlString hasPrefix:@"AppB://ok"])
{
//获取window中加载的根视图,也就是那个导航
UINavigationController *navi = (UINavigationController *)self.window.rootViewController;
//为了触发push第二个界面的segue,需要拿到
//左边灰色背景的那个控制器的引用
//而灰色的那个控制器是navi的根视图控制器
ViewController *vc = (ViewController *)navi.topViewController;
[vc.navigationController pushViewController:[[BViewController alloc] init] animated:YES];
}
return YES;
}
// 建议使用这个来适配iOS9以下系统
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
{
self.url = url;
return YES;
}
如何获取App传过来的参数呢?这个我好想没有写成功。但是代码是很值得参考的深究一下就可以,因为没有用到这样的需求就不研究了。
//获取AppA传过来的参数a
- (void)getAppAData{
NSURL * urling = ((AppDelegate *)[UIApplication sharedApplication].delegate).url;
if(urling){
//显示一下从A获取的url,url = weixin://timelineage,host = timeline
NSString *rsult = [NSString stringWithFormat:@"url = %@,host = %@",[urling absoluteString],[urling host]];
NSLog(@"获取结果 - %@",rsult);
//根据传过来的url的host进行一些 *** 作
if ([[urling host]isEqualToString:@"ok"]) {
//跳转到第二个界面.或者根据其他 *** 作
NSLog(@"成功获取参数");
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)