目录

引入静态库

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

环境配置

(1) Build Settings的Framework Search Paths和Header Search Paths都引入MMCSDK的正确路径。

(2) Build Phases的Link Binary With Libraries中加入CoreTelephony.framework,SystemConfiguration.framework和已经引入的三个静态库。

(3) 需在github的sdk目录下根据链接下载ffmpeg库并放到demo中,否则demo无法正常运行。 (具体配置可参考demo)

日志

//SDK日志总开关,默认开
[MCUser setMIMCLogSwitch:YES];
/**
 * 设置打印的日志级别,默认DEBUG级别
 * @param[level]: 
 *    MIMC_DEBUG(默认)
 *    MIMC_INFO
 *    MIMC_WARN
 *    MIMC_ERROR
 */
[MCUser setMIMCLogLevel:MIMC_DEBUG];

用户登录

用户初始化

参考 安全认证 ,初始化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] initWithAppId:appId andAppAccount:appAccount andAsynchFetchTokenRequest:request];

登录

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

在线状态变化回调

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

注销

[user logout];

发送消息

发送单聊消息

/**
 * @param[toAppAccount] NSString: 消息接收者在APP帐号系统内的帐号
 * @param[payload] NSData: 开发者自定义消息体
 * @param[isStore] Boolean: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储
 * @param[bizType] NSString: 消息类型,默认空字符串
 * @return: 客户端生成的消息ID
 **/

NSString packetId = [user sendMessage:toAppAccount payload:payload];
NSString packetId = [user sendMessage:toAppAccount payload:payload isStore:isStore];
NSString packetId = [user sendMessage:toAppAccount payload:payload bizType:bizType];
NSString packetId = [user sendMessage:toAppAccount payload:payload bizType:bizType isStore:isStore];

发送群聊消息

/**
 * @param[topicId] int64_t: 接收消息的群ID
 * @param[payload] NSData: 开发者自定义消息体
 * @param[isStore] Boolean: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储
 * @param[bizType] NSString: 消息类型,默认空字符串
 * @return: 客户端生成的消息ID
 **/

NSString packetId = [user sendGroupMessage:topicId payload:payload];
NSString packetId = [user sendGroupMessage:topicId payload:payload isStore:isStore];
NSString packetId = [user sendGroupMessage:topicId payload:payload bizType:bizType];
NSString packetId = [user sendGroupMessage:topicId payload:payload bizType:bizType isStore:isStore];

发送无限大群消息

/**
 * @param[topicId] int64_t: 需要发送给哪个群的群ID
 * @param[payload] NSData: 需要发送的群消息内容
 * @param[isStore] Boolean: 是否存储这条消息
 * @param[bizType] NSString: 消息类型,默认空字符串
 * @return: 客户端生成的消息ID
 **/

NSString packetId = [user sendUnlimitedGroupMessage:topicId payload:payload];
NSString packetId = [user sendUnlimitedGroupMessage:topicId payload:payload isStore:isStore];
NSString packetId = [user sendUnlimitedGroupMessage:topicId payload:payload bizType:bizType];
NSString packetId = [user sendUnlimitedGroupMessage:topicId payload:payload bizType:bizType isStore: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.topicId: 群ID
 *   MIMCGroupMessage.sequence: 序列号
 *   MIMCGroupMessage.fromAccount: 发送方帐号
 *   MIMCGroupMessage.payload: 消息体
 *   MIMCGroupMessage.timestamp: 时间戳
 **/
- (void)handleGroupMessage:(NSArray<MIMCGroupMessage*> *)packets;

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

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

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

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

/**
 * 发送无限大群消息超时的回调函数
 * @param[groupMessage]: 发送超时的群聊消息
 **/
- (void)handleSendUnlimitedGroupMessageTimeout:(MIMCGroupMessage *)groupMessage;
@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 handleUnlimitedGroupDelegate <NSObject>
/**
 * 创建无限大群是否成功的回调函数
 * @param[topicId] int64_t: 群ID
 * @param[topicName] NSString: 群名称
 * @param[success] Boolean: 创建群组是否成功,true成功,false失败
 * @param[desc] NSString: 描述信息
 * @param[context] id: 用户自定义传入的对象
 **/
- (void)handleCreateUnlimitedGroup:(int64_t)topicId topicName:(NSString *)topicName success:(Boolean)success desc:(NSString *)desc context:(id)context;

/**
 * 加入指定群ID是否成功的回调函数
 * @param[topicId] int64_t: 需要加入的群ID
 * @param[code] int: 错误码,0成功,非0失败
 * @param[desc] NSString: 描述信息
 * @param[context] id: 用户自定义传入的对象
 **/
- (void)handleJoinUnlimitedGroup:(int64_t)topicId code:(int)code desc:(NSString *)desc context:(id)context;

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

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

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

回到顶部

results matching ""

    No results matching ""