現(xiàn)在很多 App 都需要集成 IM 功能,今天就為大家分享一下集成 IM 基本功能的步驟。本文內(nèi)容以 JMessage 為例。
極光 IM ( JMessage ) = 極光推送 ( JPush ) + IM,本篇只論述其中的 IM 部分,為大家快速集成 IM 功能提供一個(gè)簡明的范例。
我們先來看一下 IM 的基本功能與本文內(nèi)容的對應(yīng)關(guān)系:

line 0:準(zhǔn)備工作
line 1:引入頭文件
#import <JMessage/JMessage.h>
JMessage 核心頭文件。這是唯一需要導(dǎo)入到你的項(xiàng)目里的頭文件,它引用了內(nèi)部需要用到的頭文件。
line 2:開啟事件監(jiān)聽
[JMessage addDelegate:self withConversation:nil];
- 用于監(jiān)聽各種全局事件
- 建議寫在 line 3 之前
- Parameters:
- delegate:填入對象需要實(shí)現(xiàn) <JMessageDelegate>
- conversation:nil 監(jiān)聽所有通知,非 nil 監(jiān)聽指定會話
line 3:啟動 SDK
[JMessage setupJMessage:launchOptions
appKey:@"your appkey"
channel:@"channel name"
apsForProduction:NO
category:nil];
- 建議寫在
application:didFinishLaunchingWithOptions: - Parameters:
- launchOptions:啟動函數(shù)的參數(shù) launchingOption
- appKey:獲取方式 line 0 - 集成 SDK
- channel:應(yīng)用的渠道名
- isProduction:是否為生產(chǎn)模式
- category:iOS8 新增通知快捷按鈕參數(shù)
line 4:注冊新用戶
[JMSGUser registerWithUsername:@"username"
password:@"password"
completionHandler:^(id resultObject, NSError *error) {
}];
Parameters:
- username:用戶名
- password:密碼
- handler:error 為 nil 時(shí)調(diào)用成功(下均同)
line 5:登錄
[JMSGUser loginWithUsername:@"username"
password:@"password"
completionHandler:^(id resultObject, NSError *error) {
}];
line 6:創(chuàng)建單聊會話
[JMSGConversation createSingleConversationWithUsername:@"username"
completionHandler:^(id resultObject, NSError *error) {
}];
- 會話是整個(gè) IM 的核心,所有的消息行為都基于「會話」
- 該會話不存在會返回新會話,存在會返回已有會話
- Parameters:
- handler:正常返回時(shí) resultObject 為 JMSGConversation 會話對象
- ((JMSGConversation*)resultObject).target:會話的對方目標(biāo):
- Related APIs:
- 創(chuàng)建單聊跨應(yīng)用會話
- 創(chuàng)建群聊會話
line 7:發(fā)送文本消息
[(JMSGConversation*)resultObject sendTextMessage:@"text"];
- 轉(zhuǎn)型 line 6 - handler 中的
resultObject,并發(fā)送文本消息 - Related APIs:
- 發(fā)送圖片消息
- 發(fā)送語音消息
- 發(fā)送文件消息
- 發(fā)送地理位置消息
line 8~12:接收文本消息
- (void)onReceiveMessage:(JMSGMessage *)message error:(NSError *)error{
if (message.content == kJMSGContentTypeText) {
NSString *text = ((JMSGTextContent *)message.content).text;
}
}
- 在 line 2 中添加了 <JMessageDelegate> 的類,可以監(jiān)聽該方法
- 當(dāng) App 收到(文本、圖片等各類)消息時(shí)該方法被調(diào)用
- 根據(jù)
message.contentType判斷消息類型 - 轉(zhuǎn)型
message.content為文本內(nèi)容并獲取文本text以展示 UI - Related APIs:
- 圖片內(nèi)容
- 聲音內(nèi)容
- 文件內(nèi)容
line 13:獲取歷史消息
NSArray *messages = [(JMSGConversation*)resultObject messageArrayFromNewestWithOffset:nil limit:nil];
- 利用 line 6 中的
resultObject轉(zhuǎn)型后獲取 - 單聊群聊均可
- Parameters:
- 返回 NSArray<JMSGMessage* >
- offset:起點(diǎn)。nil 從最新一條開始,n 從最新第 n 條往歷史追查
- limit:數(shù)量。nil 表全部
line 14~15:清零單聊未讀消息數(shù)
JMSGConversation *conversation = [JMSGConversation singleConversationWithUsername:username];
[conversation clearUnreadCount];
- Related APIs:
- 清零群聊
line 16:獲取會話列表
[JMSGConversation allConversations:^(id resultObject, NSError *error) {
}];
- 批量獲取所有會話列表
- 根據(jù)會話類型判斷是單聊還是群聊
- Parameters:
- resultObject:NSArray<JMSGConversation*>
line 17:刪除單聊會話
BOOL success = [JMSGConversation deleteSingleConversationWithUsername:username];
- Related APIs:
- 刪除單聊跨應(yīng)用會話
- 刪除群聊會話
line 18:批量獲取用戶詳情
[JMSGUser userInfoArrayWithUsernameArray:nameArr completionHandler:^(id resultObject, NSError *error) {
}];
- Parameters:
- nameArray:NSArray<NSString*>
- resultObject:NSArray<JMSGUser*>
- Related APIs:
- 獲取本用戶詳情
- 修改本用戶詳情
- 修改本用戶密碼
line 19:創(chuàng)建群組及相關(guān)操作
[JMSGGroup createGroupWithName:name desc:desc memberArray:members completionHandler:^(id resultObject, NSError *error) {
}];
- Parameters:
- name:群名
- desc:群組描述
- memberArray:成員列表,NSArray<NSString*>
- resultObject:群組對象 JMSGGroup
- Related APIs:
- 獲取我的群組列表
- 獲取群組成員列表
- 添加成員
- 刪除成員
- 退群
- 獲取群組詳情
- 修改群組詳情
line 20:退出登錄
[JMSGUser logout:^(id resultObject, NSError *error) {
}];