iOS进程间通信

对于app来说,一个运行的app对应于一个进程,进程间通信就是app通信

通信方式1:url scheme

这个是iOS app通信最常用到的通信方式,App1 通过openURL 的方法跳转到 App2,并且在URL中带上想要的参数,有点类似http的get请求那样进行参数传递。这种方式是使用最多的最常见的,使用方法也很简单只需要源App1在info.plist中配置 LSApplicationQueriesSchemes,指定目标App2的 scheme;然后在目标App2的info.plist中配置好URL types,表示该app接受何种URL scheme的唤起。
在这里插入图片描述
微信、qq的各种分享基本都是使用这种方式实现的

2:通信方式2

keyChain,这个严格来说不算进程间通信的方式,keyChain是一个sqlite数据库,里面的所有数据都是经过加密的。app的信息保存在keyChain中,即使app删除,keyChain里的数据也不会删除,因此可以用于同一账户的多平台登录。

3:UIPasteboard

多个app之间,是可以共享剪贴板里的数据的
从剪贴板里写入和读取数据

UIPasteboard * board = [UIPasteboard generalPasteboard];
[board setString:@"这一一条写入剪贴板的数据"];
NSLog(@"%@",board.string);

4:UIDocumentInteractionController

实现app中文档共享

NSURL * url = [[NSBundle mainBundle] URLForResource:@"name" withExtension:@"txt"];
UIDocumentInteractionController *dc = [UIDocumentInteractionController interactionControllerWithURL:url];
[dc setDelegate:self];
[dc presentPreviewAnimated:YES];

5: local socket

这种方式不太常见,也是很容易被iOS开发者所忽略但是特别实用的一种方法。它的原理很简单,一个App1在本地的端口port1234进行TCP的bind和listen,另外一个App2在同一个端口port1234发起TCP的connect连接,这样就可以建立正常的TCP连接,进行TCP通信了,那么就想传什么数据就可以传什么数据了。

这种方式最大的特点就是灵活,只要连接保持着,随时都可以传任何相传的数据,而且带宽足够大。它的缺点就是因为iOS系统在任意时刻只有一个app在前台运行,那么就要通信的另外一方具备在后台运行的权限,像导航或者音乐类app。

它是常用使用场景就是某个App1具有特殊的能力,比如能够跟硬件进行通信,在硬件上处理相关数据。而App2则没有这个能力,但是它能给App1提供相关的数据,这样APP2跟App1建立本地socket连接,传输数据到App1,然后App1在把数据传给硬件进行处理。

6:AirDrop

7: UIActivityViewController

8:App Groups

App Group用于同一个开发团队开发的App之间,包括App和Extension之间共享同一份读写空间,进行数据共享。同一个团队开发的多个应用之间如果能直接数据共享,大大提高用户体验。

猜你喜欢

转载自blog.csdn.net/goldfish3/article/details/89433534