容我磨叽一下
即使我也知道看这篇文章的人是不会看的,但是我还是想说啊,融云你们把文档好好写一下啦,APP什么的作为demo真的很鸡肋啊。
步入正题
这篇文章不是介绍集成融云的各种前期准备的(就是怎么注册账号啥的),这个官方的文档说的还是很清楚的。官网: 集成融云的前期准备 不废话了。
1.初始化并连接融云服务器
无论你的APP是需要融云的什么功能,初始化连接融云服务器是必须的
#import <RongIMKit/RongIMKit.h>
[[RCIM sharedRCIM] initWithAppKey:@"Your appKey"];
复制代码
这里说一下,我的token是服务器获取的,然后根据这个融云会给你返回相应的userID。另外,连接服务器获取最新token也是在你需要的地方写就行了
//连接融云服务器
[[RCIM sharedRCIM] connectWithToken:@"your token" success:^(NSString *userId) {
NSLog(@"登陆成功。当前登录的用户ID:%@", userId);
//成为当前用户信息的提供者:这个也是在你需要的地方写,我这里只是做一个提醒
RCUserInfo *infor = [[RCUserInfo alloc]initWithUserId:userId name:name portrait:icon];
[RCIM sharedRCIM].userInfoDataSource = self;
[RCIMClient sharedRCIMClient].currentUserInfo = infor;
} error:^(RCConnectErrorCode status) {
NSLog(@"登陆的错误码为:%ld", (long)status);
} tokenIncorrect:^{
NSLog(@"token错误");
}];
复制代码
2.集成会话界面
这里我先集成会话界面的原因是,我的需求不是根据好友列表进行聊天,所以我先说集成对话界面再说对话列表。以单聊为例,以后补充群聊。
1)聊天界面继承 RCConversationViewController
这个控制器是融云给你写好的,继承就会有最基本的界面以及聊天功能
//跳转之前targetId以及conversationType是不可缺的,否则无法完成聊天,或者说可以聊天但是没有历史消息记录
ChatViewController *messageVC= [[ChatViewController alloc]init];
messageVC.targetId = @"";//就是你作为用户唯一标示的ID
messageVC.conversationType = ConversationType_PRIVATE;//单聊
[self.navigationController pushViewController:messageVC animated:YES];
复制代码
#pragma mark - 设置当前登录用户的头像昵称
[RCIM sharedRCIM].enableMessageAttachUserInfo = YES;
RCUserInfo *_currentUserInfo = [[RCUserInfo alloc] initWithUserId:[[[NSUserDefaults standardUserDefaults] valueForKey:@"user"] objectForKey:@"uuid"] name:[[[NSUserDefaults standardUserDefaults] valueForKey:@"user"] objectForKey:@"nickname"] portrait:[[[NSUserDefaults standardUserDefaults] valueForKey:@"user"] objectForKey:@"image"]];
[RCIM sharedRCIM].currentUserInfo = _currentUserInfo;
复制代码
2)聊天列表继承 RCConversationListViewController
ChatListViewController *secondViewController = [[ChatListViewController alloc] init];
[self.navigationController pushViewController:messageVC animated:YES];
复制代码
//点击列表跳转,重写RCConversationListViewController的onSelectedTableRow事件
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
conversationModel:(RCConversationModel *)model
atIndexPath:(NSIndexPath *)indexPath {
ChatViewController *conversationVC = [[ChatViewController alloc]init];
//聊天界面的聊天类型
conversationVC.conversationType = model.conversationType;
//需要打开和谁聊天的会话界面,和谁聊天其实是通过TargetId来联系的。
conversationVC.targetId = model.targetId;
conversationVC.conversationTitle = model.conversationTitle;
[self.navigationController pushViewController:conversationVC animated:YES];
}
复制代码
3.通知回调问题
#pragma mark - 设置RCIMReceiveMessageDelegate代理
[[RCIM sharedRCIM] setReceiveMessageDelegate:self];
#pragma mark - 融云前台接收到消息
-(void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left{
//
}
复制代码
4.头像昵称问题
#pragma mark - 此方法中要提供给融云用户的信息,建议缓存到本地,然后该方法每次从您的缓存返回
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(RCUserInfo* userInfo))completion
{
//该信息需要从本地或者网络获取
RCUserInfo *user = [[RCUserInfo alloc]init];
user.name = [dic[@"data"] objectForKey:@"nickname"];
user.portraitUri = [dic[@"data"] objectForKey:@"image"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"RefrshChatList" object:nil];
return completion(user);
}
复制代码