iOS(APP)进程间8中常⽤通信⽅式总结
iOS系统是相对封闭的系统,App各⾃在各⾃的沙盒(sandbox)中运⾏,每个App都只能读取iPhone上iOS系统为该应⽤程序程序创建的⽂件夹AppData下的内容,不能随意跨越⾃⼰的沙盒去访问别的App沙盒中的内容。
所以iOS 的系统中进⾏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的唤起。
典型的使⽤场景就是各开放平台SDK的分享功能,如分享到朋友圈微博等,或者是⽀付场景。⽐如从滴滴打车结束⾏程跳转到进⾏⽀付。进程通信方式
2、 Keychain
iOS系统的Keychain是⼀个安全的存储容器,它本质上就是⼀个sqllite数据库,它的位置存储在/private/var/Keychains/keychain-2.db,不过它所保存的所有数据都是经过加密的,可以⽤来为不同的app保存敏感信息,⽐如⽤户名,密码等。iOS系统⾃⼰也⽤keychain来保存VPN 凭证和Wi-Fi密码。它是独⽴于每个App的沙盒之外的,所以即使App被删除之后,Keychain⾥⾯的信息依然存在。
基于安全和独⽴于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在把数据传给硬件进⾏处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。