现在很多 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 :会话的对方目标:
- 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 中添加了 <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];
- Related APIs :
- 清零群聊
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 为极光团队账号)
知乎专栏:极光日报