IOS即時聊天
方案
方案一:socket通信
iOS開發之即時通訊之Socket(AsyncSocket)
方案二:XMPP + OpenFire
引用:
XMPP(二)-基于asmack+openfire的安卓客戶端(仿QQ)的介紹以及個人心得
XMPP這塊兒,互相聊天并不需要雙方必須是好友關系
只需知道對方的JID即可收發消息,因此,許多應用也正是看中了這一點,來實現應用中的關注,粉絲等功能,而關注,取消關注,拉黑等功能是可以通過web服務實現的,而XMPP此時只充當了點對點的聊天功能,所以大家也不必糾結xmpp本身自帶的邀請好友了,同意好友申請了,獲取好友列表了等等,只需大致了解即可,重點是聊天過程的實現,以及客戶端跟服務端連接的穩定性
如果使用openfire的話,都是有兩個服務端的
- 一個是自己的web服務端,一個就是openfire服務端,像好友頭像,昵稱,性別,年齡,地址,以及類似陌陌的照片墻等信息數據都是可通過web服務來存取的
- 只需web數據庫跟openfire數據庫的用戶id對應起來即可,而只依靠openfire本身,這些資料的存取是無法實現的。
做這個項目時,本打算將web和of結合起來,來實現更復雜更貼近實戰的功能的,不過最后放棄了,應為這樣工作量太大了
聊天過程中,圖片,語音,視頻等信息如何通過xmpp傳輸
xmpp傳什么最快,傳什么最簡單?當然是字符串了!字符串中可以有什么?什么都可以有!因此,我們就可以將我們想要的信息都放進字符串中傳輸過去,對方收到消息后,解析之,便可得到一切你想要得到的東西,如本項目中,圖片,以及位置消息的實現,就是將圖片路徑或者位置坐標跟接收者以及發送者的信息以某特定間隔符間隔并組裝成一個字符串作為message的body發送過去(如:接收者* 發送者 * 消息類型 * 消息內容 * 發送時間 * 。。。等等等),對方收到消息后以“*”拆分便可得到所有信息,豈不快哉?因此,對于圖片語音視頻等類型的信息,我們都只需要其路徑即可,那么路徑又怎么獲得呢?就像我上面說的,配合web服務,現將圖片語音等上傳到web服務器獲取上傳成功后的路徑(這個不難吧),然后將路徑作為字符串發送給對方,對方接收到消息后按消息類型解析,并根據路徑下載圖片或語音
方案三:第三方平臺 --- 環信
iOS SDK 介紹
環信 SDK 為用戶開發 IM 相關的應用提供的一套完善的開發框架。包括以下幾個部分:
- SDK_Core: 為核心的消息同步協議實現,完成與服務器之間的信息交換。
- SDK: 是基于核心協議實現的完整的 IM 功能,實現了不同類型消息的收發、會話管理、群組、好友、聊天室等功能。
- EaseUI: 是一組 IM 相關的 UI 控件,旨在幫助開發者快速集成環信 SDK。
用戶可以基于我們提供的 Demo 實現自己的應用,也可以基于 SDK 開發自己應用。
SDK 采用模塊化設計,每一模塊的功能相對獨立和完善,用戶可以根據自己的需求選擇使用下面的模塊:
- EMClient: 是 SDK 的入口,主要完成登錄、退出、連接管理等功能。也是獲取其他模塊的入口。
- EMChatManager: 管理消息的收發,完成會話管理等功能。
- EMContactManager: 負責好友的添加刪除,黑名單的管理。
- EMGroupManager: 負責群組的管理,創建、刪除群組,管理群組成員等功能。
- EMChatroomManager: 負責聊天室的管理。
整合大致步驟:
Xcode
1. 環信管理后臺導入推送證書
2. 下載環信SDk
3. 導入依賴框架 framework
環信開發后臺
1.新建應用 獲取 AppKey
初始化代碼
-(void)IMInit
{
//AppKey:注冊的AppKey,詳細見下面注釋。
//apnsCertName:推送證書名(不需要加后綴),詳細見下面注釋。
EMOptions *options = [EMOptions optionsWithAppkey:@"ioscoder#shine"];
options.apnsCertName = @"ZJDevelopPush";
[[EMClient sharedClient] initializeSDKWithOptions:options];
}
整合EaseUI(根據實際需要) 使用官方API即可