因在开发公司项目有即时通讯模块,经商量之后选择了第三方即时通讯sdk环信,由于3.0文档还不是非常全面,且本人之前没有过开发即时通讯的经验,查阅了很多资料,磕磕绊绊几天终于完成了对该模块的开发,故此记录所遇到的问题及解决办法,方便以后自己或朋友的查阅:
首先,对于第一次接触的朋友需要初步了解下环信,官方文档非常详尽的介绍了,在此就不赘述.附上官方文档链接:http://docs.easemob.com/doku.php?id=im:start
1.先直接根据官方文档集成SDK,在集成之前如果是第一次接触环信,建议备份工程.
注:官方下载的包里会有两个静态库,一个是包含实时语音的库,另一个则不包含,根据业务需求,记得删除掉一个库,直接move to trash就可以.切记要删除!否则在后边的步骤会报重复引用链接错误.
2.根据官方文档导入依赖库的时候,dylib后缀没有的直接用tbd就可以(Xcode 7之后改为tbd).
加入系统SDK依赖库:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
SystemConfiguration.framework
libc++.a
libresolv.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libHyphenateSDK.a
如果报错:"_iconv", referenced from: _avcodec_decode_subtitle2 in libHyphenateFullSDK.a(utils.o),则另外要加入libiconv.tbd依赖库.
官方依赖库导入之后编译,此处编译会遇到的坑:
1).报重复引用静态库错误(没删官方两个静态库中的一个)
2).报与-all_load 冲突错误 根据文档改为-ObjC即可 如果改为-ObjC还有错 可按照文档改为 -force_load
注:项目如果用了友盟分享,改为-force_load之后 会与友盟有冲突,具体原因也不清楚,项目直接crash在分享新浪微博,此处求解惑. 改为-ObjC即可
到此步骤直到编译没错的时候就说明导入SDK 配环境成功.
3.环信官方提供了easeUI这个快速集成单聊界面,在集成easeUI之前建议不要用cocoapods来集成,因为会报一些莫名的错误.
集成easeUI:
1).将EaseUI工程下载下来之后,直接拖入EaseUI文件夹,EaseUIResource里面的Resource文件夹,export文件夹里的resource文件夹下的EaseUIResource.bundle 包,到工程中.
2).新建一个pch文件,设置好路径之后,在pch文件中添加引用:EaseUI-Prefix.pch 、ChatDemo-UI3.0-Prefix.pch 这两个pch中的代码.
此时编译会报一个 NSObject + EaseMob类别错误 (该类别是2.0demo中的,根本没有用) 可以选择注释,或者直接删除该类别.将该类别注释掉之后,如果报更多的错误,错误定在NSString或其他系统类上,在你新建的pch文件里,你所包含的头文件开始加上: #ifdef __OBJC__ 结尾处加上: #endif 如下图:
450A4D8A-1D3D-463A-8012-D75920068558.png
此时编译如果还报错并且错误定在NSLocalizedString, 在你的pch文件里添上如下宏:
#define NSEaseLocalizedString(key, comment) [[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"EaseUIResource"withExtension:@"bundle"]] localizedStringForKey:(key) value:@"" table:nil]
3).下载官方提供的ChatDemo-3.0 拖入demo中3rdparty文件夹,因EaseUI本身集成了几个常用三方库,因此会与工程中你所用的重复,此时编译会报错.本身所包含的常用三方如下:MBProgressHUD、VoiceConvert、MJRefresh、SDWebImage. 如果有冲突,切记删除ChatDemo中的三方库,然后改掉相关报错的代码.
此时编译如果还报错,错误为Setting文件夹下的BackUp类,直接删除掉或注释即可,该类用处不大.
至此,编译成功则EaseUI的集成也完毕了.
环信的EaseUI其实只是做到一个展示的作用,包括一些控件的布局,排版都没有处理,因此我们可以直接用ChatDemo3.0中的ChatViewController这个界面,附上集成视频地址:http://v.youku.com/v_show/id_XMTQxOTgyNjU1Mg==.html?from=y1.2-1-87.3.6-2.1-1-1-5-0
好了,到此当你把ChatViewController也集成完毕,一个初步成型的单聊界面就出来了.ps:环信支持非好友之间的聊天,你只要知道对方的环信id即可.
那么你会疑问了,头像和昵称还没有搞定.因为环信服务器不存储用户的头像和昵称,因此需要你与自己app的服务器交互,聊天界面的头像和昵称在如下方法中修改:
- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController
modelForMessage:(EMMessage *)message
如果因业务需求用到会话列表,官方并没有非常完善的文档,可以参考demo中的ConversationListViewController.