1. 程式人生 > >iOS 不同App間通訊的方式

iOS 不同App間通訊的方式

 iOS系統是相對封閉的系統,App各自在各自的沙盒(sandbox)中執行,每個App都只能讀取系統為該應用程式程式建立的資料夾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的喚起。典型的使用場景就是各開放平臺SDK的分享功能。

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典型的使用場景就是淘寶跟微信/QQ的連結分享。由於騰訊和阿里的公司戰略,騰訊在微信和qq中都遮蔽了淘寶的連結。那如果淘寶使用者想通過QQ或者微信跟好友分享某個淘寶商品,怎麼辦呢? 阿里的工程師就巧妙的利用剪貼簿實現了這個功能。首先淘寶app中將連結自定義成淘口令,引導使用者進行復制,並去QQ好友對話中貼上。然後QQ好友收到訊息後再開啟自己的淘寶app,淘寶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通訊方式

 iOS系統是相對封閉的系統,App各自在各自的沙盒(sandbox)中執行,每個App都只能讀取系統為該應用程式程式建立的資料夾AppData下的內容,不能隨意跨越自己的沙盒去訪問別的App沙盒中的內

75.iOS使用KeyChain儲存資料與不同App共享資料

//研究了一天發現網路上大部分關於keychain的講解都不詳細......自己更是踩雷踩了一天才把KeyChain使用與共享資料研究成功分享到這裡希望大家不用再勞累這麼一次 Apple文件上說

springcloud 服務通訊方式 Ribbon

檢視Ribbon :https://blog.csdn.net/qq_32534855/article/details/84111188 1.Eureka服務發現 product 啟動了兩個例項 2.RestTemplate RestTemplate 參考:https:

三層交換機實現不同vlan通訊

1.器材 二層交換機為神州數碼DCS-3950,路由交換機為神州數碼DCRS-5650,路由器為神州數碼DCR-2600。 2.原理 2.1交換機的帶外管理和帶內管理 交換機的管理方式可以分為帶內管理和帶外管理兩種管理模式。所謂帶內管理,是指管理控制資訊與資料業務資訊通過

linux 程序通訊方式

1 無名管道通訊 無名管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。 2 高階管道通訊 高階管道(popen):將另一個程式當做一個新的程序在當前程式程序中啟動,則它算是當前程式的子程序

Linux下程序通訊方式 - UNIX Domain Socket

概述 Linux下程序通訊方式有很多,比較典型的有套接字,平時比較常用的套接字是基於TCP/IP協議的,適用於兩臺不同主機上兩個程序間通訊, 通訊之前需要指定IP地址. 但是如果同一臺主機上兩個程序間通訊用套接字,還需要指定ip地址,有點過於繁瑣. 這個時候就需要用到UNIX Domain Sock

面試必問:程序與執行緒的異同以及程序通訊方式

秋招面試必問的題目,感覺今年被問了差不多10次了。 1.程序與執行緒 程序:具有獨立功能的程式關於某個資料集合上的一次執行活動。 執行緒:程序的一個實體。 比喻:一列火車是一個程序,火車的每一節車廂是執行緒。 2.程序與執行緒的聯絡 ①一個執行緒只能屬於一個程序,一個程序

Vue.js元件通訊方式總結

  平時在使用Vue框架的業務開發中,元件不僅僅要把模板的內容進行復用,更重要的是元件之間要進行通訊。元件之間通訊分為三種:父-子;子-父;跨級元件通訊。下面,就元件間如何通訊做一些總結。 1.父元件到子元件通過props通訊 在元件中,使用選項props來宣告需要從父級元件接受的資料,props的值可以

springcloud 服務通訊方式 Feign

檢視Feign :https://blog.csdn.net/qq_32534855/article/details/84111316 1.Eureka服務發現 2.pom檔案 pom檔案新增 <dependency> <groupId>org.

React】歸納篇(十)元件通訊方式之Redux | UI元件AntDesign | Redux-react

react-router4 react-router概覽 1、react的一個外掛庫 2、專門用於實現一個SPA應用 3、基於react的專案都會用到該庫 SPA 1、點選頁面中的連結不會重新整理頁面,本身也不會向伺服器傳送請求 2、點選路由連結時,只會發

最快的程序通訊方式你get了麼

  前言:天下武功為快不破!在資訊爆炸、快速發展的新時代...,扯遠了...。程序間通訊方式有很多,但最快的方式你知道麼?由我娓娓道來...   一、共享記憶體方式   主角閃亮登場了,噔噔瞪...,最快的方式就是共享記憶體了。實現共享記憶體的方式主要有兩種: 儲存對映I/O mmap函式實現 s

嵌入式Linux併發程式設計,程序通訊方式,System V IPC,訊號燈集,建立/開啟semget(),初始化semctl(),P/V操作semop(),sembuf結構體定義

文章目錄 1,System V IPC - 訊號燈 2,System V IPC - 訊號燈特點 3,System V訊號燈使用步驟 3.1,訊號燈建立/開啟 semget() 3.2,訊號燈初始化 semctl()

嵌入式Linux併發程式設計,程序通訊方式,System V IPC,訊息佇列,開啟/建立msgget(), 傳送訊息msgsnd(),格式,接收訊息msgrcv(),控制訊息佇列 msgctl()

文章目錄 1,訊息佇列 2,訊息佇列結構 3,訊息佇列使用步驟 3.1,開啟/建立訊息佇列 msgget() 3.1.1,開啟/建立訊息佇列---示例msgget() 3.2,向訊息佇列傳送訊息 msgs

嵌入式Linux併發程式設計,程序通訊方式,System V IPC物件,ftok(),共享記憶體使用步驟,建立shmget(),對映shmat(),撤銷對映shmdt(),控制shmctl(),注意

文章目錄 1,System V IPC 2,使用IPC物件的大致流程 3,生成KEY值ftok() ftok示例 4,共享記憶體 4.1,共享記憶體使用步驟 4.2,共享記憶體建立 shmget()

java執行緒通訊方式

1.同步 就是通過Synchronized關鍵字來進行同步訪問控制,確保誰拿到了相應的鎖才能執行相應的操作 本質上就是共享記憶體式的通訊,這個共享記憶體在java的記憶體模型中就是主記憶體,相當於通過主記憶體的資料進行執行緒通訊。因Synchronized解鎖時會將工作記

(三)程序通訊方式-----訊息佇列

訊息佇列 訊息佇列,是訊息的連結表,存放在核心中。一個訊息佇列由一個識別符號(即佇列ID)來標識。使用者程序可以向訊息佇列新增訊息,也可以向訊息佇列讀取訊息。 同管道檔案相比,訊息佇列中的每個訊息指定特定的訊息型別,接收的時候可以不需要按照佇列次序讀取,可以根據自定義型別

Linux程序通訊方式一:有名管道FIFO

有名管道 我們經常把FIFO稱為有名管道(命名管道)。使用它可以實現兩個不相干的程序之間的通訊。它雖然被稱之為檔案,但是管道檔案在磁碟上只有一個inode結點,這個ionde結點指向的是記憶體中的一塊區域,當A程序建立並使用有名管道時,直接把資料寫入記憶體中,而B程序也是直

嵌入式Linux併發程式設計,程序通訊方式,無名管道,無名管道特點,無名管道建立pipe(),獲取管道大小,管道斷裂

1,Linux下的程序間通訊機制 Linux下的程序間通訊機制 應用 早期UNIX程序間通訊方式(很多是從Unix繼承的) 無名管道(pipe) 本地通訊,用於一臺計算機內部不同程序之間的通訊

嵌入式Linux併發程式設計,程序通訊方式,有名管道,有名管道特點,有名管道建立mkfifo()

1,有名管道的特點 對應管道檔案,可用於任意程序之間進行通訊:有名管道建立好之後,在系統中有實際的檔案和有名管道對應,任意兩個程序可以通過路徑和檔名指定同一個有名管道進行通訊 開啟管道時可指定讀寫方式:有名管道用open()開啟的時候可以指定不同的讀寫方

嵌入式Linux併發程式設計,程序通訊方式,訊號,訊號機制,檢視新號kill -l,常用訊號,發訊號命令kill [-signal] pid、killall [-u user | prog]

1,訊號機制 訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式 (一個程序在任何條件下,都可以隨時的接收訊號,不需要其他的處理) Linux核心通過訊號通知使用者程序,不同的訊號型別代表不同的事件 Linux對早期的unix訊號機制進行了擴充