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

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

1133568-af489a3475a8a8a8.jpeg

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

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

1习勤、URL Scheme

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

1133568-06dad89c4fef9a07.jpeg

典型的使用場景就是各開放平臺SDK的分享功能治拿,如分享到微信朋友圈微博等,或者是支付場景笆焰。比如從滴滴打車結(jié)束行程跳轉(zhuǎn)到微信進(jì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用戶進(jìn)行了登錄峭咒,其他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ù)了遗增。

1133568-f99bf794651985b9.jpeg

3叫惊、UIPasteboard

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

UIPasteboard的使用很簡單卸奉,

1133568-c8a3903f02f13202.jpeg

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

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

1133568-f2d61b84223ba0bd.jpeg

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

1133568-3e98dd74dc80d633.jpeg

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

1133568-88190f2414e3a862.jpeg

4栓票、UIDocumentInteractionController

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

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

1133568-3e56cb818743036f.jpeg

效果如下婴渡,

1133568-334400db0f39eca3.jpeg

5幻锁、local socket

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

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

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

1133568-702c898f903817c0.jpeg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末几缭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沃呢,更是在濱河造成了極大的恐慌年栓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件樟插,死亡現(xiàn)場離奇詭異韵洋,居然都是意外死亡,警方通過查閱死者的電腦和手機黄锤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來食拜,“玉大人鸵熟,你說我怎么就攤上這事「旱椋” “怎么了流强?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵痹届,是天一觀的道長。 經(jīng)常有香客問我打月,道長队腐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任奏篙,我火速辦了婚禮柴淘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秘通。我一直安慰自己为严,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布肺稀。 她就那樣靜靜地躺著第股,像睡著了一般。 火紅的嫁衣襯著肌膚如雪话原。 梳的紋絲不亂的頭發(fā)上夕吻,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音繁仁,去河邊找鬼涉馅。 笑死,一個胖子當(dāng)著我的面吹牛改备,可吹牛的內(nèi)容都是我干的控漠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼悬钳,長吁一口氣:“原來是場噩夢啊……” “哼盐捷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起默勾,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤碉渡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后母剥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滞诺,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年环疼,在試婚紗的時候發(fā)現(xiàn)自己被綠了习霹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡炫隶,死狀恐怖淋叶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伪阶,我是刑警寧澤煞檩,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布处嫌,位于F島的核電站,受9級特大地震影響斟湃,放射性物質(zhì)發(fā)生泄漏熏迹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一凝赛、第九天 我趴在偏房一處隱蔽的房頂上張望注暗。 院中可真熱鬧,春花似錦哄酝、人聲如沸友存。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屡立。三九已至,卻和暖如春搀军,著一層夾襖步出監(jiān)牢的瞬間膨俐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工罩句, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焚刺,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓门烂,卻偏偏與公主長得像乳愉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屯远,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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