帮助与文档

> >

一、获取AppKey

如何在我们的官网注册应用得到appkey,请点击链接看里面的操作步骤。

二、下载客户端SDK

 

请从官网下载客户端SDK,解压后可得到如下文件夹目录:

 

说明:

  • Sample文件夹里存放MobIMDemo - MobIM的演示demo(供使用参考)
  • SDK文件夹下的MobIM文件夹里存放MobIM.framework和MobIM.bundle - 核心功能库(必要)
  • SDK文件夹下的Required文件夹里存放MOBFoundation.framework和MOBFoundationEx.framework - 基础功能框架(必要)

三、快速集成SDK

一、iOS 项目配置

1.在项目中添加SDK

i.将整个SDK文件,包含MobIM.framework,MobIM.bundle,MOBFoundation.framework,MOBFoundationEx.framework添加到项目中,如下图:

802B55CA-DDD0-41AF-ACE2-3E4E6B363DF2

ii. 选择将文件夹复制到项目中,如下图:

iii. 添加依赖库

选择项目Target - Build Phases - Link Binary With Libraries,然后选择“+”进行添加系统库:

 

libsqlite3

libz1.2.5

libstdc++6.0.9

JavaScriptCore.framework

2.在Info.plist文件中右键空白处,选择“Add Row”,添加“MOBAppKey”和“MOBAppSecret”对应值为上述在管理后台中获得的AppKey和AppSecret(点击“显示App Secret”查看),如下图所示:

无需代码即可完成MobIM的初始化工作。

二、基础功能接入

1.用户系统映射代码

用户有自己的用户系统时,需要在登录后,与MOBFUser进行关系映射,示例代码如下:

先引入头文件

#import <MOBFoundation/MobSDK.h>

//对接MOBIMSDK 用户体系
[MobSDK setUserWithUid:@"mobim666"
                          nickName:@"MobIM测试用户"
                            avatar:@"http://download.sdk.mob.com/e72/83d/e247e8b45bd557f70ac6dcc0cb.png"
                          userData:nil];

2.请求会话列表

用户在搭建好自己的“会话”界面UI后,一般情况下需要先请求一次历史会话记录,示例代码如下:

先引入头文件

#import <MobIM/MIMChatManager.h>
 /**
 网络获取,通过网络接口获取

 @param conversationList 会话列表
 @param completionHandler 完成回调
 */
 [[MobIM getChatManager] getConversationListOnCompletion:^(NSArray<MIMConversation *> *conversationList, MIMError *error) {
    // 处理请求到的conversationList数据并展示
 }];

 

注意:以上方法一般仅在应用首次启动的时候调用,调用后会话记录会被MobIM自动缓存,下次启动时只需要从本地读取即可。

本地读取会话列表示例代码如下:

 /**
 本地获取,主要是存储在本地的数据
 
 @param conversationList 会话列表
 @param completionHandler 完成回调
 */
 [[MobIM getChatManager] getLocalConversationList:^(NSArray<MIMConversation *> *conversationList) {
    // 处理读取到的conversationList数据并展示
 }];

 

会话列表读取并展示完毕后即需要监听会话列表的变更,此监听主要是为了及时收到与会话列表相关的变化,从而及时刷新会话列表界面相关数据展示,示例代码如下:

 /**
  监听本地会话列表变更,当本地会话列表变化时通过block回调
 
 @param changeType 会话变更类型(插入,删除,移动,更新)
 @param conversationList 会话列表
 */
 [[MobIM getChatManager] onLocalConversationListResultChanged:^(MIMConversation *changedConversation, NSFetchedResultsChangeType changeType) {
    // 通过changedConversation可以得知是哪个conversation变化了,从而处理对应的会话
    // 通过changeType可以判断该会话的变更类型,从而作出准确的UI操作展示判断
  }];  

3.消息发送

(1).发送文本消息代码

先引入头文件

#import <MobIM/MIMTextMessageBody.h>
#import <MobIM/MIMMessage.h>
/**
初始化文字消息体
 
@param text 文字内容
@return 文字消息体实例
*/
MIMTextMessageBody *body = [MIMTextMessageBody bodyWithText:@"你好"];

/**
初始化消息对象

@param type 会话类型
@param to 单聊时,此参数为接收人的appUserId,群聊时,此参数为群组id
@param body 消息体
@return 消息对象
*/
MIMMessage *message = [MIMMessage messageWithConversationType:MIMConversationTypeSingle
                                                               to:@"bb123456"
                                                             body:body];
/**
发送消息
 
@param msg 消息对象
@param completionHandler 完成回调
*/
[[MobIM getChatManager] sendMessage:message completion:^(MIMMessage *message, MIMError *error) {
    // 在此处理消息发送的回调,error为空时消息发送成功,此时回调回来的message会有相应的信息变更,可以根据回调回来的消息相关信息做对应展示
}];

(2).发送图片消息代码

先引入头文件

#import <MobIM/MIMImageMessageBody.h>
/**
初始化图片消息体
 
@param localPath 文件本地路径
@return 图片消息体实例
*/
MIMImageMessageBody *body  = [MIMImageMessageBody bodyWithLocalPath:@"/User/aa.png"];

// 初始化图片消息体也可以使用如下方法:
/**
初始化图片消息体
 
@param image UIImage对象
@return 图片消息体实例
*/
// MIMImageMessageBody *imageBody = [MIMImageMessageBody bodyWithImage:[UIImage imageNamed:@"image.jpg"]];

/**
初始化消息对象

@param type 会话类型
@param to 单聊时,此参数为接收人的appUserId,群聊时,此参数为群组id
@param body 消息体
@return 消息对象
*/
MIMMessage *message = [MIMMessage messageWithConversationType:MIMConversationTypeSingle
                                                               to:@"123456"
                                                             body:body];
/**
发送消息
 
@param msg 消息对象
@param completionHandler 完成回调
*/
[[MobIM getChatManager] sendMessage:message completion:^(MIMMessage *message, MIMError *error) {
    // 在此处理消息发送的回调,error为空时消息发送成功,此时回调回来的message会有相应的信息变更,可以根据回调回来的消息相关信息做对应展示
}];

(3).发送语音消息代码

先引入头文件

#import <MobIM/MIMVoiceMessageBody.h>
/**
初始化语音消息体
 
@param localPath 语音本地路径
@param duration 语音时长
@return 语音消息体实例
*/
MIMVoiceMessageBody *voiceBody = [MIMVoiceMessageBody bodyWithLocalPath:path duration:duration];

/**
初始化消息对象

@param type 会话类型
@param to 单聊时,此参数为接收人的appUserId,群聊时,此参数为群组id
@param body 消息体
@return 消息对象
*/
MIMMessage *message = [MIMMessage messageWithConversationType:MIMConversationTypeSingle
                                                               to:@"123456"
                                                             body:body];
/**
发送消息
 
@param msg 消息对象
@param completionHandler 完成回调
*/
[[MobIM getChatManager] sendMessage:message completion:^(MIMMessage *message, MIMError *error) {
    // 在此处理消息发送的回调,error为空时消息发送成功,此时回调回来的message会有相应的信息变更,可以根据回调回来的消息相关信息做对应展示
}];

(4).发送视频消息代码

先引入头文件

#import <MobIM/MIMVideoMessageBody.h>
NSString *path = [[NSBundle mainBundle] pathForResource:@"boom" ofType:@"mp4"];
UIImage *image = [[MIMUtil defaultUtil] thumbnailImageForVideo:path atTime:10]; // 获取视频某一帧截图的方法,请开发者自行编写
/**
初始化视频消息体
 
@param thumbnailImage 视频展示缩略图,即视频某一帧的截图
@param localPath 视频文件本地路径
@return 视频消息体实例
*/
MIMVideoMessageBody *videoBody = [MIMVideoMessageBody bodyWithThumbnailImage:image
                                                                           localPath:path];

/**
初始化消息对象

@param type 会话类型
@param to 单聊时,此参数为接收人的appUserId,群聊时,此参数为群组id
@param body 消息体
@return 消息对象
*/
MIMMessage *message = [MIMMessage messageWithConversationType:MIMConversationTypeSingle
                                                               to:@"123456"
                                                             body:body];
/**
发送消息
 
@param msg 消息对象
@param completionHandler 完成回调
*/
[[MobIM getChatManager] sendMessage:message completion:^(MIMMessage *message, MIMError *error) {
    // 在此处理消息发送的回调,error为空时消息发送成功,此时回调回来的message会有相应的信息变更,可以根据回调回来的消息相关信息做对应展示
}];

(5).发送文件消息代码

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"docx"];
/**
初始化文件消息体
 
@param localPath 文件本地路径
@return 文件消息体实例
*/
MIMFileMessageBody *fileBody = [MIMFileMessageBody bodyWithLocalPath:path];

/**
初始化消息对象

@param type 会话类型
@param to 单聊时,此参数为接收人的appUserId,群聊时,此参数为群组id
@param body 消息体
@return 消息对象
*/
MIMMessage *message = [MIMMessage messageWithConversationType:MIMConversationTypeSingle
                                                               to:@"123456"
                                                             body:body];
/**
发送消息
 
@param msg 消息对象
@param completionHandler 完成回调
*/
[[MobIM getChatManager] sendMessage:message completion:^(MIMMessage *message, MIMError *error) {
    // 在此处理消息发送的回调,error为空时消息发送成功,此时回调回来的message会有相应的信息变更,可以根据回调回来的消息相关信息做对应展示
}];

4.消息接收

MobIM中设计的回调基本采用block形式处理,接收消息也是同样的方式,接收消息示例代码如下:

先引入头文件

#import <MobIM/MIMChatManager.h>
/**
接收消息时回调

@param handlerIdentifier 接收消息回调的唯一标识符,该标识不能为空或空字符串,其作用是用于在不需要时进行移除。例如:当进入和某个人聊天界面时需要调用该方法,当返回时“聊天界面控制器”销毁(dealloc)时需要调用下面的方法移除该监听.
@param messageHandler 处理接收到的消息block
*/
[[MobIM getChatManager] onMessageReceivedWithIdentifier:@"MobIM" messageHandler:^(MIMMessage *message) {
    NSLog(@"接收到消息: %@", message);
}];

设置了消息接收的监听后,如果不是要作为全局监听来使用的,那么就一定要在不需要的时候移除相应的监听,移除监听代码示例如下:

/**
 移除接收到消息的监听block

 @param handlerIdentifier block标识符
 */
[[MobIM getChatManager] removeMessageHandlerForIdentifier:@"MobIM"];

三、群组功能接入

1. 创建群组

声明:所有群组相关的操作都由MobIM内部维护,用户无需关心群组id等相关内容从何而来,只需要使用自己的用户系统接入对应群组即可。

创建群组示例代码如下:

先引入头文件

#import <MobIM/MIMGroupManager.h>
/**
 创建群组

 @param groupName 群组名称
 @param groupDesc 群组简介
 @param groupNoti 群组公告
 @param groupMembers 群成员,这里的群成员只要传用户自己的用户系统里的用户id集合即可
 @param resultHandler 回调处理
 */
[[MobIM getGroupManager] createGroupWithGroupName:@"群组"
                                            groupDesc:@"群简介" 
                                            groupNoti:@"群公告"
groupMembers:@[@"cc123456",@"dd123456",@"ee123456"]
                                        resultHandler:^(MIMGroup *group, MIMError *error) {
    // 处理创建群组的回调,创建成功后可根据group信息进行展示
}];

注意:调用该方法创建群组成功后同时会收到创建群组成功的消息推送,此消息的目的是为了告知创建群组是添加的群成员,以便即使刷新会话列表。

2. 查找群组

根据群组id查找某个群组,用于某用户想要主动加入某个群组时可通过该群组的id搜索到该群组后加入。

/**
 查找群组

 @param groupId 群组id
 @param resultHandler 回调处理
 */
[[MobIM getGroupManager] findGroupBy:@"876554" resultHandler:^(MIMGroup *group, MIMError *error) {
    // 处理查找到的群组信息
}];      

3. 群组消息发送、接收

群组消息的发送与接收和单聊步骤基本一致,只是构建消息对象是 "to" 传的是群组id,而不再是个人用户id。详细情况请参考前面的 “消息发送” ,此处不再赘述。

相关文档