环信简单集成,这是官方文档,按照这个分分钟搞定,但是我遇到的是UI头像和昵称不显示的问题,分享下我的解决方法。
快速集成链接:http://git.oschina.net/markies/HxChatDemo
关于头像和昵称的问题,需要向自己的后台服务器请求。
我是在会话列表页请求数据并缓存到数据库。
1.请求头像
#pragma mark - EaseConversationListViewControllerDelegate
- (void)postUserInfoWithChatter:(NSString *)chattar model:(EaseConversationModel *)model{
NSDictionary *pamaa = @{
@"phones":chattar
};
[until AFNetworkPOSTurl:@"http://demo.bianguo.com.cn/ccjtest/lvtt/api/home/index/get_userinfos" paraments:pamaa complete:^(id json, NSError *error) {
NSLog(@"环信数组-%@",json);
model.title = json[@"data"][0][@"nickname"];
model.avatarURLPath = json[@"data"][0][@"headimg"];
NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic[@"name"] = model.title;
dic[@"avatarURLPath"] = model.avatarURLPath;
[defults setObject:dic forKey:chattar];
//缓存用户头像
[UserCacheManager saveInfo:chattar imgUrl:model.avatarURLPath nickName:model.title];
}];
}
在下面这个方法中显示会话列表的头像和昵称,并缓存到UserCacheManager这个类中
- (id<IConversationModel>)conversationListViewController:(EaseConversationListViewController *)conversationListViewController modelForConversation:(EMConversation *)conversation{
self.chatter = conversation.conversationId;
EaseConversationModel *model = [[EaseConversationModel alloc] initWithConversation:conversation];
if (model.conversation.type == EMConversationTypeChat) {
NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];
NSString *chatterBig = [conversation.conversationId uppercaseString];
NSMutableDictionary *sqDic = [defults objectForKey:chatterBig];
//在这里显示会话列表的头像和昵称
if (sqDic) {
model.title = sqDic[@"name"];
model.avatarURLPath = sqDic[@"avatarURLPath"];
[UserCacheManager saveInfo:conversation.conversationId imgUrl:model.avatarURLPath nickName:model.title];
}else{
[self postUserInfoWithChatter:chatterBig model:model];//请求数据
}
} else if (model.conversation.type == EMConversationTypeGroupChat) {
NSString *imageName = @"groupPublicHeader";
if (![conversation.ext objectForKey:@"subject"])
{
NSArray *groupArray = [[EMClient sharedClient].groupManager getAllGroups];
for (EMGroup *group in groupArray) {
if ([group.groupId isEqualToString:conversation.conversationId]) {
NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithDictionary:conversation.ext];
[ext setObject:group.subject forKey:@"subject"];
[ext setObject:[NSNumber numberWithBool:group.isPublic] forKey:@"isPublic"];
conversation.ext = ext;
break;
}
}
}
model.title = [conversation.ext objectForKey:@"subject"];
imageName = [[conversation.ext objectForKey:@"isPublic"] boolValue] ? @"groupPublicHeader" : @"groupPrivateHeader";
model.avatarImage = [UIImage imageNamed:imageName];
}
return model;
}
接下来显示聊天会话中自己的头像和对方的头像
在EaseBaseMessageCell中,
- (void)setModel:(id<IMessageModel>)model
这个方法中进行赋值。
if (self.model.isSender) {//这是自己的头像
_nameLabel.text = [ZYTokenManager usernickname];
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:[ZYTokenManager userheadimg]] placeholderImage:model.avatarImage];
else{//这里是对方头像,从缓存的UserCacheManager这个类中取出来
UserCacheInfo * userInfo = [UserCacheManager getById:model.nickname];
if (userInfo!=nil) {
_nameLabel.text = userInfo.NickName;
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:userInfo.AvatarUrl] placeholderImage:model.avatarImage];
}else{
_nameLabel.text = @"nil";
}
}
这样基本上就没有问题了。
2.最近做环信推送遇到点问题。本地推送没有声音,后来参考demo,解决方法如下。
2.1 本地通知。在进入后台3分钟之内,由于长连接没有关系,发送的通知是本地通知,之后发送的消息通知是APNS。
在
ChatUIHelper.m文件中找到这个方法
- (void)didReceiveMessages:(NSArray *)aMessages
本地推送消息声音代码图1
如果这样推送还没有声音的话,还是在这个.m文件的最后,再加一句
本地推送消息声音代码图22.2 离线推送。离线推送集成看官方demo,这边说一下证书的配置。
如果只是连接到Xcode真机测试,选择开发环境下的证书测试。
如果上传到蒲公英之类的扫码测试,就需要生成环境下的证书测试,也就是和上线之后的证书是一致的。
网友评论