iOS 两个App之间调起通信

前言

假设需求是这样的:由一个app1跳转到app2之后,app2完成某项任务之后,怎么把app2的完成信息传到app1(自己的程序是app1),传的是什么类型的数据,怎么进行解析?

逻辑

本文章使用TestApp1作为第一个app的URL Schemes,TestApp2为第二个app的URL Schemes。

TestApp1工程配置

如下图,要适配iOS9.0

iOS 两个App之间调起通信

对于URL Schemes中的TestApp1是本应用提供给其它应用调用的。

TestApp2工程配置

如下图,要适配iOS9.0

iOS 两个App之间调起通信

对于URL Schemes中的TestApp2是本应用提供给其它应用调用的。

TestApp1工程中实现代码测试

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // TestApp2是TestApp2这个app在info.plist中配置的URL Schemes
  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestApp2://"]]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"TestApp2://success=1&count=100"]];
  }
  
  return YES;
}
 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  NSString *receText = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  NSLog(@"%@    %@",receText, url.absoluteString);
  
  
  return YES;
  
}
 

我们首先需要判断手机是否安装了应用TestApp2,通过TestApp2工程公开的URL Schemes来判断,即TestApp2://。需要传参数时,是通过URL参数来传的。如:TestApp2://success=1&count=100就是一个URL。

TestApp2工程中实现代码测试

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  NSString *receText = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  NSLog(@"%@    %@",receText, url.absoluteString);
  
  
  [self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2];
  
  return YES;
  
}
 
- (void)goBackToApp1 {
  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestApp1://"]]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"TestApp1://paySuccess=1"]];
  }
}
 

我们在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url处理来自TestApp1应用的调用,获取到相应的参数了。

当我们处理数据完成,需要反馈给TestApp1时,就需要调用通过TestApp1://paySuccess=1调用回到TestApp1并将状态带回去。

TestApp1打印日志

 
1
2
3
 
2015-12-03 22:30:10.250 TestApp1[9008:678123] paySuccess=1    TestApp1://paySuccess=1
 

说明参数从TestApp2正确的传过来了。

TestApp2打印日志

 
1
2
3
 
2015-12-03 22:29:59.690 TestApp2[9004:677942] success=1&count=100    TestApp2://success=1&count=100
 

说明参数也能正确地从TestApp1传过来了。

上一篇:[C/C++] extern关键字详解以及与static、const区别


下一篇:(转) C/C++中const关键字详解