环信3.0集成中遇到的那些“坑”

来源:互联网 发布:网络推广的主要方法 编辑:程序博客网 时间:2024/05/26 12:04

  由于公司项目需要,把在前辈基础上集成的2.x的环信升级到3.0版本,期间碰到了不少的“神坑”,记录下来以供以后需要时查看。

  由于是在2.x的基础上重新集成的,所以注册账号、推送证书的配置、登录等都没有太大改动,就先拣自己印象最深,解决花费时间最长的几个bug来记录吧,以后想起再随时添加。

  1,群聊创建群组成功后,再次请求群组时群组成员会少于邀请的成员数:这个“坑”其实并不难,只是3.x文档中的某个属性我没有注意到,最后我是询问了环信客服才解决的,在此,感谢客服的耐心指点,不厌其烦的帮助。其实就是这个属性:

@property (nonatomic,assign)BOOL isAutoAcceptGroupInvitation;在EMOptions里面,这个属性的意义在于用户收到邀请后,如果用户处于登录状态,环信就会把用户加到群组里面,而如果用户不处于登录状态,等到用户登录后,环信还是会把用户加入到群组里的。但是如果设置为NO之后,用户登录后,环信也不会把该用户加入到群组里面了。它本身默认是设置为YES的,但是环信的DEMO里面却把它设置为了NO,我是继承自环信的聊天页面做的,导致我邀请的群成员不能自动加入到群组。所以在集成第三方时,如果用到了第三方的DEMO,还是很有必要看一下第三方DEMO里面一些有用的属性和方法的,尤其要注意和官方文档设置不相同的属性和方法。

 2,环信2.x里面有个

- (void)didUnreadMessagesCountChanged;方法,每当用户的消息数量有变化后会自动调用此方法来进行未读数量的统计,从而让开发者在适当的位置显示未读消息数。3.0里这个方法被废弃掉了,开发者只能通过EMChatManagerDelegate里面的

- (void)didReceiveMessages:(NSArray *)aMessages;方法来获取所有的消息变化,这样子也没有太大问题。最“坑”的就是2.x的未读数是显示在根控制器的tabBarItem上的,而3.0里面不能直接在appdelegate里面来获取到用户是否已经读取过消息(起码我是没有获取到),需要在聊天界面的代理方法里面才会获取到该消息是否已读,这样子就造成我必须要在聊天界面重新获取一次消息并计算未读数目。进入聊天界面后系统根控制器的tabBarItem是被隐藏掉的,因此读完消息以后,tabBar上的未读数一直不会消失,为了这个问题我整整迷惑了两天,最终才发现是根控制器的问题(真是气死我了)。

 3,2.x版本里面的代理只需要添加chatmanager就可以了,3.0版本里面单聊和群聊的代理是不同的,需要分别添加两个代理:

[[EMClientsharedClient]addDelegate:selfdelegateQueue:nil];

[[EMClientsharedClient].chatManageraddDelegate:selfdelegateQueue:nil];

[[EMClientsharedClient].groupManageraddDelegate:selfdelegateQueue:nil];

如果忘记加代理的话,某些回调可能不会调用的,所以当有回调方法不执行时,先去查看一下是否代理忘记添加了。

1 0
原创粉丝点击