20 行代碼極速為 App 加上聊天功能,極速app
現在很多 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:填入對象需要實現 <JMessageDelegate>
- conversation:nil 監聽所有通知,非 nil 監聽指定會話
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:會話的對方目標:
- 使用者物件 JMSGUser
- 群組對象 JMSGGroup
- Related APIs:
line 7:發送簡訊
[(JMSGConversation*)resultObject sendTextMessage:@"text"];
- 轉型 line 6 - handler 中的
resultObject
,並發送簡訊
- Related APIs:
- 發送圖片訊息
- 發送語音訊息
- 傳送檔案訊息
- 發送地理位置訊息
line 8~12:接收簡訊
- (void)onReceiveMessage:(JMSGMessage *)message error:(NSError *)error{ if (message.content == kJMSGContentTypeText) { NSString *text = ((JMSGTextContent *)message.content).text; }}
- 在 line 2 中添加了 <JMessageDelegate> 的類,可以監聽該方法
- 當 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];
line 16:擷取會話列表
[JMSGConversation allConversations:^(id resultObject, NSError *error) {}];
- 批量擷取所有會話列表
- 根據會話類型判斷是單聊還是群聊
- Parameters:
- resultObject:NSArray<JMSGConversation*>
line 17:刪除單聊會話
BOOL success = [JMSGConversation deleteSingleConversationWithUsername:username];
line 18:批量擷取使用者詳情
[JMSGUser userInfoArrayWithUsernameArray:nameArr completionHandler:^(id resultObject, NSError *error) {}];
- Parameters:
- nameArray:NSArray<NSString*>
- resultObject:NSArray<JMSGUser*>
- Related APIs:
- 擷取本使用者詳情
- 修改本使用者詳情
- 修改本使用者密碼
line 19:建立群組及相關操作
[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) {}];
至此一個 IM 的各種基本操作就完了,是不是很簡單?
作者: pikacode - 極光( jpush 為極光團隊帳號)
原文:20 行代碼極速為 App 加上聊天功能
知乎專欄:極光日報