iOS中Main App和Extensions之間通信

iOS中Main App和Extensions之間通信

本文主要介紹MMWormhole框架的使用, 該框架主要用來實現進程間的通信, 在iOS開發中我們經常需要app和extension之間進行數據通信,例如: app和widget之間的通信, 這時候我們就可以使用MMWormhole來實現.

基本原理

首先需要簡單介紹一下app groups的概念,下面是一段簡單的描述:

這是iOS8新開放的功能,在OS X上早就可用了。它主要用於同一group下的app共享同一份讀寫空間,以實現數據共享。
extension和containing app共同讀寫一份數據是很合理的需求,比如系統的股市應用,widget和app中都需要展示幾個公司的股票數據,這就可以通過App Groups實現。

其實MMWormhole也是基於這個實現的, 這種通信模式其實跟android中的content provider的形式很類似, 關於App Groups更深入的瞭解大家可以查閱相關資料, 這裏不詳細闡述了.

具體使用

這裏是效果圖:

這裏寫圖片描述

具體的使用方法也很簡單,大致分爲以下幾步:

1.初始化, 這裏需要使用group id, 也就是前面提到的app group.

self.wormhole = [[MMWormhole alloc] initWithApplicationGroupIdentifier:@"group.com.mutualmobile.wormhole"                                               optionalDirectory:@"wormhole"];

2.消息接受方註冊監聽

[self.wormhole listenForMessageWithIdentifier:@"messageIdentifier" 
 listener:^(id messageObject) {
    // Do Something
}];

3.消息發送方發送消息

[self.wormhole passMessageObject:@{@"titleString" : title} identifier:@"messageIdentifier"];

基於以上三步,也就基本實現了消息通信, 而且還能夠傳遞數據, 使用也非常方便.具體詳細的介紹,大家可以去github官網查看.

總結

其實, MMWormhole採用的是文件固化的方式,將具體的數據寫入app group中,然後實現進程間的通信,同時它的底層是基於CFNotificationCenter這種系統級消息機制實現的,來實現進程間的通信服務.

項目地址:https://github.com/mutualmobile/MMWormhole

發佈了40 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章