現在很多 App 都需要整合 IM 功能,今天就為大家分享一下整合 IM 基本功能的步驟。本文內容以 JMessage 為例。
極光 IM ( JMessage ) = 極光推送 ( JPush ) + IM,本篇只論述其中的 IM 部分,為大家快速整合 IM 功能提供一個簡明的範例。
我們先來看一下 IM 的基本功能與本文內容的對應關係:
line 0:準備工作
line 1:引入標頭檔案
#import <JMessage/JMessage.h>複製程式碼
JMessage 核心標頭檔案。這是唯一需要匯入到你的專案裡的標頭檔案,它引用了內部需要用到的標頭檔案。
line 2:開啟事件監聽
[JMessage addDelegate:self withConversation:nil];複製程式碼
- 用於監聽各種全域性事件
- 建議寫在 line 3 之前
- Parameters:
- delegate:填入物件需要實現
- conversation:nil 監聽所有通知,非 nil 監聽指定會話
- delegate:填入物件需要實現
line 3:啟動 SDK
[JMessage setupJMessage:launchOptions
appKey:@"your appkey"
channel:@"channel name"
apsForProduction:NO
category:nil];複製程式碼
- 建議寫在
application:didFinishLaunchingWithOptions:
- Parameters:
- launchOptions:啟動函式的引數 launchingOption
- appKey:獲取方式 line 0 - 整合 SDK
- channel:應用的渠道名
- isProduction:是否為生產模式
- category:iOS8 新增通知快捷按鈕引數
line 4:註冊新使用者
[JMSGUser registerWithUsername:@"username"
password:@"password"
completionHandler:^(id resultObject, NSError *error) {
}];複製程式碼
Parameters:
- username:使用者名稱
- password:密碼
- handler:error 為 nil 時呼叫成功(下均同)
line 5:登入
[JMSGUser loginWithUsername:@"username"
password:@"password"
completionHandler:^(id resultObject, NSError *error) {
}];複製程式碼
line 6:建立單聊會話
[JMSGConversation createSingleConversationWithUsername:@"username"
completionHandler:^(id resultObject, NSError *error) {
}];複製程式碼
- 會話是整個 IM 的核心,所有的訊息行為都基於「會話」
- 該會話不存在會返回新會話,存在會返回已有會話
- Parameters:
- handler:正常返回時 resultObject 為 JMSGConversation 會話物件
- ((JMSGConversation*)resultObject).target:會話的對方目標:
- Related APIs:
line 7:傳送文字訊息
[(JMSGConversation*)resultObject sendTextMessage:@"text"];複製程式碼
line 8~12:接收文字訊息
- (void)onReceiveMessage:(JMSGMessage *)message error:(NSError *)error{
if (message.content == kJMSGContentTypeText) {
NSString *text = ((JMSGTextContent *)message.content).text;
}
}複製程式碼
- 在 line 2 中新增了
的類,可以監聽該方法 - 當 App 收到(文字、圖片等各類)訊息時該方法被呼叫
- 根據
message.contentType
判斷訊息型別 - 轉型
message.content
為文字內容並獲取文字text
以展示 UI - Related APIs:
line 13:獲取歷史訊息
NSArray *messages = [(JMSGConversation*)resultObject messageArrayFromNewestWithOffset:nil limit:nil];複製程式碼
- 利用 line 6 中的
resultObject
轉型後獲取 - 單聊群聊均可
- Parameters:
- 返回 NSArray<JMSGMessage* >
- offset:起點。nil 從最新一條開始,n 從最新第 n 條往歷史追查
- limit:數量。nil 表全部
line 14~15:清零單聊未讀訊息數
JMSGConversation *conversation = [JMSGConversation singleConversationWithUsername:username];
[conversation clearUnreadCount];複製程式碼
- Related APIs:
line 16:獲取會話列表
[JMSGConversation allConversations:^(id resultObject, NSError *error) {
}];複製程式碼
- 批量獲取所有會話列表
- 根據會話型別判斷是單聊還是群聊
- Parameters:
- resultObject:NSArray
- resultObject:NSArray
line 17:刪除單聊會話
BOOL success = [JMSGConversation deleteSingleConversationWithUsername:username];複製程式碼
line 18:批量獲取使用者詳情
[JMSGUser userInfoArrayWithUsernameArray:nameArr completionHandler:^(id resultObject, NSError *error) {
}];複製程式碼
line 19:建立群組及相關操作
[JMSGGroup createGroupWithName:name desc:desc memberArray:members completionHandler:^(id resultObject, NSError *error) {
}];複製程式碼
- Parameters:
- name:群名
- desc:群組描述
- memberArray:成員列表,NSArray
- resultObject:群組物件 JMSGGroup
- Related APIs:
line 20:退出登入
[JMSGUser logout:^(id resultObject, NSError *error) {
}];複製程式碼