iOS App間常用的五種通訊方式
iOS系統是相對封閉的系統,App各自在各自的沙盒(sandbox)中執行,每個App都只能讀取iPhone上iOS系統為該應用程式程式建立的資料夾AppData下的內容,不能隨意跨越自己的沙盒去訪問別的App沙盒中的內容。
所以iOS 的系統中進行App間通訊的方式也比較固定,常見的app間通訊方式以及使用場景總結如下。
1、URL Scheme
這個是iOS app通訊最常用到的通訊方式,App1通過openURL的方法跳轉到App2,並且在URL中帶上想要的引數,有點類似http的get請求那樣進行引數傳遞。這種方式是使用最多的最常見的,使用方法也很簡單隻需要源App1在info.plist中配置LSApplicationQueriesSchemes,指定目標App2的scheme;然後在目標App2的info.plist中配置好URL types,表示該app接受何種URL scheme的喚起。
2、Keychain
iOS系統的Keychain是一個安全的儲存容器,它本質上就是一個sqllite資料庫,它的位置儲存在/private/var/Keychains/keychain-2.db,不過它所儲存的所有資料都是經過加密的,可以用來為不同的app儲存敏感資訊,比如使用者名稱,密碼等。iOS系統自己也用keychain來儲存VPN憑證和Wi-Fi密碼。它是獨立於每個App的沙盒之外的,所以即使App被刪除之後,Keychain裡面的資訊依然存在。
基於安全和獨立於app沙盒的兩個特性,Keychain主要用於給app儲存登入和身份憑證等敏感資訊,這樣只要使用者登入過,即使使用者刪除了app重新安裝也不需要重新登入。
那Keychain用於App間通訊的一個典型場景也和app的登入相關,就是統一賬戶登入平臺。使用同一個賬號平臺的多個app,只要其中一個app使用者進行了登入,其他app就可以實現自動登入不需要使用者多次輸入賬號和密碼。一般開放平臺都會提供登入SDK,在這個SDK內部就可以把登入相關的資訊都寫到keychain中,這樣如果多個app都整合了這個SDK,那麼就可以實現統一賬戶登入了。
Keychain的使用比較簡單,使用iOS系統提供的類KeychainItemWrapper,並通過keychain access groups就可以在應用之間共享keychain中的資料的資料了。
3、UIPasteboard
顧名思義, UIPasteboard是剪下板功能,因為iOS的原生控制元件UITextView,UITextField 、UIWebView,我們在使用時如果長按,就會出現複製、剪下、選中、全選、貼上等功能,這個就是利用了系統剪下板功能來實現的。而每一個App都可以去訪問系統剪下板,所以就能夠通過系統剪貼簿進行App間的資料傳輸了。
UIPasteboard的使用很簡單,
UIPasteboard典型的使用場景就是淘寶跟微信/QQ的連結分享,淘寶app每次從後臺切到前臺時,會檢查系統剪下板中是否有淘口令,如果有淘口令就進行解析並跳轉到對於的商品頁面。
4、UIDocumentInteractionController
UIDocumentInteractionController主要是用來實現同裝置上app之間的共享文件,以及文件預覽、列印、發郵件和複製等功能。它的使用非常簡單.
首先通過呼叫它唯一的類方法 interactionControllerWithURL:,並傳入一個URL(NSURL),為你想要共享的檔案來初始化一個例項物件。然後UIDocumentInteractionControllerDelegate,然後顯示選單和預覽視窗。
效果如下,
5、local socket
這種方式不太常見,也是很容易被iOS開發者所忽略但是特別實用的一種方法。它的原理很簡單,一個App1在本地的埠port1234進行TCP的bind和listen,另外一個App2在同一個埠port1234發起TCP的connect連線,這樣就可以建立正常的TCP連線,進行TCP通訊了,那麼就想傳什麼資料就可以傳什麼資料了。
這種方式最大的特點就是靈活,只要連線保持著,隨時都可以傳任何相傳的資料,而且頻寬足夠大。它的缺點就是因為iOS系統在任意時刻只有一個app在前臺執行,那麼就要通訊的另外一方具備在後臺執行的許可權,像導航或者音樂類app。
它是常用使用場景就是某個App1具有特殊的能力,比如能夠跟硬體進行通訊,在硬體上處理相關資料。而App2則沒有這個能力,但是它能給App1提供相關的資料,這樣APP2跟App1建立本地socket連線,傳輸資料到App1,然後App1在把資料傳給硬體進行處理。
相關文章
- iOS app之間通訊方式iOSAPP
- 程式間的五種通訊方式介紹
- 程式間的五種通訊方式介紹-詳解
- 程式間的幾種通訊方式
- Vue元件之間通訊的三種方式Vue元件
- vue3 常用的幾種元件通訊方式Vue元件
- 什麼是程式間通訊?Linux程式間通訊有幾種方式?Linux
- 程式間通訊是什麼?Linux程式間通訊有幾種方式?Linux
- vue通訊的N種方式Vue
- 程式間的八種通訊方式----共享記憶體是最快的 IPC 方式記憶體
- Vue 元件間的通訊方式Vue元件
- T面試題:程式間的通訊方式有哪幾種?面試題
- Vue中元件間通訊的方式Vue元件
- React中元件間通訊的方式React元件
- [譯] iOS App 上一種靈活的路由方式iOSAPP路由
- iOS App中可拆卸一個framework的兩種方式iOSAPPFramework
- React中元件之間通訊的方式React元件
- 程式間通訊方式有哪些?
- Python常用的資料儲存方式有哪些?五種!Python
- iOS GCD執行緒之間的通訊iOSGC執行緒
- 通過 App Groups 實現程式間通訊APP
- React的6種通訊方式(附帶例子)React
- Vue3 的8種元件通訊方式Vue元件
- React Components之間的通訊方式瞭解下React
- SpringCloud-服務間通訊方式SpringGCCloud
- Linux程式間通訊有幾種方式?這8個你都知道嗎?Linux
- Vue.js 父子元件通訊的1212種方式Vue.js元件
- nginx與php-fpm通訊的兩種方式NginxPHP
- Linux 程式間通訊的六種機制Linux
- C++程式間通訊的十一種方法C++
- 前端學習(2370):元件之間的通訊方式前端元件
- 前端學習(2371):元件之間的通訊方式前端元件
- Flutter 頁面間資料傳遞(共享)的幾種常用方式Flutter
- Go中協程間通訊的方式Sync.CondGo
- IOS逆向--Tweak和app互動方案【程式通訊】iOSAPP
- Java 常用的 4 種加密方式Java加密
- 在Linux中,程序間通訊方式有哪些?Linux
- java建立物件的五種方式Java物件
- Spring Boot的五種部署方式Spring Boot