1.URL Scheme(外鏈)
這個(gè)是IOS app通信最常用到的通信方式,APP1通過openURL的方式跳轉(zhuǎn)到APP2,并且在URL中帶上想要的參數(shù)弛说,有點(diǎn)類似https的get請(qǐng)求那樣進(jìn)行參數(shù)傳遞,這個(gè)歌方式是使用最多的最常見,使用方法也很簡(jiǎn)單只需要App1在info.plist中配置LSApplicationQueriesSchemes凛驮,指定目標(biāo)App2的scheme,然后在目標(biāo)app2的info.plist中配置好URL type表示該APP接受和中URL scheme的喚起
2.KeyChain(鑰匙串)
iOS系統(tǒng)的Keychain是一個(gè)安全的存儲(chǔ)容器条辟,它本質(zhì)上就是一個(gè)sqllite數(shù)據(jù)庫辐烂,它的位置存儲(chǔ)在/private/var/Keychains/keychain-2.db遏插,不過它所保存的所有數(shù)據(jù)都是經(jīng)過加密的,可以用來為不同的app保存敏感信息纠修,比如用戶名胳嘲,密碼等。iOS系統(tǒng)自己也用keychain來保存VPN憑證和Wi-Fi密碼扣草。它是獨(dú)立于每個(gè)App的沙盒之外的了牛,所以即使App被刪除之后,Keychain里面的信息依然存在辰妙。
基于安全和獨(dú)立于app沙盒的兩個(gè)特性鹰祸,Keychain主要用于給app保存登錄和身份憑證等敏感信息,這樣只要用戶登錄過密浑,即使用戶刪除了app重新安裝也不需要重新登錄蛙婴。
那Keychain用于App間通信的一個(gè)典型場(chǎng)景也和app的登錄相關(guān),就是統(tǒng)一賬戶登錄平臺(tái)尔破。使用同一個(gè)賬號(hào)平臺(tái)的多個(gè)app街图,只要其中一個(gè)app用戶進(jìn)行了登錄,其他app就可以實(shí)現(xiàn)自動(dòng)登錄不需要用戶多次輸入賬號(hào)和密碼懒构。一般開放平臺(tái)都會(huì)提供登錄SDK餐济,在這個(gè)SDK內(nèi)部就可以把登錄相關(guān)的信息都寫到keychain中,這樣如果多個(gè)app都集成了這個(gè)SDK胆剧,那么就可以實(shí)現(xiàn)統(tǒng)一賬戶登錄了
3.UIPasteboard(粘貼版)
UIPasteboard是剪切板功能絮姆,因?yàn)閕OS的原生控件UITextView,UITextField 秩霍、UIWebView篙悯,我們?cè)谑褂脮r(shí)如果長按,就會(huì)出現(xiàn)復(fù)制铃绒、剪切辕近、選中、全選匿垄、粘貼等功能移宅,這個(gè)就是利用了系統(tǒng)剪切板功能來實(shí)現(xiàn)的。而每一個(gè)App都可以去訪問系統(tǒng)剪切板椿疗,所以就能夠通過系統(tǒng)剪貼板進(jìn)行App間的數(shù)據(jù)傳輸了
4.UIDocumentInteractionConntroller(文檔系統(tǒng))
UIDocumentInteractionController主要是用來實(shí)現(xiàn)同設(shè)備上app之間的共享文檔漏峰,以及文檔預(yù)覽、打印届榄、發(fā)郵件和復(fù)制等功能浅乔。它的使用非常簡(jiǎn)單.
首先通過調(diào)用它唯一的類方法 interactionControllerWithURL:,并傳入一個(gè)URL(NSURL),為你想要共享的文件來初始化一個(gè)實(shí)例對(duì)象靖苇。然后UIDocumentInteractionControllerDelegate席噩,然后顯示菜單和預(yù)覽窗口
5.App Groups(應(yīng)用組)
App Group用于同一個(gè)開發(fā)團(tuán)隊(duì)開發(fā)的App之間,包括App和Extension之間共享同一份讀寫空間贤壁,進(jìn)行數(shù)據(jù)共享悼枢。同一個(gè)團(tuán)隊(duì)開發(fā)的多個(gè)應(yīng)用之間如果能直接數(shù)據(jù)共享,大大提高用戶體驗(yàn)
6.Local socket(套接字)
這種方式不太常見脾拆,也是很容易被iOS開發(fā)者所忽略但是特別實(shí)用的一種方法馒索。它的原理很簡(jiǎn)單,一個(gè)App1在本地的端口port1234進(jìn)行TCP的bind和listen名船,另外一個(gè)App2在同一個(gè)端口port1234發(fā)起TCP的connect連接绰上,這樣就可以建立正常的TCP連接,進(jìn)行TCP通信了渠驼,那么就想傳什么數(shù)據(jù)就可以傳什么數(shù)據(jù)了蜈块。
這種方式最大的特點(diǎn)就是靈活,只要連接保持著迷扇,隨時(shí)都可以傳任何相傳的數(shù)據(jù)百揭,而且?guī)捵銐虼蟆K娜秉c(diǎn)就是因?yàn)閕OS系統(tǒng)在任意時(shí)刻只有一個(gè)app在前臺(tái)運(yùn)行谋梭,那么就要通信的另外一方具備在后臺(tái)運(yùn)行的權(quán)限,像導(dǎo)航或者音樂類app倦青。
它是常用使用場(chǎng)景就是某個(gè)App1具有特殊的能力瓮床,比如能夠跟硬件進(jìn)行通信,在硬件上處理相關(guān)數(shù)據(jù)产镐。而App2則沒有這個(gè)能力隘庄,但是它能給App1提供相關(guān)的數(shù)據(jù),這樣APP2跟App1建立本地socket連接癣亚,傳輸數(shù)據(jù)到App1丑掺,然后App1在把數(shù)據(jù)傳給硬件進(jìn)行處理
7.AipDrop
通過AirDrop實(shí)現(xiàn)不同設(shè)備的App之間文檔和數(shù)據(jù)的分享;
8.UIActivityViewController
iOS SDK中封裝好的類在App之間發(fā)送數(shù)據(jù)述雾、分享數(shù)據(jù)和操作數(shù)據(jù)街州;