在项目开始的时候,聊天第三方sdk选择了网易云信,原因很简单,我们的竞争对手用的就是云信,所以老板要求也用这个sdk,在接入云信sdk后,遇到了一些问题,现在记录一下。
1 根据我们项目的需求,我们创建了一个活动小组(同时也会创建一个云信的群组),创建者可以取消这个活动,取消这个活动的时候,服务器要解散群组,这个时候,我们客户端依然会显示这个解散的群组,我们理解的是解散了就应该自己删除掉,进入app的时候,加载最近会话的聊天页面的时候,就不显示了,但是云信没有删除,我们问了他们的技术,最后的解决方式是解散群组会有一条通知:NotificationType.DismissTeam,我们在加载会话列表的时候,根据这个通知类型进行判断,然后手动删除这个群组。
NIMClient.getService(MsgService.class).queryRecentContacts().setCallback(new RequestCallbackWrapper<List<RecentContact>>() {
@Override
public void onResult(int code, List<RecentContact> recents, Throwable exception) {
if (code != ResponseCode.RES_SUCCESS || recents == null) {
return;
}
loadedRecents.clear();
Log.e("recents ==>","聊天列表长度:"+recents.size());
for(RecentContact recentContact:recents){
MsgAttachment attachment = recentContact.getAttachment();
if(attachment instanceof NotificationAttachment){
NotificationAttachment notificationAttachment = (NotificationAttachment) attachment;
String teamNotificationText = TeamNotificationHelper
.getTeamNotificationText(recentContact.getContactId(),
recentContact.getFromAccount(),
(NotificationAttachment) recentContact.getAttachment());
if(notificationAttachment.getType() == NotificationType.DismissTeam){
NIMClient.getService(MsgService.class).deleteRecentContact(recentContact);
NIMClient.getService(MsgService.class).clearChattingHistory(recentContact.getContactId(), recentContact.getSessionType());
}else{
loadedRecents.add(recentContact);
}
}else{
loadedRecents.add(recentContact);
}
}
// 初次加载,更新离线的消息中是否有@我的消息
for (RecentContact loadedRecent : loadedRecents) {
if (loadedRecent.getSessionType() == SessionTypeEnum.Team) {
updateOfflineContactAited(loadedRecent);
}
}
// 此处如果是界面刚初始化,为了防止界面卡顿,可先在后台把需要显示的用户资料和群组资料在后台加载好,然后再刷新界面
//
msgLoaded = true;
if (isAdded()) {
onRecentContactsLoaded();
}
}
});
这样就把解散的群组给删除掉了。
2 app卸载重新安装后,原来在最近会话的群组,现在不显示了,除非有人在群组发消息才会再次显示,解决方式就是去云信的后台,把漫游功能打开,默认是关闭的,问了云信客服,漫游是不收费的。
3 我们创建了两个应用key,一个是正式环境的,另一个用作测试的,使用测试的key的时候,发现登录有问题
https://api.netease.im/nimserver/user/create.action 时出现错误,返回信息:{"desc":"CurTime is illegal","code":414}
后来发现这个curTIme是秒数不是毫秒数,然后云信技术让我们把测试的appkey和secret给他,然后完了刷新一下秘钥就行了。
再遇到问题的话,会再补充。