環(huán)信簡單集成保礼,這是官方文檔沛励,按照這個分分鐘搞定,但是我遇到的是UI頭像和昵稱不顯示的問題炮障,分享下我的解決方法目派。
快速集成鏈接:http://git.oschina.net/markies/HxChatDemo
關于頭像和昵稱的問題,需要向自己的后臺服務器請求胁赢。
我是在會話列表頁請求數(shù)據(jù)并緩存到數(shù)據(jù)庫企蹭。
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(@"環(huán)信數(shù)組-%@",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];//請求數(shù)據(jù)
}
} 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.最近做環(huán)信推送遇到點問題送漠。本地推送沒有聲音,后來參考demo由蘑,解決方法如下螺男。
2.1 本地通知棒厘。在進入后臺3分鐘之內(nèi),由于長連接沒有關系下隧,發(fā)送的通知是本地通知奢人,之后發(fā)送的消息通知是APNS。
在
ChatUIHelper.m文件中找到這個方法
- (void)didReceiveMessages:(NSArray *)aMessages
本地推送消息聲音代碼圖1
如果這樣推送還沒有聲音的話淆院,還是在這個.m文件的最后何乎,再加一句
本地推送消息聲音代碼圖2
2.2 離線推送。離線推送集成看官方demo土辩,這邊說一下證書的配置支救。
如果只是連接到Xcode真機測試,選擇開發(fā)環(huán)境下的證書測試拷淘。
如果上傳到蒲公英之類的掃碼測試各墨,就需要生成環(huán)境下的證書測試,也就是和上線之后的證書是一致的启涯。
開發(fā)上線的推送證書配置