干货分享:iOS 环信Demo集成即时聊天和UI 经验分享

yumo6667个月前 (06-02)技术文章31

刚做完一个拥有即时聊天模块的项目,项目中用的是环信3.0,总体感觉还是棒棒哒,比我两年前纯用XMPP+openfire便捷多了,而且环信的开发文档感觉好对我的胃口,写的很用心,所以喽,今天分享一下环信的集成和UI页面的摘取。一、准备工作

1、sdk和静态库的导入

首先是导入环信的sdk,编译,这个过程的困难不是很多,简单提一下,首先下载好EaseMobSDK,这里注意一点的是,lib静态库中包括EaseMobClientSDKLite和EaseMobClientSDK这两种,如果你需要实时语音的话选择EaseMobClientSDK,否则选择EaseMobClientSDKLite,两者只能导入一个。

添加静态库

CoreMedia.framework

AudioToolbox.framework

AVFoundation.framework

MobileCoreServices.framework

ImageIO.framework

libc++.dylib

libz.dylib

libstdc++.6.0.9.dylib

libsqlite3.dylib

SDK包含实时语音依赖库有CoreMedia.framework

AudioToolbox.framework

AVFoundation.framework

MobileCoreServices.framework

ImageIO.framework

libc++.dylib

libz.dylib

libstdc++.6.0.9.dylib

libsqlite3.dylib

libiconv.dylib

(注意:SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。)

然后编译工程,不出意外就成功啦。啊哈哈,开瓶啤酒庆祝一下自己的智商。如果,有些小猴子不成功,例如我

上面的原因是,导入的静态库重复,自己检查吧

二、移植环信的demo中需要的到自己的项目

我这里用到了聊天列表,消息的页面和聊天的主页面,大家再倒入这个之前,一定要先备份!项目,否则一失足成千古恨,或者把svn中的项目弄坏了,就自己站墙角去吧。做这个一定要细心,不能着急,最好要记录移过来的每一个类都是干啥的,防止出错,不知道怎么排查。直接看我的图,按照我这张图细心点,相信可以的。

1.以下这张是消息列表需要导过来的类,有些View里面的类是我自己添加的,和demo比对吧,有的就添加进来

消息列表

2.以下是聊天页面需要的类,CL开头的类,是我自己写的,不用管,剩下的都是需要的

聊天页面

3.剩下需要的东西,这个很重要,要细心哦

相关

其中有些文件夹里的东西,也需要注意,上图:

环信相关

还有,这里面APPDelegate的拓展也比较重要,AppDelegate+EaseMob这个不用白不用了,很方便。

4.做完这些,细活出来啦

做完这些,就是表演真正的技术的时候了。不要想着运行程序跑起来,那肯定是和中彩票一样的概率。具体的报错地方很多,但是都是一些用不上的类不错,我也记不清楚了,只能你们一点一点把不用的地方删除就ok。这个东西不少,但是不复杂,要细心(说了好几遍了)

常见问题:

1.当你导入FixFopen.c的时候会出现

这个是因为添加chatView聊天页面时候缺少依赖库

依赖库

2.如果你需要pch文件,可能会遇见下面问题,需要加上#ifdef __OBJC__ #endif 就好了

pch问题

3.一些警告的问题,都可以忽略了。因为聊天列表和聊天页面,demo3.0中有环信机器人相关的代码,通通删除,不会有影响的。

三、经验之谈

1.环信好用的首要一点就是,各种方法都包含EMMessage这个模型,里面可以用到自己需要的东西,还有拓展,如果开发什么新的模块和写新的方法,建议都传过去EMMessage。

2.chatViewController是继承于EaseMessageViewController这个基类的,里面包含了基本用到的代理方法,方便灵活使用。

3.肯定会操作聊天气泡和自定义消息,就是从MessageCellBubbleView里面修改的,自定义消息,也是要重新写view的拓展,例如下图中我订制的EaseBubbleView+Card类等

消息cell和自定义消息

4.自定义消息的发送直接调用就好了,这个很方便,消息拓展Ext的字段和类型需要提前商定

[EaseSDKHelper sendTextMessage:@"自定义消息"

to:self.easeGroupId

messageType:eMessageTypeGroupChat

requireEncryption:NO

messageExt:tmpDict];

暂时完结

暂时分享这么多,希望大家都能成功集成,顺利拿下项目。用第三方的demo集成,一定要知其所以然,一点一滴做起。有什么问题可以随时留言交流,希望我写的能让你们少走点弯路。谢谢大家支持。

作者:环信热心用户睡不着的叶

相关文章

C语言之文件操作

文件操作是C语言中非常重要的功能,用于读取和写入文件中的数据。C语言提供了一组标准库函数(如 fopen、fclose、fread、fwrite 等)来实现文件操作。以下是针对C语言初学者的详细讲解。...

C语言这些常见标准文件该如何使用?很基础也很重要

谈到文件,先了解下什么是文本文件和二进制文件的区别吧!1、文本文件:存储时是将字符的ASCII值存在磁盘中,取的时候将数值(ASCII)翻译成对应的字符;2、二进制文件:存取的都是二进制;文件流指针:...

初学者指南——文件包含(LFI / RFI)

在C语言中文件包含是指一个源文件可以将另一个源文件的全部内容包含进来。该命令的作用是在预编译时,将指定源文件的内容复制到当前文件中。文件包含是C语言预处理命令三个内容之一。一个大程序,通常分为多个模块...

C语言中的fwrite 与 write的区别

在C语言中,fwrite 和 write 都是用于向文件或设备写入数据的函数,但它们有显著的区别,主要体现在以下几个方面:1. 函数来源和层次fwrite:属于C标准库函数,定义在 <stdio...

「C语言笔记」什么是ANSI C标准?

我们在很多地方都有看到过K&R C、ANSI C、ISO C、C89、C99、C11等标准,具体有什么不同呢?什么是K&R C?1978年,丹尼斯o里奇(Dennis Ritchie)...

calloc和realloc的使用以及二级指针作为函数参数的输入和输出

1.calloc与realloc的使用void *malloc(size_t size)size -- 内存块的大小,以字节为单位该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NU...