环信自定义消息的实现过程详解

一 初始化程序

首先创建一个新工程,根据cocoapods安装相关的库文件,因为手动去拖拽集成,显得费劲并且还容易报错和难以维护,所以本人建议用cocoapods 去集成相关的第三方库

pod 'Hyphenate' //集成环信的带语音的库,当然也可以集成不带语音的。

pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git'//集成环信的相关的源码

第一步集成完成过后,测试编译一下,如果编译成功就说明集成成功,否则肯定是集成过程出错,这里安装cocoapods就不做过多的说明,具体的安装请参考www.jianshu.com/p/b64b4fd08d3c 的具体详见。

二 配置相关的证书

 第二步也是必须的一步,登录环信官网,注册开发者的账号,并创建应用,应用名和你新的工程是一样的,然后登录开发者账户,创建 APPID,bundleID 和你工程的ID是一致的,否则无法正确配置的推送证书的ID,从而不能正确的进入聊天的功能。

    创建完相关的证书过后,下载,去配置证书,在钥匙串中导出相关的生成的.p12文件,保存,配置证书密码备用,然后点击环信进入环信上传证书的的地方,如果是安卓的点击安卓,iOS的点击iOS,上传刚刚导出的证书,并填写相应设置的密码。就这样生成的证书就完事了,点击完成,过后就会生成相应的AppKey ,这个AppKey是环信生成的唯一标示,所以以后你的新项目和这个AppKey紧密相关,利用环信控制台你可以为你的新项目创建新用户或者你用注册的方式注册新用户也是可以的,这个看个人的喜欢,本人这个地方是自定义消息的实现,所以就以方便为主,所以采用的直接创建新用户。

三,配置工程的相关功能

首先导入环信的头文件,然后注册证书等相关的功能

EMOptions *options = [EMOptions optionsWithAppkey:@"1138170809115854#yoimproject"];//AppKey

options.apnsCertName = @"YOIMProject";//生成的证书的名字

[[EMClient sharedClient] initializeSDKWithOptions:options];

因为本人利用控制台注册的两个新用户,供聊天功能的实现,所以此处就不具体的实现环信登录和注册界面了,有什么不明白的请去环信官网看文档。

    第二,直接初始化用户登录,

[[EMClient sharedClient] loginWithUsername:@"用户1" password:@"密码" completion:^(NSString *aUsername, EMError *aError) {

if (!aError) { NSLog(@"登录成功");} else {

NSLog(@"登录失败");

}

}];

这样这个项目就绑定了这个用户1,在两个账户的登录用户2的时候,这样两个用户就实现了环信的对接,就可以直接开始面对面聊天和沟通了。

初始话聊天界面,因为所有的界面封装环信都做了相应的封装和集成,所有我们只需要创建一个新控制器继承自EaseMessageViewController;

这样即使一句代码都不写,我们也可以聊天,两个用户都可以通过环信的聊天功能进行聊天的实现,简单的发送文字图片和语音等。是不是特别简单?利用环信原生的功能就这样简单的被搞定了。

四,自定义图片的实现

首先利用环信原生的进行图片的发送和接受是可以,没问题,因为环信本来就支持这样的功能,但是你会发现利用原生的在发送的时候会出现边框,并且原生的UIEdgeMake(8,15,8,10);这个边框非常的大,所以开启了特别丑,所以我们需要自己去处理图的拉升和形状,所以在找到EaseBaseMessageCell的时候,在找到是发送图片的消息,进行代码的添加


加上这段的代码过后,你的图片就会随着你的父视图的变化而变化,从而在保证不变形的情况下,填充整个气泡视图的大小,最后去修改环信的约束,把EaseBubbleView+Image 这个类对图片的约束全部修改为0,这样就实现了QQ和微信的图片效果,具体代码如下

这样自定义图片就完全实现了。

五,自定义表情的实现,

自定义表情的实现需要的东西比较多,首先要根据环信的代码实现去编辑相应的代码,把他存到相应的字典中,从而生成一张对于的对照表,生成对照表代码如下,在appDelegate实现


这里涉及到相应的编码格式,至于自己的格式是什么请对应的实现相应的对照格式,

第二步,在你所对应的聊天界面实现添加自定义的表情,实现相应的代理方法,从而重写- (NSArray*)emotionFormessageViewController:(EaseMessageViewController *)viewController方法,实现代码如下


在实现的时候,添加表情数据源的话,一定要对应自己表情的名字,否则会找不到表情。自定义表情的时候需要添加相应的表情数组和字典,在EaseConvertToCommonEmoticonsHelper.h类里增加这两个工厂方法,

#pragma mark smallpngface

+ (NSDictionary *)emotionsDictionary;

+ (NSArray*)emotionsArray;

在EaseConvertToCommonEmoticonsHelper.m类里实现这两个方法,进行相应的编码格式转换,具体代码


具体的编码和对应的图片一一对应,


前边是表情的存储名字,后边是代码编码的名字

到目前为止,基本工作已经完全做完了

六,实现相应大小的计算和位置

计算大小,环信默认的表情是格子间没有间隔,如果我们自定义的表情也按照环信默认的话,图片会变得特别大,这样,先写的十分难看,所以我们需要根据自定义图片的类型进行计算图片的大小和间距,

在EaseFacialView.m中的相应方法中,增加实现


在发送表情的时候,在原生的基础上增加判断,这样才能实现自定义的表情的实现。因为一般自定义表情的都是PNG格式,所以添加条件即可,如果是自定义动画表情则类型相应发生改变即可。

最后一步,在编辑表情的时候,因为如果不进行饭编码的话,到输入框的内容就是编码的字符串,所以要进行反编码,才能显示图片,在EaseChatToolbar.m 的

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 里进行相应的判断和转换,代码如下


用可变属性字符串进行相应的转换,最后发送的时候把可变属性字符串发送出去,否则发送接收到的数据为空。从此整个发送自定义表情和图片的实现就完成了,自定义语音和视频功能后续实现。敬请期待。谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 【番茄工作法】 第三章 阶段 &列出活动清单,根据事件轻重缓急处理,每日更新表格,总结数据,并改进流程 &拒绝拖延...
    Anna李爱阅读 138评论 0 0
  • 文丨因爱而生 昨天意外收到一个短信,说我有个快递到达了长塘的百世汇通,叫我尽快去拿,我丈二和尚摸不著头脑,我既没网...
    因爱而生阅读 552评论 13 8
  • 广西师范大学出版社理想国系列——《伟大的电影》 与其说是书,不如说它本身做的更类似于艺术品,无论是给予人第一印象的...
    24个蛤蜊阅读 191评论 0 0