응용 프로그램의 AppData의 폴더 내용을 작성하는 아이폰 OS 시스템은 상대적으로 폐쇄 된 시스템, 응용 프로그램은 자신의 샌드 박스 (샌드 박스)에서 실행되고, 각각 아이폰 앱 아이폰 OS 파일 시스템에 읽기 전용 할 수없는 자유에 교차하는 자신의 샌드 박스는 다른 응용 프로그램 샌드 박스의 내용에 액세스 할 수 있습니다.
그래서 시스템 간 통신 iOS의 비교적 고정 된 애플리케이션으로, 일반적인 사용 시나리오 요약하면 다음과 앱 통신.
1, URL 계획
이 통신 응용 프로그램 통신 아이폰 OS가 가장 일반적으로 앱 2에 대한 방법의 OpenURL 앱 1 점프에 의해, 사용 및 URL에 원하는 매개 변수를 가지고하는 것입니다, HTTP GET 요청은 매개 변수 전달에 다소 유사하다. 이 방법은 가장 일반적인 사용의 사용 대상 앱 2의 방식을 지정의 Info.plist에 LSApplicationQueriesSchemes에게 유일한 원천 앱 1을 구성하는 매우 간단하다, 다음의 Info.plist 대상 앱 2의에서 URL 유형을 구성하는 것이 나타냅니다 무엇을 허용 app URL 스킴을 불러 일으킨다.
일반적인 사용 시나리오는 친구의 마이크로 채널 원과 개방형 플랫폼 SDK 공유 기능, 마이크로 블로깅을 공유하거나 장면을 지불하는 것입니다. 예를 들어, 여행 및 조각의 끝에서 택시 마이크로 채널 지불로 이동합니다.
2, 키 체인
키 체인 아이폰 OS 시스템이 위치가 /private/var/Keychains/keychain-2.db에 저장됩니다, 그것은 본질적으로 데이터베이스 sqllite이며, 안전한 저장 용기이지만, 모든 데이터가 암호화되어 보유 등등 사용자 이름, 암호 및 같은 다른 응용 프로그램에 중요한 정보를 저장하는 데 사용할 수 있습니다. 아이폰 OS 시스템은 열쇠 고리 VPN 자격 증명 및 Wi-Fi 비밀번호와 자신을 저장합니다. 이 정보가 여전히 존재 안에, 앱을 삭제 그래서 후에도 키 체인 각 앱의 샌드 박스의 독립적이다.
基于安全和独立于app沙盒的两个特性,Keychain主要用于给app保存登录和身份凭证等敏感信息,这样只要用户登录过,即使用户删除了app重新安装也不需要重新登录。
那Keychain用于App间通信的一个典型场景也和app的登录相关,就是统一账户登录平台。使用同一个账号平台的多个app,只要其中一个app用户进行了登录,其他app就可以实现自动登录不需要用户多次输入账号和密码。一般开放平台都会提供登录SDK,在这个SDK内部就可以把登录相关的信息都写到keychain中,这样如果多个app都集成了这个SDK,那么就可以实现统一账户登录了。
Keychain的使用比较简单,使用iOS系统提供的类KeychainItemWrapper,并通过keychain access groups就可以在应用之间共享keychain中的数据的数据了。
3、 UIPasteboard
顾名思义, UIPasteboard是剪切板功能,因为iOS的原生控件UITextView,UITextField 、UIWebView,我们在使用时如果长按,就会出现复制、剪切、选中、全选、粘贴等功能,这个就是利用了系统剪切板功能来实现的。而每一个App都可以去访问系统剪切板,所以就能够通过系统剪贴板进行App间的数据传输了。
UIPasteboard的使用很简单,
UIPasteboard典型的使用场景就是淘宝跟微信/QQ的链接分享。由于腾讯和阿里的公司战略,腾讯在微信和qq中都屏蔽了淘宝的链接。那如果淘宝用户想通过QQ或者微信跟好友分享某个淘宝商品,怎么办呢? 阿里的工程师就巧妙的利用剪贴板实现了这个功能。首先淘宝app中将链接自定义成淘口令,引导用户进行复制,并去QQ好友对话中粘贴。然后QQ好友收到消息后再打开自己的淘宝app,淘宝app每次从后台切到前台时,就会检查系统剪切板中是否有淘口令,如果有淘口令就进行解析并跳转到对于的商品页面。
先复制淘口令到剪切板,
把剪切板中的内容粘贴到微信发给微信好友,
微信好友把淘口令复制到淘宝中,就可以打开好友分享的淘宝链接了。
4、 UIDocumentInteractionController
UIDocumentInteractionController主要是用来实现同设备上app之间的共享文档,以及文档预览、打印、发邮件和复制等功能。它的使用非常简单.
首先通过调用它唯一的类方法 interactionControllerWithURL:,并传入一个URL(NSURL),为你想要共享的文件来初始化一个实例对象。然后UIDocumentInteractionControllerDelegate,然后显示菜单和预览窗口。
效果如下,
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
通过AirDrop实现不同设备的App之间文档和数据的分享;
7、 UIActivityViewController
iOS SDK中封装好的类在App之间发送数据、分享数据和操作数据;
8、 App Groups
독자 사이의 응용 및 확장 공유하는 같은 공간, 데이터 공유를 포함하여 같은 개발 팀의 그룹 사이의 앱 앱. 그들이 직접 크게 사용자 경험을 개선, 데이터를 공유 할 수있는 경우 같은 팀에 의해 개발 된 여러 응용 프로그램 사이.