iOS app之间相互跳转UIWebView里面跳转到其它app

第一:什么是URL Scheme
与Android的URL Scheme类似,是为方便app之间互相调用而设计的。你可以通过一个类似URL的链接,通过系统的OpenURl来打开该app,并可以传递一些参数。每个URL必须能唯一标识一个APP,如果你设置的URL与别的APP的URL冲突,此时,你的APP不一定会被调用起来,原因是当APP在安装的时候就已经在系统里面注册了此APP的URL Scheme,如果你的一致但是是后安装的,那么系统不会调用你的APP,因为你的APP设置的URL scheme被覆盖了。

当然系统的APP的URL Scheme是优先级高的,不用想着能覆盖系统APP的URL Scheme的注册调用。

第二:URL Scheme有什么作用:

大家知道在IOS系统里面APP之间是相互隔离的,不像Android,每个组件都可以作为一个独立的功能被其他APP调用,但是,IOS系统里面也需要完成类似于三方功能如支付、搜索跳转、导航等等跨APP的功能,怎么实现呢,苹果就使用了URL Scheme来实现了这个功能。通过各个APP设计的符合苹果的统一规范的URL Scheme,系统就会自动去调用相关的APP来完成你的请求。

比如:我们的APP需要使用支付宝的三方支付功能、我的APP需要使用微信分享好的文章,那么此时就可以通过URL Scheme来传递这些数据到支付宝APP或者微信APP,系统会通过这些APP的URL Scheme来调起这些APP,完成你所需要做的跨APP的功能。

第三:怎么使用呢?

例如 A 要跳转到B
3.1首先要在B 工程 中设置URL Schemes ;如下:


iOS app之间相互跳转UIWebView里面跳转到其它app_第1张图片
image.png

3.2 在A工程中添加白名单


iOS app之间相互跳转UIWebView里面跳转到其它app_第2张图片
image.png

3.3 在 A工程中我们添加二个按钮一个按钮是通过app canOpenURL方法直接跳转,第二个按钮是push到另个控制器然后加载UIWebView,在webview中加载打开;如下图:


iOS app之间相互跳转UIWebView里面跳转到其它app_第3张图片
image.png
//app直接调用canOpenURL 调起
- (IBAction)openOtherAPP:(UIButton *)sender {
    NSString *url = [NSString stringWithFormat:@"zenjoyclient://?name=jack&token=appAESBLKIJOPOI12LK"];
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:url]]) {
        //后跟的是参数
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
    }
    
}

//push 另一个控制器加载webview 调起
- (IBAction)webViewGoto:(id)sender {
    
    WebViewController *vc=[[WebViewController alloc]init];
    
    [self.navigationController pushViewController:vc animated:YES];
}


3.4 WebViewController.m 实现


iOS app之间相互跳转UIWebView里面跳转到其它app_第4张图片
image.png

4 B 工程中接收传过来的值代码如下:
在 AppDelegate.m 中实现方法

#pragma mark ====     app跳转    =======
 //For iOS 4.1 and earlier 
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    NSString *info=url.host;
    LOG(@"app跳转info==%@",info);
//不推荐使用此方法接收参数,本人发现在iOS 9.3.3版本有取不到值情况
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"app跳转" message:info delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [alert show];
    return YES;
}

/* For iOS 4.2 and later */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url

  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    // Handle url request.  推荐使用此方法
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"app跳转" message:[url absoluteString] delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [alert show];
    return YES;
    
}

1.gif

上图 是我使用application handleOpenURL:方法无法接收到get方法传来的数据,但是如果直接在后面拼接参数方式是可以收到的

//这种以get方式无法接收到
NSString *url = [NSString stringWithFormat:@"zenjoyclient://?name=jack&token=webAESBLKIJOPOI12LK"];

//下面这种方式就可以
NSString *url = [NSString stringWithFormat:@"zenjoyclient://?1111111"];

以后我选择了4.2 这个方法去接收数据application openURL:(NSURL *)url sourceApplication:

下图是我全部使用 get 方式传参数用 第二种方法接收就没问题


2.gif

再次提示,在B appDelegate 中实如下方法去接收A传来的参数

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

你可能感兴趣的:(iOS app之间相互跳转UIWebView里面跳转到其它app)