两个App之间调起通信
前言
经常使用一些app的分享功能,比如点击QQ分享,就从app打开(跳转到)QQ,然后分享完之后又回到我们的app,那么这是怎样实现的呢?
假设有这么一个需求,由app1跳转到app2,当app2完成任务之后,要把app2中的某些信息传到app1中(假设我们自己的程序是app1)
过程
我们创建两个新的工程,一个叫Test1,一个叫Test2。
本篇文章将使用Test1作为第一个app的URL Schemes,Test2作为第二个app的URL Schemes。
Test1工程配置
由于iOS9.0之后跳转URL Schemes需要将添加白名单

对于URL Schemes中的Test1是本应用留给其他应用调用的。
Test2工程配置

对于URL Schemes中的Test2是本应用留给其他应用调用的。
Test1工程中测试代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Test2是在Test2这个项目的info.plist中配置的URL Schemes
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test2://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test2://success=1&&name=test2"]];
}
return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSString *str = [[url host] stringByRemovingPercentEncoding];
NSLog(@"%@---%@",str, url.absoluteString);
return YES;
}
我们首先需要判断手机是否安装了应用Test2,通过Test2工程公开的URL Schemes来判断,即Test2://。需要传参数时,是通过URL参数来传的。如:Test2://success=1&&name=test2就是一个URL。
Test2工程中测试代码
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSString *str = [[url host] stringByRemovingPercentEncoding];
NSLog(@"%@---%@",str, url.absoluteString);
[self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2];
return YES;
}
- (void)goBackToApp1 {
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test1://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test1://loginSuccess=1"]];
}
}
我们在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url处理来自Test1应用的调用,获取到相应的参数了。
当我们处理数据完成,需要反馈给Test1时,就需要调用通过Test1://loginSuccess=1调用回到Test1并将状态带回去。
Test1打印日志
2016-06-05 23:23:09.807 test1[1277:219009] loginSuccess=1---Test1://loginSuccess=1
说明参数能从Test2正确地传递过来。
Test2打印日志
2016-06-05 23:22:15.008 test2[1243:216871] success=1&&name=test2---Test2://success=1&&name=test2
说明参数能从Test1正确地传递过来。
两个App之间调起通信的更多相关文章
- iOS 两个App之间调起通信
前言 假设需求是这样的:由一个app1跳转到app2之后,app2完成某项任务之后,怎么把app2的完成信息传到app1(自己的程序是app1),传的是什么类型的数据,怎么进行解析? 逻辑 本文章使用 ...
- 通过AIDL在两个APP之间Service通信
一.项目介绍 [知识准备] ①Android Interface definition language(aidl,android接口定义语言),其目的实现跨进程的调用.进程是程序在os中执行的载体, ...
- 安卓中不同APP之间的消息通信
昨天在腾讯实习生招聘初试面试时面试官问道我关于两个APP之间相互通信的方式,当时自己回道到了contentProvider与BroadcastReceiver.但他接着问还有没有其它的方式,我跟他说可 ...
- 两个APP之间怎么调用《IT蓝豹》
两个app之间怎么调用? (1):通过显示Intent 启动 首先:配置好B app 的action,即AndroidManifest.xml中声明 <intent-filter> ...
- 两个App之间的跳转 并传值
两个App之间的传值最主要的是方法是 Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.a ...
- ios两个app之间跳转,传值的实现
两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...
- iOS中两个APP之间的跳转和通信
app间的跳转 一:在第一个app首先要做下面这些操作: 1.在info.plist文件中的Information Property List下添加一项:URL types. 2.点开URL type ...
- iOS - (两个APP之间的跳转)
一个程序若要跳到另一个程序.需要在目标程序的plist文件里面修改: 打开info.plist,添加一项URL types 展开URL types,再展开Item0,将Item0下的URL ident ...
- Android Studio复制项目 两个App之间不覆盖安装操作步骤
步骤一:修改包名 第五步注意:不能以数字等作为包名的开头. 步骤二:修改清单文件里面的包名 第八步注意:如果报红,从新引入新的包名下的Mainactivity类. 步骤三:修改Gradle Scrip ...
随机推荐
- DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)
要实现软件设计.软件开发在一个统一的思想.统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束. 虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍 ...
- 剑指offer-数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- SQL执行计划分析
explain执行计划中的字段以及含义在下面的博客中有详细讲述: https://blog.csdn.net/da_guo_li/article/details/79008016 执行计划能告诉我们什 ...
- Extensions in UWP Community Toolkit - Mouse Cursor
概述 UWP Community Toolkit Extensions 中有一个为 Mouse 提供的扩展 - Mouse Cursor Extensions,本篇我们结合代码详细讲解 Mouse C ...
- Django 使用celery任务队列的配置
celery 情景:用户发起request,并等待response返回.在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件.手机验证码等. 使用 ...
- Django中ORM介绍和字段及其参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- Python系列之 - 描述符
描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议 __get__():调用一个属性时,触 ...
- ABP公共结构
1.ABP依赖注入 维基百科说:“依赖注入是一种软件设计模式,指一个或多个依赖(或服务)被注入,或通过引用传递,传入一个依赖对象(或客户端)并成为客户状态的一部分.模式通过自身的行为分离了客户依赖的创 ...
- html5之img标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue基础特性
在这里我们主要是讲解一些vue实例的属性和一些基础的指令 vue实例属性: 其实和我们之前所学的对象的属性是相似的东西 vue的基础指令: 对于指令,大家可能之前么有接触过相关的概念,其实大家可以这样 ...