前言

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

逻辑

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

TestApp1工程配置

如下图,要适配iOS9.0

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

TestApp2工程配置

如下图,要适配iOS9.0

对于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传过来了。

iOS 两个App之间调起通信的更多相关文章

  1. 两个App之间调起通信

    前言 经常使用一些app的分享功能,比如点击QQ分享,就从app打开(跳转到)QQ,然后分享完之后又回到我们的app,那么这是怎样实现的呢? 假设有这么一个需求,由app1跳转到app2,当app2完 ...

  2. ios两个app之间跳转,传值的实现

    两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...

  3. iOS - (两个APP之间的跳转)

    一个程序若要跳到另一个程序.需要在目标程序的plist文件里面修改: 打开info.plist,添加一项URL types 展开URL types,再展开Item0,将Item0下的URL ident ...

  4. 通过AIDL在两个APP之间Service通信

    一.项目介绍 [知识准备] ①Android Interface definition language(aidl,android接口定义语言),其目的实现跨进程的调用.进程是程序在os中执行的载体, ...

  5. 安卓中不同APP之间的消息通信

    昨天在腾讯实习生招聘初试面试时面试官问道我关于两个APP之间相互通信的方式,当时自己回道到了contentProvider与BroadcastReceiver.但他接着问还有没有其它的方式,我跟他说可 ...

  6. 两个APP之间怎么调用《IT蓝豹》

    两个app之间怎么调用?   (1):通过显示Intent 启动    首先:配置好B app 的action,即AndroidManifest.xml中声明 <intent-filter> ...

  7. 两个App之间的跳转 并传值

    两个App之间的传值最主要的是方法是 Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.a ...

  8. iOS中两个APP之间的跳转和通信

    app间的跳转 一:在第一个app首先要做下面这些操作: 1.在info.plist文件中的Information Property List下添加一项:URL types. 2.点开URL type ...

  9. iOS日常学习 - App之间常用的五种通信方式及适用场景总结

    本文为转载学习,原文地址 iOS系统是相对封闭的系统,App各自在各自的沙盒(sandbox)中运行,每个App都只能读取iPhone上iOS系统为该应用程序程序创建的文件夹AppData下的内容,不 ...

随机推荐

  1. c# 基本值类型及其默认值

    //值类型 C# 类型      .NET Framework 类型 bool            System.Boolean 4Byte 32bit布尔型变量 逻辑值,true或者false,默 ...

  2. [转载]DW数据仓库建模与ETL的实践技巧

    一.Data仓库的架构 Data仓库(Data Warehouse DW)是为了便于多维分析和多角度展现而将Data按特定的模式进行存储所建立起来的关系型Datcbase,它的Data基于OLTP源S ...

  3. BZOJ4116 : [Wf2015]Tours

    将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\gcd$的约数. 对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上.因 ...

  4. Google Chrome Uncaught TypeError: object is not a function

    <html> <script type="text/javascript"> function testForm(){ alert("hello ...

  5. Facebook React.js库 入门实例教程

    作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩 ...

  6. 定位absolute使内联支持宽高(块属性变为内联,内容默认撑开)margin auto 失效

    relative   没脱离文档流 absdute 完全脱离文档流 margin :auto 失效 相对整个文档偏离 相对父级定位 fixed 脱离文档流 与绝对定位特性一致 3.P标快不能包块级标签 ...

  7. dom事件不求甚解,色解事件捕获和冒泡

    以前对事件只会用jq的bind绑定一下,脑海里留着书中的事件循环,一直认为事件就是这儿循环的,最近看园子里的文章,对事件的了解更模糊了 所以我做了个小实验,总结一下看的这些零零碎碎的文章,如果总结错了 ...

  8. 简单 常用的git命令

    常用的git命令 git pull  获取最新 git add . 提交所有 git commit  -m “我的注释” git status 查看状态 git push origin master ...

  9. C#面向对象之属性

    1.属性的定义及使用 class MyClass { ; //属性的定义 private string name = ""; //属性的定义 public int Id { get ...

  10. .net后台获取HTML中select元素选中的值

    前台: <select id="Province" name="Province" class="select"></se ...