1.配置融云,参考 http://www.rongcloud.cn/docs/ios.html。
2.首先说一下如何发送个人名片。
a.在融云官方的demo里,有一个库RongContactCard.framework,把这个库拖入到自己的工程中,
b.初始化名片消息:
RCUserInfo*userInfo = [[RCUserInfoalloc]initWithUserId:[NSStringstringWithFormat:@"%@",model.Id] name:model.nickName portrait:model.avatarUrl];
RCContactCardMessage*content = [RCContactCardMessage messageWithUserInfo:userInfo];
c.将得到的名片消息通过下面这个方法发送
如果发送的名片还有留言,则还需要通过该方法发送一个文本消息,即在初始化一个文本消息,也是通过上面这个方法发送消息。
2.发送分享的消息
a.自己自定义一个消息类(消息类型名要重新赋值),继承于RCMessageContent,在入口类appdelagate里注册该消息 [[RCIMsharedRCIM] registerMessageType:[KJDynamicContent class]];
b.自定义一个cell,继承RCMessageCell,在cell的.m文件中重写+ (CGSize)sizeForMessageModel:(RCMessageModel*)model
withCollectionViewWidth:(CGFloat)collectionViewWidth
referenceExtraHeight:(CGFloat)extraHeight 这个方法(该方法是获取cell在表中的高度)
在你的聊天页面注册cell,[sel fregisterClass:[KJDynamicCell class] forMessageClass:[KJDynamicContent class]];
c.发送分享消息时,初始化你自定义的消息,发送消息的方法参考发送个人名片消息的发送方法
3.发送视频消息
a.和发送分享的消息一样,先自定义一个消息类,和一个cell,
b.发送视频消息有两种方法,参考http://support.rongcloud.cn/kb/NTY1。我使用的是第二种方法,通过
KJVideoMessage*message = [KJVideoMessagemessageWithMThumUri:[UIImageToolsstringToBase64Str:_thumbImage]Video:URL.absoluteStringisLong:isLong];(KJVideoMessage 是我自定义的cell,大家可以自己随意命名)
[self sendMediaMessage:message pushContent:nil appUpload:YES];(发送消息的方法),
/*!
上传媒体信息到App指定的服务器的回调
@param message媒体消息(图片消息或文件消息)的实体
@param uploadListener SDK图片上传进度监听
@discussion如果您通过sendMediaMessage:pushContent:appUpload:接口发送媒体消息,则必须实现此回调。
您需要在此回调中通过uploadListener将上传媒体信息的进度和结果通知SDK,SDK会根据这些信息,自动更新UI。
*/
- (void)uploadMedia:(RCMessage*)message uploadListener:(RCUploadMediaStatusListener*)uploadListener,
在这个方法中上传你需要传的视频到你的服务器,让后将你上传的进度通过RCUploadMediaStatusListener中的uploadListener.updateBlock将进度传进去刷新UI。(注意,在这地方上传的进度为大于1的整型,1 - 100)。
我们需要在自定义的cell中接收到上传的进度然后显示在UI上,这里有两种方法可以获取进度,
I.重写/*!
消息发送状态更新的监听回调
@param notification消息发送状态更新的Notification
*/
- (void)messageCellUpdateSendingStatusEvent:(NSNotification*)notification {
[supermessageCellUpdateSendingStatusEvent:notification];
RCMessageCellNotificationModel*model = notification.object;
NSLog(@"model.progress ======%ld",model.progress);
NSLog(@"model.messageId ======%ld",model.messageId);
NSLog(@"model.actionName ======%@",model.actionName);
}
II.通过融云的一个发送消息时一个私有的通知RCKitSendingMessageNotification获取,具体代码:
在cell的初始化方法里添加一个观察者[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(didReceiveMessageNotification:)name:@"RCKitSendingMessageNotification"object:nil];
- (void)didReceiveMessageNotification:(NSNotification*)notification {
NSLog(@"%@",notification);
NSLog(@"progress ==== %f",[notification.userInfo[@"progress"] floatValue]);
}
c.发送成功之后通过uploadListener.successBlock将上传成功的视频地址回调出去,同时将你自定义消息里的视频地址重新赋值,这时融云会自动将消息发送出去。
至此,融云的自定义消息(个人名片 视频消息 分享消息)已经全部写完,如有什么不懂得可私信我,或者邮箱联系我[email protected]。如有什么不对的地方,或者还有什么需要补充的欢迎大家指出,大家共同进步。