iOS App間常用的五種通信方式

iOS系統(tǒng)是相對封閉的系統(tǒng),App各自在各自的沙盒(sandbox)中運行,每個App都只能讀取iPhone上iOS系統(tǒng)為該應(yīng)用程序程序創(chuàng)建的文件夾AppData下的內(nèi)容,不能隨意跨越自己的沙盒去訪問別的App沙盒中的內(nèi)容。

所以iOS 的系統(tǒng)中進行App間通信的方式也比較固定,常見的app間通信方式以及使用場景總結(jié)如下。

1、URL Scheme

這個是iOS app通信最常用到的通信方式,App1通過openURL的方法跳轉(zhuǎn)到App2,并且在URL中帶上想要的參數(shù),有點類似http的get請求那樣進行參數(shù)傳遞。這種方式是使用最多的最常見的,使用方法也很簡單只需要源App1在info.plist中配置LSApplicationQueriesSchemes,指定目標(biāo)App2的scheme;然后在目標(biāo)App2的info.plist中配置好URL types,表示該app接受何種URL scheme的喚起。

典型的使用場景就是各開放平臺SDK的分享功能,如分享到微信朋友圈微博等,或者是支付場景。比如從滴滴打車結(jié)束行程跳轉(zhuǎn)到微信進行支付。

2、Keychain

iOS系統(tǒng)的Keychain是一個安全的存儲容器,它本質(zhì)上就是一個sqllite數(shù)據(jù)庫,它的位置存儲在/private/var/Keychains/keychain-2.db,不過它所保存的所有數(shù)據(jù)都是經(jīng)過加密的,可以用來為不同的app保存敏感信息,比如用戶名,密碼等。iOS系統(tǒng)自己也用keychain來保存VPN憑證和Wi-Fi密碼。它是獨立于每個App的沙盒之外的,所以即使App被刪除之后,Keychain里面的信息依然存在。

基于安全和獨立于app沙盒的兩個特性,Keychain主要用于給app保存登錄和身份憑證等敏感信息,這樣只要用戶登錄過,即使用戶刪除了app重新安裝也不需要重新登錄。

那Keychain用于App間通信的一個典型場景也和app的登錄相關(guān),就是統(tǒng)一賬戶登錄平臺。使用同一個賬號平臺的多個app,只要其中一個app用戶進行了登錄,其他app就可以實現(xiàn)自動登錄不需要用戶多次輸入賬號和密碼。一般開放平臺都會提供登錄SDK,在這個SDK內(nèi)部就可以把登錄相關(guān)的信息都寫到keychain中,這樣如果多個app都集成了這個SDK,那么就可以實現(xiàn)統(tǒng)一賬戶登錄了。

Keychain的使用比較簡單,使用iOS系統(tǒng)提供的類KeychainItemWrapper,并通過keychain access groups就可以在應(yīng)用之間共享keychain中的數(shù)據(jù)的數(shù)據(jù)了。

3、UIPasteboard

顧名思義, UIPasteboard是剪切板功能,因為iOS的原生控件UITextView,UITextField 、UIWebView,我們在使用時如果長按,就會出現(xiàn)復(fù)制、剪切、選中、全選、粘貼等功能,這個就是利用了系統(tǒng)剪切板功能來實現(xiàn)的。而每一個App都可以去訪問系統(tǒng)剪切板,所以就能夠通過系統(tǒng)剪貼板進行App間的數(shù)據(jù)傳輸了。

UIPasteboard的使用很簡單,

UIPasteboard典型的使用場景就是淘寶跟微信/QQ的鏈接分享。由于騰訊和阿里的公司戰(zhàn)略,騰訊在微信和qq中都屏蔽了淘寶的鏈接。那如果淘寶用戶想通過QQ或者微信跟好友分享某個淘寶商品,怎么辦呢? 阿里的工程師就巧妙的利用剪貼板實現(xiàn)了這個功能。首先淘寶app中將鏈接自定義成淘口令,引導(dǎo)用戶進行復(fù)制,并去QQ好友對話中粘貼。然后QQ好友收到消息后再打開自己的淘寶app,淘寶app每次從后臺切到前臺時,就會檢查系統(tǒng)剪切板中是否有淘口令,如果有淘口令就進行解析并跳轉(zhuǎn)到對于的商品頁面。

先復(fù)制淘口令到剪切板,

把剪切板中的內(nèi)容粘貼到微信發(fā)給微信好友,

微信好友把淘口令復(fù)制到淘寶中,就可以打開好友分享的淘寶鏈接了。

4、UIDocumentInteractionController

UIDocumentInteractionController主要是用來實現(xiàn)同設(shè)備上app之間的共享文檔,以及文檔預(yù)覽、打印、發(fā)郵件和復(fù)制等功能。它的使用非常簡單.

首先通過調(diào)用它唯一的類方法 interactionControllerWithURL:,并傳入一個URL(NSURL),為你想要共享的文件來初始化一個實例對象。然后UIDocumentInteractionControllerDelegate,然后顯示菜單和預(yù)覽窗口。

效果如下,

5、local socket

這種方式不太常見,也是很容易被iOS開發(fā)者所忽略但是特別實用的一種方法。它的原理很簡單,一個App1在本地的端口port1234進行TCP的bind和listen,另外一個App2在同一個端口port1234發(fā)起TCP的connect連接,這樣就可以建立正常的TCP連接,進行TCP通信了,那么就想傳什么數(shù)據(jù)就可以傳什么數(shù)據(jù)了。

這種方式最大的特點就是靈活,只要連接保持著,隨時都可以傳任何相傳的數(shù)據(jù),而且?guī)捵銐虼?。它的缺點就是因為iOS系統(tǒng)在任意時刻只有一個app在前臺運行,那么就要通信的另外一方具備在后臺運行的權(quán)限,像導(dǎo)航或者音樂類app。

它是常用使用場景就是某個App1具有特殊的能力,比如能夠跟硬件進行通信,在硬件上處理相關(guān)數(shù)據(jù)。而App2則沒有這個能力,但是它能給App1提供相關(guān)的數(shù)據(jù),這樣APP2跟App1建立本地socket連接,傳輸數(shù)據(jù)到App1,然后App1在把數(shù)據(jù)傳給硬件進行處理。

本文主要總結(jié)我所知道的iOS App間常用的五種通信方式以及各自的適用場景,如有疏忽或者錯誤請多多指正。如果你還知道其他的方式,歡迎多多交流,非常感謝。

微信公眾號:云峰小羅,分享 編程.生活.段子

本人維護了一個“MFi開發(fā)交流”的微信群,里面有iOS開發(fā) 、外設(shè)驅(qū)動、MFi認(rèn)證等各類相關(guān)人員,大家相關(guān)交流,互幫互助。

想進群的可以加本人微信:luoxub?,備注:MFi, 邀請進群。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容