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

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

? ? ? ?所以iOS 的系統(tǒng)中進(jìn)行App間通信的方式也比較固定蜂桶,常見(jiàn)的app間通信方式以及使用場(chǎng)景總結(jié)如下晓避。

1、URL Scheme

? ? ? ?這個(gè)是iOS app通信最常用到的通信方式乙帮,App1通過(guò)openURL的方法跳轉(zhuǎn)到App2杜漠,并且在URL中帶上想要的參數(shù),有點(diǎn)類似http的get請(qǐng)求那樣進(jìn)行參數(shù)傳遞蚣旱。這種方式是使用最多的最常見(jiàn)的碑幅,使用方法也很簡(jiǎn)單只需要源App1在info.plist中配置LSApplicationQueriesSchemes戴陡,指定目標(biāo)App2的scheme塞绿;然后在目標(biāo)App2的info.plist中配置好URL types,表示該app接受何種URL scheme的喚起恤批。

? ? ? ? 典型的使用場(chǎng)景就是各開(kāi)放平臺(tái)SDK的分享功能异吻,如分享到微信朋友圈微博等,或者是支付場(chǎng)景。比如從滴滴打車結(jié)束行程跳轉(zhuǎn)到微信進(jìn)行支付诀浪。

2棋返、Keychain

? ? ? ?iOS系統(tǒng)的Keychain是一個(gè)安全的存儲(chǔ)容器,它本質(zhì)上就是一個(gè)sqllite數(shù)據(jù)庫(kù)雷猪,它的位置存儲(chǔ)在/private/var/Keychains/keychain-2.db睛竣,不過(guò)它所保存的所有數(shù)據(jù)都是經(jīng)過(guò)加密的,可以用來(lái)為不同的app保存敏感信息求摇,比如用戶名射沟,密碼等。iOS系統(tǒng)自己也用keychain來(lái)保存VPN憑證和Wi-Fi密碼与境。它是獨(dú)立于每個(gè)App的沙盒之外的验夯,所以即使App被刪除之后,Keychain里面的信息依然存在摔刁。

? ? ? ? 基于安全和獨(dú)立于app沙盒的兩個(gè)特性挥转,Keychain主要用于給app保存登錄和身份憑證等敏感信息,這樣只要用戶登錄過(guò)共屈,即使用戶刪除了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)和密碼寺擂。一般開(kāi)放平臺(tái)都會(huì)提供登錄SDK暇务,在這個(gè)SDK內(nèi)部就可以把登錄相關(guān)的信息都寫到keychain中,這樣如果多個(gè)app都集成了這個(gè)SDK怔软,那么就可以實(shí)現(xiàn)統(tǒng)一賬戶登錄了垦细。

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

3、UIPasteboard

? ? ? ?顧名思義家坎, UIPasteboard是剪切板功能嘱能,因?yàn)閕OS的原生控件UITextView,UITextField 虱疏、UIWebView惹骂,我們?cè)谑褂脮r(shí)如果長(zhǎng)按,就會(huì)出現(xiàn)復(fù)制做瞪、剪切对粪、選中右冻、全選、粘貼等功能著拭,這個(gè)就是利用了系統(tǒng)剪切板功能來(lái)實(shí)現(xiàn)的纱扭。而每一個(gè)App都可以去訪問(wèn)系統(tǒng)剪切板,所以就能夠通過(guò)系統(tǒng)剪貼板進(jìn)行App間的數(shù)據(jù)傳輸了儡遮。

? ? ? ?UIPasteboard的使用很簡(jiǎn)單乳蛾,

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

? ? ? ? ?(1).先復(fù)制淘口令到剪切板迟郎,

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

? ? ? ? (3).微信好友把淘口令復(fù)制到淘寶中,就可以打開(kāi)好友分享的淘寶鏈接了宪肖。

4表制、UIDocumentInteractionController

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

? ? ? ?首先通過(guò)調(diào)用它唯一的類方法 interactionControllerWithURL:蜕衡,并傳入一個(gè)URL(NSURL)壤短,為你想要共享的文件來(lái)初始化一個(gè)實(shí)例對(duì)象。然后UIDocumentInteractionControllerDelegate慨仿,然后顯示菜單和預(yù)覽窗口久脯。

5、local socket

? ? ? ? 這種方式不太常見(jiàn)镰吆,也是很容易被iOS開(kāi)發(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)航或者音樂(lè)類app。

? ? ? ?它是常用使用場(chǎng)景就是某個(gè)App1具有特殊的能力赃承,比如能夠跟硬件進(jìn)行通信妙黍,在硬件上處理相關(guān)數(shù)據(jù)。而App2則沒(méi)有這個(gè)能力瞧剖,但是它能給App1提供相關(guān)的數(shù)據(jù)拭嫁,這樣APP2跟App1建立本地socket連接,傳輸數(shù)據(jù)到App1抓于,然后App1在把數(shù)據(jù)傳給硬件進(jìn)行處理做粤。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肉康,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灼舍,更是在濱河造成了極大的恐慌迎罗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件片仿,死亡現(xiàn)場(chǎng)離奇詭異纹安,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)砂豌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門厢岂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人阳距,你說(shuō)我怎么就攤上這事塔粒。” “怎么了筐摘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵卒茬,是天一觀的道長(zhǎng)船老。 經(jīng)常有香客問(wèn)我,道長(zhǎng)圃酵,這世上最難降的妖魔是什么柳畔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮郭赐,結(jié)果婚禮上薪韩,老公的妹妹穿的比我還像新娘。我一直安慰自己捌锭,他們只是感情好俘陷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著观谦,像睡著了一般拉盾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豁状,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天盾剩,我揣著相機(jī)與錄音,去河邊找鬼替蔬。 笑死告私,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的承桥。 我是一名探鬼主播驻粟,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凶异!你這毒婦竟也來(lái)了蜀撑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剩彬,失蹤者是張志新(化名)和其女友劉穎酷麦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體喉恋,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沃饶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轻黑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊肤。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氓鄙,靈堂內(nèi)的尸體忽然破棺而出馆揉,到底是詐尸還是另有隱情,我是刑警寧澤抖拦,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布升酣,位于F島的核電站舷暮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏噩茄。R本人自食惡果不足惜下面,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巢墅。 院中可真熱鬧诸狭,春花似錦券膀、人聲如沸君纫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蓄髓。三九已至,卻和暖如春舒帮,著一層夾襖步出監(jiān)牢的瞬間会喝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工玩郊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肢执,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓译红,卻偏偏與公主長(zhǎng)得像预茄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦厚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容