iOS App間常用的通信方式

背景:目前公司維護2個App,一個電商類項目惰帽,一個金融類項目橡淆;類似淘寶和支付寶召噩,很多時候需要在App之間進行通信,多次使用以后逸爵,查閱相關(guān)資料具滴,記錄相關(guān)信息,文章所描述的內(nèi)容如一下列表

  1. App間常用的通信方式
  2. 各種方式的優(yōu)缺點
URL Scheme

做iOS開發(fā)的都應該知道师倔,蘋果選擇沙盒的方式來保障用戶的隱私和安全构韵,App只能訪問自己的沙盒,同事禁止其他非系統(tǒng)的應用訪問App沙盒趋艘,大概意思就是疲恢,只有自己才能訪問自己的沙盒(蘋果系統(tǒng)除外)。因此蘋果需要提供了一個或多個可以在App之間跳轉(zhuǎn)的方法:URL Scheme就是其中一種瓷胧。如果你的App有被別的App訪問的功能或者數(shù)據(jù)显拳,那么你必須在你的App定義一個相對應的URL Scheme,這就是訪問你App的橋梁搓萧。當別的App使用一個URL Scheme進行訪問時杂数,系統(tǒng)會根據(jù)URL Scheme進行匹配,執(zhí)行相應的操作瘸洛。

優(yōu)點
  1. 這種跳轉(zhuǎn)方式是很靈活的揍移,只需要在.plist文件里面做簡單的處理,然后本地只需要需要進行簡單邏輯處理反肋,也可以用使用openURL來打開App對應的控制器那伐,而這個你想要打開的URL Scheme是可以動態(tài)的從服務器動態(tài)獲取的。那么這樣就很簡單的實現(xiàn)了動態(tài)跳轉(zhuǎn)囚玫。
  2. URL Scheme傳遞參數(shù)的方式也與URL一致喧锦,只需要簡單的在URL里附加上對應的參數(shù)即可。
  3. 這種頁面跳轉(zhuǎn)是無差別的抓督,通過URL Scheme跳轉(zhuǎn)可以無縫的在H5頁面和原生頁面之間跳轉(zhuǎn)傳值燃少,而無非做更多的邏輯判斷。
缺點
  1. 寫在info.plist文件中的Scheme可能會被一些反編譯手段獲取到铃在。
  2. URL Scheme可能會被劫持調(diào)來安全隱患
建議
  1. 蘋果可以限制 iOS 應用不能注冊別的應用的 Bundle ID 作為 URL Scheme阵具。這樣的話碍遍,使用自己的 Bundle ID 作為 URL Scheme 的接收器就會變的安全很多。

  2. 第三方應用可以通過①給自己發(fā)送 URL Scheme 請求來證明沒有被劫持阳液,如果沒有收到自己的 URL Scheme怕敬,就可以及時給用戶發(fā)送提醒;②利用 MobileCoreServices 服務中的 applicationsAvailableForHandlingURLScheme() 來查看所有注冊了該 URL Schemes 的應用和處理順序帘皿,從而檢測自己东跪、或者別人的 URL Scheme 是否被劫持。

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就可以在應用之間共享keychain中的數(shù)據(jù)的數(shù)據(jù)了

優(yōu)缺點
  1. 數(shù)據(jù)并不存放在App的Sanbox中威蕉,即使刪除了App,資料依然保存在keychain中橄仍。如果重新安裝了app韧涨,還可以從keychain獲取數(shù)據(jù)牍戚。
  2. keychain的數(shù)據(jù)可以用過group方式,讓程序可以在App間共享虑粥。不過得要相同TeamID
  3. keychain的數(shù)據(jù)是經(jīng)過加密的
UIPasteboard

在iOS的UI系統(tǒng)中如孝,有3個控件自帶剪切板操作,分別是UITextField娩贷、UITextView與UIWebView第晰。在這些控件的文字交互處進行長按手勢可以在屏幕視圖上喚出系統(tǒng)的剪切板控件,用戶可以進行復制彬祖、粘貼茁瘦,剪切等操作

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

去年面試螞蟻金服的時候還被問到這個問題,當時只是回到了了前面的URL Scheme和Keychain跳夭,現(xiàn)在終于有機會做一次這方面的只是整理涂圆,彌補自己在知識儲備方面的不足。

優(yōu)點

通用性币叹,只要需要識別特定的標識润歉,可以不受APP之間通信的影響

缺點

需要用戶手動處理

UIDocumentInteractionController

由于沙盒的嚴格限制,導致程序之間共享數(shù)據(jù)比較麻煩颈抚。一般在程序間共享文檔可以通過UIDocumentInteractionController類實現(xiàn)通訊踩衩。它支持在你的app中用其他app預覽和顯示文檔。同時也支持文件關(guān)聯(lián)贩汉,允許其他app通過你的程序打開文件驱富。這些技術(shù)包括了UIKit中提供的UIDocumentInteractionController類(UIDocumentInteractionController Class Reference),以及Quick Look框架(Quick Look Framework Reference)匹舞。

如果你的app需要打開它不支持的文件(PDF文件褐鸥、圖像文件,等等)策菜,或者需要將app的文件傳輸給另外一個允許接收此類型文件的app時晶疼【票幔可以使用文件交互控制器(UIDocumentInteractionController類的實例)為用戶提供可接收程序來處理文件,說的簡單點就是通過Quick Look框架判斷文檔是否能被另一個app打開和預覽翠霍。目前我們公司的文檔處理就是通過這來解決的锭吨。

//創(chuàng)建實例
NSURL *filePath = [NSURL fileURLWithPath:path];
UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
//顯示窗口
BOOL b = [documentController presentPreviewAnimated:YES];
local socket

這種我是提一次聽說,是翻閱了好多資料后才看到的寒匙,完全陌生零如。

這種方式不太常見,也是很容易被iOS開發(fā)者所忽略但是特別實用的一種方法锄弱。它的原理很簡單考蕾,一個App1在本地的端口port1234進行TCP的bind和listen,另外一個App2在同一個端口port1234發(fā)起TCP的connect連接会宪,這樣就可以建立正常的TCP連接肖卧,進行TCP通信了,那么就想傳什么數(shù)據(jù)就可以傳什么數(shù)據(jù)了掸鹅。
這種方式最大的特點就是靈活塞帐,只要連接保持著,隨時都可以傳任何相傳的數(shù)據(jù)巍沙,而且?guī)捵銐虼罂选K娜秉c就是因為iOS系統(tǒng)在任意時刻只有一個app在前臺運行,那么就要通信的另外一方具備在后臺運行的權(quán)限句携,像導航或者音樂類app榔幸。
它是常用使用場景就是某個App1具有特殊的能力,比如能夠跟硬件進行通信矮嫉,在硬件上處理相關(guān)數(shù)據(jù)削咆。而App2則沒有這個能力,但是它能給App1提供相關(guān)的數(shù)據(jù)蠢笋,這樣APP2跟App1建立本地socket連接态辛,傳輸數(shù)據(jù)到App1,然后App1在把數(shù)據(jù)傳給硬件進行處理挺尿。

參考資料

http://www.cocoachina.com/ios/20171229/21709.html
https://www.25pp.com/news/news_71805.html
http://www.reibang.com/p/d3185c70cc44
http://www.reibang.com/p/bf6b42470bba
https://developer.apple.com/documentation/uikit/uidocumentinteractioncontroller

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炊邦,隨后出現(xiàn)的幾起案子编矾,更是在濱河造成了極大的恐慌,老刑警劉巖馁害,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窄俏,死亡現(xiàn)場離奇詭異,居然都是意外死亡碘菜,警方通過查閱死者的電腦和手機凹蜈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門限寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仰坦,你說我怎么就攤上這事履植。” “怎么了悄晃?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵玫霎,是天一觀的道長。 經(jīng)常有香客問我妈橄,道長庶近,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任眷蚓,我火速辦了婚禮鼻种,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沙热。我一直安慰自己叉钥,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布校读。 她就那樣靜靜地躺著沼侣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歉秫。 梳的紋絲不亂的頭發(fā)上蛾洛,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音雁芙,去河邊找鬼轧膘。 笑死,一個胖子當著我的面吹牛兔甘,可吹牛的內(nèi)容都是我干的谎碍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼洞焙,長吁一口氣:“原來是場噩夢啊……” “哼蟆淀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起澡匪,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤熔任,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后唁情,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疑苔,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年甸鸟,在試婚紗的時候發(fā)現(xiàn)自己被綠了惦费。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兵迅。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖薪贫,靈堂內(nèi)的尸體忽然破棺而出恍箭,到底是詐尸還是另有隱情,我是刑警寧澤后雷,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布季惯,位于F島的核電站,受9級特大地震影響臀突,放射性物質(zhì)發(fā)生泄漏勉抓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一候学、第九天 我趴在偏房一處隱蔽的房頂上張望藕筋。 院中可真熱鬧,春花似錦梳码、人聲如沸隐圾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暇藏。三九已至,卻和暖如春濒蒋,著一層夾襖步出監(jiān)牢的瞬間盐碱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工沪伙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓮顽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓围橡,卻偏偏與公主長得像暖混,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翁授,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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