iOS系统并不支持App之间进行直接的通信,如果想要进行App之间的通信,只能通过以下几种方式:AirDrop、URL Scheme、Document以及Socket。
AirDrop
发送文件和数据
发送的数据支持:images, strings, URLs等,对于自定义的Objects,需要适配UIActivityItemSource协议。
发送方式如下:
|
|
UIActivityViewController会根据数据类型展示不同的Activitys,对于某些不想展示的类型,可以设置excludedActivityTypes属性。
接受文件和数据
(1)首先,需要在Info.plist中设置属性,表示支持的文件类型:
|
|
例如,添加public.png声明支持接收PNG文件。
(2)在回调中,接收发送过来的数据:
|
|
如果App处于前台,需要打开该文件,并展现给用户,如果处于后台,可能需要标记该文件,并延迟处理。
(3)检查目录里的文件,需要时,可以将其移到其他目录:
|
|
注意:该目录只支持读取和删除,不支持写入。
URL Schemes
通过URLSchemes可以在打开或者跳转App时,进行数据传递。但其中,有些是系统自带的,注意不要跟其命名相同,例如:http, mailto, tel和sms。
发送URL
|
|
注意,双斜杠。
声明自定义的URL Schemes
在Info.plist中声明:
|
|
处理URL Request
(1)如果App未启动,收到一个URL请求时,会被启动,流程如下:
注意,如果application:willFinishLaunchingWithOptions:或application:didFinishLaunchingWithOptions:方法,返回NO时,将不会调用application:openURL:sourceApplication:annotation:。
(2)如果App处于后台或者被挂起时,收到一个URL请求时,会被切回前台,流程如下:
启动图
当不同URL被打开时,可以设置不同的启动图,格式如下:
|
|
其中,basename是Info.plist中设置的UILaunchImageFile,如果没有申明该字段,则直接用“Default”,例如,对于支持Retina的,命名如下:
|
|
不支持的,命名如下:
|
|
Socket
iOS的App中间是可以直接通过Socket进行通信的,但是由于只有一个App可以位于前台,所以,另一个App必须具备后台运行的能力。