目录

引入静态库

正常情况下需要引入MMCSDK和ProtocolBufferSDK两个静态库,但是若你的项目中也用到了ProtocolBuffer,为避免冲突,在项目中可以不引入MIMC提供的ProtocolBufferSDK静态库 。

用户登录

用户初始化

参考 安全认证 ,初始化NSMutableURLRequest和parseToken

(1)创建URLRequest,用于访问AppProxyService服务
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSMutableDictionary *dicObj = [[NSMutableDictionary alloc] init];
...
NSData *dicData = [NSJSONSerialization dataWithJSONObject:dicObj options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:dicData];
(2)实现协议解析,解析URLRequest返回结果,获取小米认证服务下发的Token
/**
 * @param proxyResult: AppProxyService返回结果
 * @return: TokenService(MIMC)返回结果(注意需要返回小米认证服务下发的原始Token)
 **/
@protocol parseTokenDelegate <NSObject>
- (NSString *)parseProxyServiceToken:(NSData *)proxyResult;
@end
  parseProxyServiceToken回调函数实现之后,需要设置委托者的代理是谁。比如:_user.parseTokenDelegate = self,self指的是实现parseProxyServiceToken方法的当前类对>
象。
(3)创建user,传入request:
MCUser *user = [[MCUser alloc] initWithAppAccount:appAccount andAsynchFetchTokenRequest:request];

登录

默认支持多设备登录
[user login];

在线状态变化回调

/**
 * @param[user]: 在线状态发生变化的用户
 * @param[status]: 1 在线,0 不在线
 * @param[errType]: 登录失败类型
 * @param[errReason]: 登录失败原因
 * @param[errDescription]: 登录失败原因描述
 **/
@protocol onlineStatusDelegate <NSObject>
- (void)statusChange:(MCUser *)user status:(int)status errType:(NSString *)errType errReason:(NSString *)errReason errDescription:(NSString *)errDescription;
@end
  statusChange回调函数实现之后,需要设置委托者的代理是谁。比如:_user.onlineStatusDelegate = self,self指的是实现statusChange方法的当前类对象。

注销

[user logout];

发送消息

发送单聊消息

/**
 * @param[toAppAccount] NSString: 消息接收者在APP帐号系统内的帐号
 * @param[msg] NSData: 开发者自定义消息体
 * @param[isStore] Boolean: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储。
 * @return: 客户端生成的消息ID
 **/
NSString packetId = [user sendMessage:toAppAccount msg:data];
NSString packetId = [user sendMessage:toAppAccount msg:data isStore:isStore];

发送群聊消息

/**
 * @param[topicId] int64_t: 接收消息的群ID
 * @param[msg] NSData: 开发者自定义消息体
 * @param[isStore] Boolean: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储。
 * @return: 客户端生成的消息ID
 **/
NSString packetId = [user sendGroupMessage:topicId msg:data];
NSString packetId = [user sendGroupMessage:topicId msg:data isStore:isStore];

发送无限大群消息

/**
 * @param[topicId] int64_t: 需要发送给哪个群的群ID
 * @param[msg] NSData: 需要发送的群消息内容
 * @param[isStore] BOOL: 是否存储这条消息
 * @return: 客户端生成的消息ID
 **/
- (NSString *)sendUnlimitedGroupMessage:(int64_t)topicId msg:(NSData *)msg isStore:(BOOL)isStore;

接收消息回调

@protocol handleMessageDelegate <NSObject>
/**
 * 收到单聊消息的回调函数
 * @param[packets]: 单聊消息集
 * @note: MIMCMessage 单聊消息
 *   MIMCMessage.packetId: 消息ID
 *   MIMCMessage.sequence: 序列号
 *   MIMCMessage.fromAccount: 发送方帐号
 *   MIMCMessage.toAccount: 接收方帐号
 *   MIMCMessage.payload: 消息体
 *   MIMCMessage.timestamp: 时间戳
 **/
- (void)handleMessage:(NSArray<MIMCMessage*> *)packets user:(MCUser *)user;

/**
 * 收到群聊消息的回调函数
 * @param[packets]: 群聊消息集
 * @note: MIMCGroupMessage 群聊消息
 *   MIMCGroupMessage.packetId: 消息ID
 *   MIMCGroupMessage.groupId: 群ID
 *   MIMCGroupMessage.sequence: 序列号
 *   MIMCGroupMessage.fromAccount: 发送方帐号
 *   MIMCGroupMessage.payload: 消息体
 *   MIMCGroupMessage.timestamp: 时间戳
 **/
- (void)handleGroupMessage:(NSArray<MIMCGroupMessage*> *)packets;

/**
 * 收到serverAck消息的回调函数
 * @param[serverAck]: 服务器返回的serverAck对象
 *        serverAck.packetId: 客户端生成的消息ID
 *        serverAck.timestamp: 消息发送到服务器的时间(单位:ms)
 *        serverAck.sequence: 服务器为消息分配的递增ID,单用户空间内递增唯一,可用于去重/排序
 *        serverAck.errorMsg: 消息是否发送成功的相关错误信息
 **/
- (void)handleServerAck:(NSString *)packetId sequence:(int64_t)sequence timestamp:(int64_t)timestamp errorMsg:(NSString *)errorMsg;

/**
 * 收到无限大群群消息的回调函数
 * @param[mimcGroupMessage] MIMCGroupMessage: 群聊消息集
 **/
- (void)handleUnlimitedGroupMessage:(MIMCGroupMessage *)mimcGroupMessage;

/**
 * 发送单聊消息超时的回调函数
 * @param[message]: 发送超时的单聊消息
 **/
- (void)handleSendMessageTimeout:(MIMCMessage *)message;

/**
 * 发送群聊消息超时的回调函数
 * @param[groupMessage]: 发送超时的群聊消息
 **/
- (void)handleSendGroupMessageTimeout:(MIMCGroupMessage *)groupMessage;

/**
 * 发送无限大群消息超时的回调函数
 * @param[ucPacket] UCPacket: 无限大群消息集
 **/
- (void)handleSendUnlimitedGroupMessageTimeout:(UCPacket *)ucPacket;
@end
  开发者实现上面定义的几个回调函数之后,需要设置委托者的代理是谁。比如:_user.handleMessageDelegate = self,self指的是实现上述几个回调函数的当前类对象

无限大群

创建无限大群

/**
 * @param[topicName] NSString: 需要创建的群组名称
 * @param[context] id: 用户自定义传入的对象,通过回调函数原样传出
 * @return: 创建无限大群过程中是否有异常,无异常为true,否则为false
 **/
- (BOOL)createUnlimitedGroup:(NSString *)topicName context:(id)context;

加入无限大群

/**
 * @param[topicId] int64_t: 需要加入的群ID
 * @param[context] id: 用户自定义传入的对象,通过回调函数原样传出
 * @return: 客户端生成的消息ID
 **/
- (NSString *)joinUnlimitedGroup:(int64_t)topicId context:(id)context;

退出无限大群

/**
 * @param[topicId] int64_t: 需要加入的群ID
 * @param[context] id: 用户自定义传入的对象,通过回调函数原样传出
 * @return: 客户端生成的消息ID
 **/
- (NSString *)quitUnlimitedGroup:(int64_t)topicId context:(id)context;

解散无限大群

/**
 * @param[topicId] int64_t: 需要解散的群ID
 * @param[context] id: 用户自定义传入的对象,通过回调函数原样传出
 * @return: 解散无限大群过程中是否有异常,无异常为true,否则为false
 **/
- (BOOL)dismissUnlimitedGroup:(int64_t)topicId context:(id)context;

无限大群操作回调

@protocol handleUCMessageDelegate <NSObject>
/**
 * 创建无限大群是否成功的回调函数
 * @param[topicId] int64_t: 群ID
 * @param[topicName] NSString: 群名称
 * @param[success] BOOL: 创建群组是否成功
 * @param[errMsg] NSString: 创建无限大群的相关错误信息
 * @param[context] id: 用户自定义传入的对象
 **/
- (void)handleCreateUnlimitedGroup:(NSString *)topicId topicName:(NSString *)topicName success:(BOOL)success errMsg:(NSString *)errMsg context:(id)context;

/**
 * 加入指定群ID是否成功的回调函数
 * @param[topicId] int64_t: 需要加入的群ID
 * @param[code] int: 错误码
 * @param[message] NSString: 加入无限大群的相关错误信息
 * @param[context] id: 用户自定义传入的对象
 **/
- (void)handleJoinUnlimitedGroupResp:(int64_t)topicId code:(int)code message:(NSString *)message context:(id)context;

/**
 * 退出无限大群是否成功的回调函数
 * @param[topicId] int64_t: 需要退出的群ID
 * @param[code] int: 错误码
 * @param[message] NSString: 退出无限大群的相关错误信息
 * @param[context] id: 用户自定义传入的对象
 **/
- (void)handleQuitUnlimitedGroupResp:(int64_t)topicId code:(int)code message:(NSString *)message context:(id)context;

/**
 * 解散无限大群是否成功的回调函数
 * @param[success] BOOL: 解散群组是否成功
 * @param[errMsg] NSString: 解散无限大群的相关错误信息
 * @param[context] id: 用户自定义传入的对象
 **/
- (void)handleDismissUnlimitedGroup:(BOOL)success errMsg:(NSString *)errMsg context:(id)context;

/**
 * 收到无限大群被解散消息的回调函数
 * @param[topicId] int64_t: 被解散的群ID
 **/
- (void)handleDismissUnlimitedGroup:(int64_t)topicId;
开发者实现上面定义的几个回调函数之后,需要设置委托者的代理是谁。比如:_user.handleUCMessageDelegate = self,self指的是实现上述几个回调函数的当前类对象。
@end

实时流

发起会话

/**
 * @param[toAppAccount]: 接收方账号
 * @param[toResource]: 用户设备的标识
 * @param[appContent]: 可以给接收方携带数据
 * @return: 会话ID,唯一标识当前流会话
 */

- (int64_t)dialCall:(NSString *)toAppAccount;
- (int64_t)dialCall:(NSString *)toAppAccount toResource:(NSString *)toResource;
- (int64_t)dialCall:(NSString *)toAppAccount appContent:(NSData *)appContent;
- (int64_t)dialCall:(NSString *)toAppAccount toResource:(NSString *)toResource appContent:(NSData *)appContent;

发送数据

/**
 * @param[chatId]: 会话ID
 * @param[data]: 流数据
 * @param[dataType]: 数据类型,音频:AUDIO,视频:VIDEO
 * @param[channelType]: 通道类型,RELAY、P2P_INTERNET、P2P_INTRANET
 */

- (Boolean)sendRtsData:(int64_t)chatId data:(NSData *)data dataType:(RtsDataType)dataType;
- (Boolean)sendRtsData:(int64_t)chatId data:(NSData *)data dataType:(RtsDataType)dataType channelType:(RtsChannelType)channelType;

关闭会话

/**
 * @param[chatId]: 会话ID
 * @param[byeReason]: 描述信息
 */

- (void)closeCall:(int64_t)chatId;
- (void)closeCall:(int64_t)chatId byeReason:(NSString *)byeReason;

实时流回调

/**
 * @param[fromAccount]: 发起方账号
 * @param[fromResource]: 用户设备的标识
 * @param[chatId]: 会话ID
 * @param[appContent]: 发起方携带的数据
 * @return: MIMCLaunchedResponse,成员accepted表示是否接受会话,成员errMsg携带描述信息
 */
- (MIMCLaunchedResponse *)onLaunched:(NSString *)fromAccount fromResource:(NSString *)fromResource chatId:(int64_t)chatId appContent:(NSData *)appContent;

/**
 * @param[chatId]: 会话ID
 * @param[accepted]: 接收方同意ture,拒绝false
 * @param[errMsg]: 描述信息
 */
- (void)onAnswered:(int64_t)chatId accepted:(Boolean)accepted errmsg:(NSString *)errmsg;

/**
 * @param[chatId]: 会话ID
 * @param[errMsg]: 描述信息
 */
- (void)onClosed:(int64_t)chatId errmsg:(NSString *)errmsg;

/**
 * @param[chatId]: 会话ID
 * @param[data]: 流数据
 * @param[dataType]: 数据类型,AUDIO,VIDEO
 * @param[channelType]: 通道类型,RELAY、P2P_INTERNET、P2P_INTRANET
 */
- (void)handleData:(int64_t)chatId data:(NSData *)data dataType:(RtsDataType)dataType channelType:(RtsChannelType)channelType;

回到顶部

results matching ""

    No results matching ""