iOS开发中APP之间传递信息1--URL Schema(应用程序间互相启动)

原文:http://blog.sina.com.cn/s/blog_8a6c97b5010162f0.html

受限与iOS系统的运行机制,绝大多数情况下一个应用在进入后台后会马上进入suspend或terminate状态,也就是说不能执行代码,iOS中也没有类似WIndows中Service的概念,但存在某些例外:

1:有某些重要的任务,例如保存用户数据,网络下载等,可以申请一段时间的background运行时间,但时间段内能进行的操作比较有限,且有时间限制,长度为600秒左右。

2:某些特定类型的应用,具体包括:

  • VoIP应用
  • 定位类应用
  • 新闻类应用
  • 音乐类应用

这些类型的应用可以获得没有时间限制的background运行。但并不是你随便声明一下应用类型就可以了,如果挂羊头卖狗肉,是无法通过App Store审核的。

既然大多数情况下系统中只有一个活动的应用在运行,加上iOS内不同应用由于沙箱 运行导致的高度隔离,我们熟悉的那些IPC方法,例如管道、邮槽、共享内存、Socket等,往往会显得比较无力了,针对此种情况,苹果也提供了对应的解 决方案,也就是我们今天将要介绍的:URL Schema

简单来说,URL Schema就是iOS内的应用调用协议,应用A可以声明自定义的调用协议,就如http/https那样,当另一个应用B打算在应用内打开应用A时,可 以打开使用A自定义的协议开头的URL来打开A,除了协议头,URL中还可以附加其他参数,具体过程参见下图:

这个就是Safari与Alocola之间的交互过程。

接下来介绍一下自定义URL Schema的过程。

1:创建Xcode项目

2:打开项目,在其中的info.plist中添加如下图所示字段:

其中的"lifengzhong"便是我为此应用注册的自定义协议名称,其他应用如果想调用我的应用,只要打开形似:“lifengzhong://XXX”的URL便可以了。

3:在项目AppDelegate中添加函数:

[cpp] view plaincopy

  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  2. {
  3. if ([sourceApplication isEqualToString: @"xxx.xxx.xxx"]) {
  4. //xx
  5. }
  6. return YES;
  7. }

此函数便是URL Call的处理函数了,每当其他应用通过URL打开此应用时,该函数都会被调用。

参数url是传进的url,sourceApplication是呼叫应用的bundle identifier,通过此参数,应用可以对呼叫的应用进行过滤。annotation是呼叫过程中可以附加的额外参数,这里没有用到。

4:当另一个应用想调用我的应用时,只需拼接好URL,,然后打开URL即可,十分方便:

[cpp] view plaincopy

  1. NSURL* url = [NSURL URLWithString: @"lifengzhong://1,545166"];
  2. [[UIApplication sharedApplication] openURL: url];

这里的1,545166是我自定义的参数,你可以根据自己需要定义URL的格式。

通过上面介绍的URL Schema方法,算是实现了某种程度的进程间通信,但这种方式的一个缺点是,同一时刻还是只能有一个进程在前台,主动呼叫的应用在调用成功后必须进入后 台,所以能传递的只有URL中所带的参数或annotation中所带的参数。调用的过程中会出现应用之间的切换,用户体验不好。但聊胜于无,苹果好歹还 是留了这么一个口子,感恩吧。

时间: 2024-08-06 20:07:03

iOS开发中APP之间传递信息1--URL Schema(应用程序间互相启动)的相关文章

iOS开发中APP之间传递信息2--UIPasteboard

可以看一下以下UIPasteboard的用法 -(void)writeValueInAppOne { UIPasteboard *myUIPasteboard = [UIPasteboard generalPasteboard]; printf("myUIPasteboard.string %s\n", [myUIPasteboard.string UTF8String]); myUIPasteboard.string = myLabel.text; } -(void)getValue

分分钟解决iOS开发中App启动广告的功能

前不久有朋友需要一个启动广告的功能,我说网上有挺多的,他说,看的不是很理想.想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏广告,另一种是下面露logo的,类似网页新闻的启动广告.依赖SDWebImage主要用来下载网络的广告图片,一般项目里面网络图片都用的这个框架,所以在此不做过多的阐述.下面让我们来看看我封装的过程,对于新手来说,可以学习一下这种封装的思想. 1.首先建一个继承View的LBLaunchImageAd

ios开发中APP底部上滑不能调出如WiFi、蓝牙、播放等的设置页面的解决的方法

在开发的APP中我们通常通过手动底部上滑来调出WiFi.蓝牙.飞行模式等的设置页面.有时我们开发的APP无法调出. 解决的方法: 进入iPhone "设置" --> "控制中心"--> "程序内訪问"开关打开就可以! "再锁定屏幕上訪问"  是在锁屏情况下,同意调用设置

在iOS开发中,经常需要调用其它App,如拨打电话、发送邮件等。UIApplication:openURL:方法是实现这一目的的 ##转

源地址:http://blog.csdn.net/lengshengren/article/details/16339409 在iOS开发中,经常需要调用其它App,如拨打电话.发送邮件等.UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的模式来调用不同的App. 通过openURL方法可以调用如下应用: 调用谷歌地图(Google Maps) 调用邮件客户端(Apple Mail) 拨号(Phone Number) 调用短信(SMS)

iOS开发中常用的轮子 第四篇 收集齐7个轮子,准备高仿部分微博APP页面

产品原因有几张页面会参考微博APP来做,先收集齐轮子:计划这周完成,然后放到github上开源. 1,微博流刷新: 2,浏览微博中的图片: 3,发布微博: 4,发微博时选择照片: ============分割线:具体如下 ============= 选择相册中图片: 1,UzysAssetsPickerController 链接:https://github.com/uzysjung/UzysAssetsPickerController 介绍:用于替换UIImagePickerControlle

iOS开发中视图控制器ViewControllers之间的数据传递

iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据. 首先新建一个空工程,并添加一个根视图控制器类,如下图所示: # 在函数didFinishLunchingWithOption中添加几行代码,完成后如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 - (BOOL)application:(UIApplication

iOS开发中打电话发短信等功能的实现

在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的“关于”页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉及到了打电话的功能. iOS开发中,有三种方式可以打电话: (1)直接跳到拨号界面,代码如下 1 2 NSURL *url = [NSURL URLWithString:@"tel://10010"];  [[UIApplication sharedApplication] openURL:url]; 缺点:

ios 开发中 动态库 与静态库的区别

使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源 3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的. 从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小. 等其他好处, 从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开

iOS开发中的内存分配与分区

iOS开发中的内存分配与分区 关于RAM&ROM RAM与ROM就是具体的存储空间,统称为存储器. RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储.它又分为: 动态DRAM,速度慢一点,需要定期的刷新(充电),我们常说的内存条就是指它,价格会稍低一点,手机中的运行内存也是指它. 静态SRAM,速度快,我们常说的一级缓存,二级缓存就是指它,当然价格高一点. ROM(read only memory):存储性内存,可以掉电存储,例如