环信_iOS

环信_iOS

0
回复

【环信官方外包一个项目】利用环信IM实现一个在线白板 环信

回复

fat1 发起了问题 • 1 人关注 • 84 次浏览 • 2017-09-18 12:21 • 来自相关话题

0
评论

环信公开课16期回放|环信智能鉴黄:用深度学习实现99%精准度的鉴黄服务 环信 环信公开课 环信智能鉴黄 鉴黄

beyond 发表了文章 • 136 次浏览 • 2017-09-04 17:01 • 来自相关话题

   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:
   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。
环信公开课第16期分享内容:


















































环信公开课第16期视频回放:





参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh 查看全部
   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:

   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。


环信公开课第16期分享内容:
001.png


002.png


003.png


004.png


005.png


006.png


007.png


008.png


009.png


010.png


环信公开课第16期视频回放:






参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh
3a36009c9eb571b9a3a2797f17c4ae25.gif
0
评论

【开源项目】一个基于环信IM开发的开源的私密社交APP-Baby 即时通信 Baby

seven。 发表了文章 • 333 次浏览 • 2017-08-31 14:49 • 来自相关话题

Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。先上效果图




开屏页的登录和注册




编辑个人信息




相册页面




首页的Moment
版本更新:
 
version 1.6
加入Tinker 热修复更新部分依赖修复大量细节问题,加入部分注释

version 1.5
bug fixupdate sth

version 1.4
增加长按删除功能优化Rxbus订阅加载数据外国友人优化的一些细节等等

version 1.3
增加了评论功能优化了相册加载修复了一些内存泄漏等等

version 1.2
修复了一些Bug把登陆注册事件换了个Zip操作符更符合流的思想

version 1.1
修复了主页背景无法切换的问题修复了聊天推送的问题修了语音视频的问题做了一些细节修改
Download



安装包下载体验
 
github地址
github源码
 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。Thanks for improving my code m-ezzat.

Contacts
Email:379489343zhi@gmail.comQQ:379489343
 Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. 查看全部
   Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。
先上效果图

003.png

开屏页的登录和注册


001.png

编辑个人信息


002.png

相册页面


004.png

首页的Moment


版本更新:
 
version 1.6
  1. 加入Tinker 热修复
  2. 更新部分依赖
  3. 修复大量细节问题,加入部分注释


version 1.5
  1. bug fix
  2. update sth


version 1.4
  1. 增加长按删除功能
  2. 优化Rxbus订阅加载数据
  3. 外国友人优化的一些细节
  4. 等等


version 1.3
  1. 增加了评论功能
  2. 优化了相册加载
  3. 修复了一些内存泄漏
  4. 等等


version 1.2
  1. 修复了一些Bug
  2. 把登陆注册事件换了个Zip操作符更符合流的思想


version 1.1
  1. 修复了主页背景无法切换的问题
  2. 修复了聊天推送的问题
  3. 修了语音视频的问题
  4. 做了一些细节修改

Download

 
github地址

 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
  • 感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。
  • Thanks for improving my code m-ezzat.


Contacts

 
Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
6
评论

【新手快速入门】集成环信常见问题+解决方案汇总 常见问题

dujiepeng 发表了文章 • 5451 次浏览 • 2017-05-22 15:51 • 来自相关话题

   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇
APNs证书创建和上传到环信后台头像昵称的简述和处理方案音视频离线推送Demo实现环信服务器聊天记录保存多久?离线收不到好友请求IOS中环信聊天窗口如何实现文件发送和预览的功能ios集成常见问题环信推送的一些常见问题实现名片|红包|话题聊天室等自定义cell
 
Android篇
环信3.0SDK集成小米推送教程EaseUI库中V4、v7包冲突解决方案Android EaseUI里的百度地图替换为高德地图android扩展消息(名片集成)关于会话列表的置顶聊天java.lang.UnsatisfiedLinkError: 的问题android 端 app 后台被杀死收不到消息的解决方案
昵称头像篇
android中如何显示开发者服务器上的昵称和头像 Android中显示头像(接上一篇文章看)环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)IOS中如何显示开发者服务器上的昵称和头像【环信公开课第12期视频回放】-所有关于环信IM昵称头像的问题听这课就够了
 
直播篇
一言不合你就搞个直播APP
 
客服集成
IM-SDK和客服SDK并存开发指南—Android篇IM-SDK和客服SDK并存开发指南—iOS篇
 
开源项目
Android简版demoios简版demo凡信2.0:超仿微信的开源项目 凡信3.0:携直播和红包而来高仿微信:Github 3,515 Star方圆十里:环信编程大赛冠军项目泛聊:定一个小目标写一个QQSlack聊天机器人:一天时间做一个聊天机器人TV视频通话:在电视上视频通话视频通话:Android手机视频通话酷信:ios高仿微信公众号助手:与订阅用户聊天沟通
 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
  查看全部
   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇

 
Android篇

昵称头像篇

 
直播篇
  1. 一言不合你就搞个直播APP

 
客服集成
  1. IM-SDK和客服SDK并存开发指南—Android篇
  2. IM-SDK和客服SDK并存开发指南—iOS篇

 
开源项目

 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
 
0
回复
1
回复

iOS和安卓如何隐藏发送位置信息的按钮? 环信_Android 环信_iOS 隐藏发送位置信息按钮

geri_yang 回复了问题 • 2 人关注 • 81 次浏览 • 2017-09-18 16:48 • 来自相关话题

1
回复

集成环信之后,怎么在视频或者语音的时候,开启免提,在sdk里没有找到方法。ios的 环信_iOS

geri_yang 回复了问题 • 2 人关注 • 30 次浏览 • 2017-09-18 16:27 • 来自相关话题

1
回复

即时通讯账号之前都可以登录聊天,今天发现登录不了 环信_iOS 环信_Android 环信_管理后台 环信移动客服

baoshu 回复了问题 • 2 人关注 • 78 次浏览 • 2017-09-15 10:06 • 来自相关话题

0
回复

消息漫游 收不到内容。没数据返回,有什么要求吗? 环信_iOS

回复

kadis 发起了问题 • 1 人关注 • 62 次浏览 • 2017-09-14 14:37 • 来自相关话题

2
回复

ios 集成红包后,跳转到支付宝授权成功后,没有跳转回来,且 app 中显示取消授权 环信_iOS

倚枕不寻柯下梦丶 回复了问题 • 3 人关注 • 216 次浏览 • 2017-09-14 10:32 • 来自相关话题

0
回复

一个客户端等,另一个客户端登录同一个账号,回调方法不走, 环信_iOS

回复

零壹壹柒 发起了问题 • 1 人关注 • 50 次浏览 • 2017-09-13 18:00 • 来自相关话题

0
回复

iOS 聊天页面长按复制消息是英文copy 如何修改为中文? 环信_iOS

回复

发起了问题 • 1 人关注 • 39 次浏览 • 2017-09-13 16:50 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 54 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 51 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 109 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 62 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS群聊设置,只接收不提示群消息,请问调用SDK的哪个方法?谢谢 环信_iOS

回复

禾松 发起了问题 • 1 人关注 • 56 次浏览 • 2017-09-12 17:25 • 来自相关话题

0
回复

环信 react native 可以集成推送功能吗? 环信_Android 环信_iOS 环信_WebIM

回复

飞猪 发起了问题 • 1 人关注 • 63 次浏览 • 2017-09-12 16:44 • 来自相关话题

12
回复

经验分享:如何用环信做出一个可以媲美微信的群聊app(一)先看效果图 环信_iOS

Sunny 回复了问题 • 12 人关注 • 4386 次浏览 • 2017-09-12 16:35 • 来自相关话题

0
回复

IOS 获取当前用户所有群组数据无效 iOS 环信_iOS

回复

尾声动听 发起了问题 • 1 人关注 • 65 次浏览 • 2017-09-12 14:21 • 来自相关话题

0
回复
0
回复

iOS-环信即时聊天-发送图片气泡如何做成和微信一样? 环信_iOS

回复

柚子姑娘 发起了问题 • 1 人关注 • 100 次浏览 • 2017-09-04 16:59 • 来自相关话题

0
回复

如果要收藏一条消息,并且可以 转发出去 应该是怎么样一个思路 环信_iOS

回复

榆木 发起了问题 • 1 人关注 • 53 次浏览 • 2017-09-04 14:06 • 来自相关话题

0
回复

【急】iOS上架出错 环信_iOS

回复

Forever with you. 发起了问题 • 0 人关注 • 100 次浏览 • 2017-09-02 15:04 • 来自相关话题

0
回复

IOS端EaseMessageModel消息怎么转json 环信_iOS

回复

榆木 发起了问题 • 1 人关注 • 84 次浏览 • 2017-09-01 17:23 • 来自相关话题

2
回复

环信iOS初始化的登录 环信_iOS

一等到天幻 回复了问题 • 3 人关注 • 328 次浏览 • 2017-09-01 15:09 • 来自相关话题

5
回复

集成环信2.0 到项目里面编译出错 clang: error: linker command failed with exit code 1 (use -v to see invocation) 环信_iOS

一等到天幻 回复了问题 • 5 人关注 • 1525 次浏览 • 2017-09-01 15:05 • 来自相关话题

1
回复

进入聊天群的时候,旧消息和新消息会一起发送回来是怎么回事? 环信_iOS 环信SDK问题

回复

prf 回复了问题 • 1 人关注 • 97 次浏览 • 2017-08-30 14:16 • 来自相关话题

条新动态, 点击查看
donghai

donghai 回答了问题 • 2016-04-12 19:37 • 25 个回复 不感兴趣

求一份 iOS 3.x 群聊demo

赞同来自:

QQ邮箱给我,我给你发一份。
QQ邮箱给我,我给你发一份。
- (NSMutableArray *)loadDataSource

{

    NSMutableArray *ret = nil;

    NSArray *conversations = [[EaseMob sharedInstance].chat... 显示全部 »
- (NSMutableArray *)loadDataSource

{

    NSMutableArray *ret = nil;

    NSArray *conversations = [[EaseMob sharedInstance].chatManager conversations];




    NSArray* sorte = [conversations sortedArrayUsingComparator:

           ^(EMConversation *obj1, EMConversation* obj2){

               EMMessage *message1 = [obj1 latestMessage];

               EMMessage *message2 = [obj2 latestMessage];

               if(message1.timestamp > message2.timestamp) {

                   return(NSComparisonResult)NSOrderedAscending;

               }else {

                   return(NSComparisonResult)NSOrderedDescending;

               }

           }];

    

    ret = [[NSMutableArray alloc] initWithArray:sorte];

    return ret;

}
 
你在每次刷新的时候调这个方法就可以吧。  Demo有
3.3.1之前有个bug,如果登录之前调用了getAllConversations,会返回空,登录成功之后再调用,也会返回为空。这个已经在3.3.2中修复。请升级下SDK版本,谢谢~
3.3.1之前有个bug,如果登录之前调用了getAllConversations,会返回空,登录成功之后再调用,也会返回为空。这个已经在3.3.2中修复。请升级下SDK版本,谢谢~
xxl

xxl 回答了问题 • 2017-01-18 17:02 • 4 个回复 不感兴趣

getConversation返回nil

赞同来自:

好的哈
好的哈
PUT /{org_name}/{app_name}/users/{username}  修改用户昵称
通过上面的接口修改  notifier_name 和 device_token ~~~
这样实现了环信内用户跟当前设备的绑定,然后就通了,用户a(andro... 显示全部 »
PUT /{org_name}/{app_name}/users/{username}  修改用户昵称
通过上面的接口修改  notifier_name 和 device_token ~~~
这样实现了环信内用户跟当前设备的绑定,然后就通了,用户a(android客户端)发送消息给用户b(ios客户端),b能够收到离线通知,离线通知用https://github.com/zo0r/react-native-push-notification这个实现
至此该问题解决了~~~
木云落

木云落 回答了问题 • 2017-06-01 14:48 • 2 个回复 不感兴趣

官网demo iOS 语言Localizable.strings内容乱码

赞同来自:

这个不影响什么的, 可以按照下图方式查看 ,点击右键
这个不影响什么的, 可以按照下图方式查看 ,点击右键
木云落

木云落 回答了问题 • 2017-06-05 16:52 • 1 个回复 不感兴趣

求推送的一些问题及解决方法

赞同来自:

可以看下这里面的文章 : http://blog.csdn.net/jyt199011302/article/details/72829520
我总结了一些, 里面有你提出的相关问题
可以看下这里面的文章 : http://blog.csdn.net/jyt199011302/article/details/72829520
我总结了一些, 里面有你提出的相关问题
在3.3.1及以后的版本SDK提供了这个功能 ,  请升级一下SDK版本/*!
 *  \~chinese
 *  有用户加入群组
 *
 *  @param aGroup       加入的群组
 *  @param aUsername    加入者
 *
... 显示全部 »
在3.3.1及以后的版本SDK提供了这个功能 ,  请升级一下SDK版本/*!
 *  \~chinese
 *  有用户加入群组
 *
 *  @param aGroup       加入的群组
 *  @param aUsername    加入者
 *
 *  \~english
 *  Delegate method will be invoked when a user joins a group.
 *
 *  @param aGroup       Joined group
 *  @param aUsername    The user who joined group
 */
- (void)userDidJoinGroup:(EMGroup *)aGroup
                    user:(NSString *)aUsername;
木云落

木云落 回答了问题 • 2017-06-12 19:08 • 2 个回复 不感兴趣

iOS 如何显示一个空会话

赞同来自:

1.demo中有做空会话就删除的判断, 你可以注释掉这里的代码
2.你可以在加入或者之后向本地插入一条文本消息。conversationId是群组id,from是邀请人的id。
1) 在插入的提示消息中设置ext添加自定义字段,用于验证此消息代表加入/退出提示... 显示全部 »
1.demo中有做空会话就删除的判断, 你可以注释掉这里的代码
2.你可以在加入或者之后向本地插入一条文本消息。conversationId是群组id,from是邀请人的id。
1) 在插入的提示消息中设置ext添加自定义字段,用于验证此消息代表加入/退出提示的功能。然后根据这个字段去加载自定义的cell或者EaseUI的TimeCell。
2) 在继承自EaseMessageViewController的子类中实现
- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id)model
在此回调方法中,通过判断model.message.ext中是否存在1步骤中设置的字段,且其值不为空或者其值为YES,
初始化一个EaseMessageTimeCell,为cell.title赋值为[(EMTextMessageBody *)model.message.body text]
返回此创建的cell。如果model.message.ext不存在1步骤的字段,返回nil
木云落

木云落 回答了问题 • 2017-06-21 17:30 • 1 个回复 不感兴趣

环信得sdk 和 百度map 的sdk 冲突

赞同来自:

pod 'Hyphenate_CN'引入的是静态库版本
pod 'Hyphenate' 是动态库版本的, 动态库可以解决跟其他三方冲突的问题, 请升级一下版本到动态库
pod 'Hyphenate_CN'引入的是静态库版本
pod 'Hyphenate' 是动态库版本的, 动态库可以解决跟其他三方冲突的问题, 请升级一下版本到动态库
您好,不支持,而且这个parse很不稳定,不建议您使用,这个只是demo作为演示用的,环信不保证稳定性
您好,不支持,而且这个parse很不稳定,不建议您使用,这个只是demo作为演示用的,环信不保证稳定性
之前视频引入的静态库的SDK, 3.3.2是动态库的 , 需要向General → Embedded Binaries 中添加依赖库。桥文件中引入
#import <Hyphenate/Hyphenate.h>
7633
  显示全部 »
之前视频引入的静态库的SDK, 3.3.2是动态库的 , 需要向General → Embedded Binaries 中添加依赖库。桥文件中引入
#import <Hyphenate/Hyphenate.h>
7633
 
木云落

木云落 回答了问题 • 2017-06-30 14:29 • 1 个回复 不感兴趣

获取群成员列表只有群主才能调用么?

赞同来自:

需要登录之后需要获取一下群组列表,之后再获取群成员列表。
您可以参考demo中这里的方法来获取群成员

7661
 
需要登录之后需要获取一下群组列表,之后再获取群成员列表。
您可以参考demo中这里的方法来获取群成员

7661
 
木云落

木云落 回答了问题 • 2017-06-30 11:52 • 2 个回复 不感兴趣

iOS别处登录问题

赞同来自:

你的意思是, 用模拟器登录的时候可以获取好友列表, 用真机登录就获取不到是这样么? 
你的意思是, 用模拟器登录的时候可以获取好友列表, 用真机登录就获取不到是这样么? 
木云落

木云落 回答了问题 • 2017-07-11 15:32 • 3 个回复 不感兴趣

环信视频怎么做滤镜效果呀

赞同来自:

工单006223中已回复, 这里贴下回复内容
我们目前已有美颜等特效的体验demo,可以通过官网联系商务,授权后可以体验带美颜等特效的实时视频demo。
如果是需要自己来实现美颜特效,我们提供了头文件,附件的media_hapi.h
2中实现方式

... 显示全部 »
工单006223中已回复, 这里贴下回复内容
我们目前已有美颜等特效的体验demo,可以通过官网联系商务,授权后可以体验带美颜等特效的实时视频demo。
如果是需要自己来实现美颜特效,我们提供了头文件,附件的media_hapi.h
2中实现方式

* MEDIAEXPORT void hapi_register_local_platform_video(void * context, media_callback_local_platform_video_t callback); 
这个callback回调中,return 0表示我们的sdk可以继续使用buffer里的数据(如果buffer里的数据已被修改,sdk也会继续使用修改后的数据),你们需要对callback回调中的数据做特效处理,然后return 0

* 上述接口的callback中return 1,sdk不要使用buffer里的数据,需要你们把callback中的视频数据处理后,通过hapi_register_input_local_video接口 传给音视频服务器,然后服务器在收到视频流数据进行使用。
木云落

木云落 回答了问题 • 2017-07-11 15:37 • 1 个回复 不感兴趣

发送消息时环信账号是否区分大小写?

赞同来自:

目前我们环信id是不区分大小写的,认为XXX与xxx为同一用户,如果与当前登录用户的环信id,是通过App服务器获取到的,那么此时可能会出现大小写问题。建议在服务端注册用户时,同一为小写字母,这样会避免大小写做查询的问题。
目前我们环信id是不区分大小写的,认为XXX与xxx为同一用户,如果与当前登录用户的环信id,是通过App服务器获取到的,那么此时可能会出现大小写问题。建议在服务端注册用户时,同一为小写字母,这样会避免大小写做查询的问题。
木云落

木云落 回答了问题 • 2017-07-11 15:33 • 4 个回复 不感兴趣

打包时 出现 Hyphenate.framework (0 Entitlements)

赞同来自:

看下在Build setting -> General这里加上依赖库。
看下在Build setting -> General这里加上依赖库。
这个需要你看一下使用的SDK版本号是不是3.3.1或3.3.1以下,且在未登录前,是否已经执行了[[EMClient sharedClient].chatManager getAllConversations](此接口全部加断点运行)。如果满足这两个,那么你可... 显示全部 »
这个需要你看一下使用的SDK版本号是不是3.3.1或3.3.1以下,且在未登录前,是否已经执行了[[EMClient sharedClient].chatManager getAllConversations](此接口全部加断点运行)。如果满足这两个,那么你可以升级SDK到3.3.2。
请按照 http://docs.easemob.com/im/300iosclientintegration/20iossdkimport    配置工程,检查一下SDK集成的问题。
如果集成SDK时,target的 Linked Frameworks and... 显示全部 »
请按照 http://docs.easemob.com/im/300iosclientintegration/20iossdkimport    配置工程,检查一下SDK集成的问题。
如果集成SDK时,target的 Linked Frameworks and Libraries中 Hyphenate.framework(或者HyphenateLite.framework)在Staus一栏中为Optional,那么会出现你的问题,这是由于SDK集成错误导致。
你这里说的“语音及视频聊天”,指的是哪里的代码。如果是EaseUI中的,你可以自行在EaseChatBarMoreView中注释与audioCallButton、videoCallButton相关的的代码。
你这里说的“语音及视频聊天”,指的是哪里的代码。如果是EaseUI中的,你可以自行在EaseChatBarMoreView中注释与audioCallButton、videoCallButton相关的的代码。
如果你是使用的EaseUI,可以在EaseMessageViewController中- (void)didBecomeActive断点看一下self.messsagesSource、self.dataArray数据的变化。
如果你是使用的EaseUI,可以在EaseMessageViewController中- (void)didBecomeActive断点看一下self.messsagesSource、self.dataArray数据的变化。
joker

joker 回答了问题 • 2017-08-07 17:52 • 1 个回复 不感兴趣

iOS集成环信移动客服崩溃。dyld:Library not loaded

赞同来自:

解决了啊。看网上说是不适配低版本。但是我的iOS系统是最新的。不知道什么原因。在这里说一下解决方法吧。方便后来的人看一下。在项目的targets ->Build Phases ->Link Binary With Libraires里面找到你报错的... 显示全部 »
解决了啊。看网上说是不适配低版本。但是我的iOS系统是最新的。不知道什么原因。在这里说一下解决方法吧。方便后来的人看一下。在项目的targets ->Build Phases ->Link Binary With Libraires里面找到你报错的那个库。将后面的选项改为Optional就行了
dujiepeng

dujiepeng 回答了问题 • 2017-08-18 16:15 • 1 个回复 不感兴趣

iOS 获取公开群时出现问题

赞同来自:

你获取到了,不要直接打印,打印的有问题,群组里有一个属性叫description,这个和系统的重名了,导致你打印的话,出来的是群描述,你可以,返回的确实是EMGroup的数组。
你获取到了,不要直接打印,打印的有问题,群组里有一个属性叫description,这个和系统的重名了,导致你打印的话,出来的是群描述,你可以,返回的确实是EMGroup的数组。
您好,必须对方在线才可以,请知悉
您好,必须对方在线才可以,请知悉
0
回复

【环信官方外包一个项目】利用环信IM实现一个在线白板 环信

回复

fat1 发起了问题 • 1 人关注 • 84 次浏览 • 2017-09-18 12:21 • 来自相关话题

0
评论

环信公开课16期回放|环信智能鉴黄:用深度学习实现99%精准度的鉴黄服务 环信 环信公开课 环信智能鉴黄 鉴黄

beyond 发表了文章 • 136 次浏览 • 2017-09-04 17:01 • 来自相关话题

   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:
   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。
环信公开课第16期分享内容:


















































环信公开课第16期视频回放:





参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh 查看全部
   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:

   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。


环信公开课第16期分享内容:
001.png


002.png


003.png


004.png


005.png


006.png


007.png


008.png


009.png


010.png


环信公开课第16期视频回放:






参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh
3a36009c9eb571b9a3a2797f17c4ae25.gif
0
评论

【开源项目】一个基于环信IM开发的开源的私密社交APP-Baby 即时通信 Baby

seven。 发表了文章 • 333 次浏览 • 2017-08-31 14:49 • 来自相关话题

Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。先上效果图




开屏页的登录和注册




编辑个人信息




相册页面




首页的Moment
版本更新:
 
version 1.6
加入Tinker 热修复更新部分依赖修复大量细节问题,加入部分注释

version 1.5
bug fixupdate sth

version 1.4
增加长按删除功能优化Rxbus订阅加载数据外国友人优化的一些细节等等

version 1.3
增加了评论功能优化了相册加载修复了一些内存泄漏等等

version 1.2
修复了一些Bug把登陆注册事件换了个Zip操作符更符合流的思想

version 1.1
修复了主页背景无法切换的问题修复了聊天推送的问题修了语音视频的问题做了一些细节修改
Download



安装包下载体验
 
github地址
github源码
 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。Thanks for improving my code m-ezzat.

Contacts
Email:379489343zhi@gmail.comQQ:379489343
 Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. 查看全部
   Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。
先上效果图

003.png

开屏页的登录和注册


001.png

编辑个人信息


002.png

相册页面


004.png

首页的Moment


版本更新:
 
version 1.6
  1. 加入Tinker 热修复
  2. 更新部分依赖
  3. 修复大量细节问题,加入部分注释


version 1.5
  1. bug fix
  2. update sth


version 1.4
  1. 增加长按删除功能
  2. 优化Rxbus订阅加载数据
  3. 外国友人优化的一些细节
  4. 等等


version 1.3
  1. 增加了评论功能
  2. 优化了相册加载
  3. 修复了一些内存泄漏
  4. 等等


version 1.2
  1. 修复了一些Bug
  2. 把登陆注册事件换了个Zip操作符更符合流的思想


version 1.1
  1. 修复了主页背景无法切换的问题
  2. 修复了聊天推送的问题
  3. 修了语音视频的问题
  4. 做了一些细节修改

Download

 
github地址

 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
  • 感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。
  • Thanks for improving my code m-ezzat.


Contacts

 
Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
6
评论

【新手快速入门】集成环信常见问题+解决方案汇总 常见问题

dujiepeng 发表了文章 • 5451 次浏览 • 2017-05-22 15:51 • 来自相关话题

   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇
APNs证书创建和上传到环信后台头像昵称的简述和处理方案音视频离线推送Demo实现环信服务器聊天记录保存多久?离线收不到好友请求IOS中环信聊天窗口如何实现文件发送和预览的功能ios集成常见问题环信推送的一些常见问题实现名片|红包|话题聊天室等自定义cell
 
Android篇
环信3.0SDK集成小米推送教程EaseUI库中V4、v7包冲突解决方案Android EaseUI里的百度地图替换为高德地图android扩展消息(名片集成)关于会话列表的置顶聊天java.lang.UnsatisfiedLinkError: 的问题android 端 app 后台被杀死收不到消息的解决方案
昵称头像篇
android中如何显示开发者服务器上的昵称和头像 Android中显示头像(接上一篇文章看)环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)IOS中如何显示开发者服务器上的昵称和头像【环信公开课第12期视频回放】-所有关于环信IM昵称头像的问题听这课就够了
 
直播篇
一言不合你就搞个直播APP
 
客服集成
IM-SDK和客服SDK并存开发指南—Android篇IM-SDK和客服SDK并存开发指南—iOS篇
 
开源项目
Android简版demoios简版demo凡信2.0:超仿微信的开源项目 凡信3.0:携直播和红包而来高仿微信:Github 3,515 Star方圆十里:环信编程大赛冠军项目泛聊:定一个小目标写一个QQSlack聊天机器人:一天时间做一个聊天机器人TV视频通话:在电视上视频通话视频通话:Android手机视频通话酷信:ios高仿微信公众号助手:与订阅用户聊天沟通
 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
  查看全部
   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇

 
Android篇

昵称头像篇

 
直播篇
  1. 一言不合你就搞个直播APP

 
客服集成
  1. IM-SDK和客服SDK并存开发指南—Android篇
  2. IM-SDK和客服SDK并存开发指南—iOS篇

 
开源项目

 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
 
0
回复

【环信官方外包一个项目】利用环信IM实现一个在线白板 环信

回复

fat1 发起了问题 • 1 人关注 • 84 次浏览 • 2017-09-18 12:21 • 来自相关话题

0
评论

环信公开课16期回放|环信智能鉴黄:用深度学习实现99%精准度的鉴黄服务 环信 环信公开课 环信智能鉴黄 鉴黄

beyond 发表了文章 • 136 次浏览 • 2017-09-04 17:01 • 来自相关话题

   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:
   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。
环信公开课第16期分享内容:


















































环信公开课第16期视频回放:





参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh 查看全部
   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:

   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。


环信公开课第16期分享内容:
001.png


002.png


003.png


004.png


005.png


006.png


007.png


008.png


009.png


010.png


环信公开课第16期视频回放:






参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh
3a36009c9eb571b9a3a2797f17c4ae25.gif
0
评论

【开源项目】一个基于环信IM开发的开源的私密社交APP-Baby 即时通信 Baby

seven。 发表了文章 • 333 次浏览 • 2017-08-31 14:49 • 来自相关话题

Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。先上效果图




开屏页的登录和注册




编辑个人信息




相册页面




首页的Moment
版本更新:
 
version 1.6
加入Tinker 热修复更新部分依赖修复大量细节问题,加入部分注释

version 1.5
bug fixupdate sth

version 1.4
增加长按删除功能优化Rxbus订阅加载数据外国友人优化的一些细节等等

version 1.3
增加了评论功能优化了相册加载修复了一些内存泄漏等等

version 1.2
修复了一些Bug把登陆注册事件换了个Zip操作符更符合流的思想

version 1.1
修复了主页背景无法切换的问题修复了聊天推送的问题修了语音视频的问题做了一些细节修改
Download



安装包下载体验
 
github地址
github源码
 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。Thanks for improving my code m-ezzat.

Contacts
Email:379489343zhi@gmail.comQQ:379489343
 Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. 查看全部
   Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。
先上效果图

003.png

开屏页的登录和注册


001.png

编辑个人信息


002.png

相册页面


004.png

首页的Moment


版本更新:
 
version 1.6
  1. 加入Tinker 热修复
  2. 更新部分依赖
  3. 修复大量细节问题,加入部分注释


version 1.5
  1. bug fix
  2. update sth


version 1.4
  1. 增加长按删除功能
  2. 优化Rxbus订阅加载数据
  3. 外国友人优化的一些细节
  4. 等等


version 1.3
  1. 增加了评论功能
  2. 优化了相册加载
  3. 修复了一些内存泄漏
  4. 等等


version 1.2
  1. 修复了一些Bug
  2. 把登陆注册事件换了个Zip操作符更符合流的思想


version 1.1
  1. 修复了主页背景无法切换的问题
  2. 修复了聊天推送的问题
  3. 修了语音视频的问题
  4. 做了一些细节修改

Download

 
github地址

 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
  • 感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。
  • Thanks for improving my code m-ezzat.


Contacts

 
Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
6
评论

【新手快速入门】集成环信常见问题+解决方案汇总 常见问题

dujiepeng 发表了文章 • 5451 次浏览 • 2017-05-22 15:51 • 来自相关话题

   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇
APNs证书创建和上传到环信后台头像昵称的简述和处理方案音视频离线推送Demo实现环信服务器聊天记录保存多久?离线收不到好友请求IOS中环信聊天窗口如何实现文件发送和预览的功能ios集成常见问题环信推送的一些常见问题实现名片|红包|话题聊天室等自定义cell
 
Android篇
环信3.0SDK集成小米推送教程EaseUI库中V4、v7包冲突解决方案Android EaseUI里的百度地图替换为高德地图android扩展消息(名片集成)关于会话列表的置顶聊天java.lang.UnsatisfiedLinkError: 的问题android 端 app 后台被杀死收不到消息的解决方案
昵称头像篇
android中如何显示开发者服务器上的昵称和头像 Android中显示头像(接上一篇文章看)环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)IOS中如何显示开发者服务器上的昵称和头像【环信公开课第12期视频回放】-所有关于环信IM昵称头像的问题听这课就够了
 
直播篇
一言不合你就搞个直播APP
 
客服集成
IM-SDK和客服SDK并存开发指南—Android篇IM-SDK和客服SDK并存开发指南—iOS篇
 
开源项目
Android简版demoios简版demo凡信2.0:超仿微信的开源项目 凡信3.0:携直播和红包而来高仿微信:Github 3,515 Star方圆十里:环信编程大赛冠军项目泛聊:定一个小目标写一个QQSlack聊天机器人:一天时间做一个聊天机器人TV视频通话:在电视上视频通话视频通话:Android手机视频通话酷信:ios高仿微信公众号助手:与订阅用户聊天沟通
 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
  查看全部
   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇

 
Android篇

昵称头像篇

 
直播篇
  1. 一言不合你就搞个直播APP

 
客服集成
  1. IM-SDK和客服SDK并存开发指南—Android篇
  2. IM-SDK和客服SDK并存开发指南—iOS篇

 
开源项目

 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
 
0
回复
1
回复

iOS和安卓如何隐藏发送位置信息的按钮? 环信_Android 环信_iOS 隐藏发送位置信息按钮

回复

geri_yang 回复了问题 • 2 人关注 • 81 次浏览 • 2017-09-18 16:48 • 来自相关话题

1
回复

集成环信之后,怎么在视频或者语音的时候,开启免提,在sdk里没有找到方法。ios的 环信_iOS

回复

geri_yang 回复了问题 • 2 人关注 • 30 次浏览 • 2017-09-18 16:27 • 来自相关话题

1
回复

即时通讯账号之前都可以登录聊天,今天发现登录不了 环信_iOS 环信_Android 环信_管理后台 环信移动客服

回复

baoshu 回复了问题 • 2 人关注 • 78 次浏览 • 2017-09-15 10:06 • 来自相关话题

0
回复

消息漫游 收不到内容。没数据返回,有什么要求吗? 环信_iOS

回复

kadis 发起了问题 • 1 人关注 • 62 次浏览 • 2017-09-14 14:37 • 来自相关话题

2
回复

ios 集成红包后,跳转到支付宝授权成功后,没有跳转回来,且 app 中显示取消授权 环信_iOS

回复

倚枕不寻柯下梦丶 回复了问题 • 3 人关注 • 216 次浏览 • 2017-09-14 10:32 • 来自相关话题

0
回复

一个客户端等,另一个客户端登录同一个账号,回调方法不走, 环信_iOS

回复

零壹壹柒 发起了问题 • 1 人关注 • 50 次浏览 • 2017-09-13 18:00 • 来自相关话题

0
回复

iOS 聊天页面长按复制消息是英文copy 如何修改为中文? 环信_iOS

回复

发起了问题 • 1 人关注 • 39 次浏览 • 2017-09-13 16:50 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 54 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 51 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 109 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS 聊天页面如果有图片,则加载聊天内容和tableview滑到就会卡,怎么解决? 环信_iOS

回复

汤了个圆 发起了问题 • 1 人关注 • 62 次浏览 • 2017-09-13 00:04 • 来自相关话题

0
回复

iOS群聊设置,只接收不提示群消息,请问调用SDK的哪个方法?谢谢 环信_iOS

回复

禾松 发起了问题 • 1 人关注 • 56 次浏览 • 2017-09-12 17:25 • 来自相关话题

0
回复

环信 react native 可以集成推送功能吗? 环信_Android 环信_iOS 环信_WebIM

回复

飞猪 发起了问题 • 1 人关注 • 63 次浏览 • 2017-09-12 16:44 • 来自相关话题

12
回复

经验分享:如何用环信做出一个可以媲美微信的群聊app(一)先看效果图 环信_iOS

回复

Sunny 回复了问题 • 12 人关注 • 4386 次浏览 • 2017-09-12 16:35 • 来自相关话题

0
回复

IOS 获取当前用户所有群组数据无效 iOS 环信_iOS

回复

尾声动听 发起了问题 • 1 人关注 • 65 次浏览 • 2017-09-12 14:21 • 来自相关话题

0
回复
0
回复

iOS-环信即时聊天-发送图片气泡如何做成和微信一样? 环信_iOS

回复

柚子姑娘 发起了问题 • 1 人关注 • 100 次浏览 • 2017-09-04 16:59 • 来自相关话题

0
回复

如果要收藏一条消息,并且可以 转发出去 应该是怎么样一个思路 环信_iOS

回复

榆木 发起了问题 • 1 人关注 • 53 次浏览 • 2017-09-04 14:06 • 来自相关话题

0
回复

【急】iOS上架出错 环信_iOS

回复

Forever with you. 发起了问题 • 0 人关注 • 100 次浏览 • 2017-09-02 15:04 • 来自相关话题

0
回复

IOS端EaseMessageModel消息怎么转json 环信_iOS

回复

榆木 发起了问题 • 1 人关注 • 84 次浏览 • 2017-09-01 17:23 • 来自相关话题

2
回复

环信iOS初始化的登录 环信_iOS

回复

一等到天幻 回复了问题 • 3 人关注 • 328 次浏览 • 2017-09-01 15:09 • 来自相关话题

5
回复
1
回复

进入聊天群的时候,旧消息和新消息会一起发送回来是怎么回事? 环信_iOS 环信SDK问题

回复

prf 回复了问题 • 1 人关注 • 97 次浏览 • 2017-08-30 14:16 • 来自相关话题

0
回复

【环信官方外包一个项目】利用环信IM实现一个在线白板 环信

回复

fat1 发起了问题 • 1 人关注 • 84 次浏览 • 2017-09-18 12:21 • 来自相关话题

0
评论

环信公开课16期回放|环信智能鉴黄:用深度学习实现99%精准度的鉴黄服务 环信 环信公开课 环信智能鉴黄 鉴黄

beyond 发表了文章 • 136 次浏览 • 2017-09-04 17:01 • 来自相关话题

   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:
   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。
环信公开课第16期分享内容:


















































环信公开课第16期视频回放:





参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh 查看全部
   8月31日,环信公开课以“智能鉴黄”为主题,为大家普及了内容审查工作的前世今生,以及环信智能鉴黄算法、技术实现和行业解决方案。
 
关于环信智能鉴黄:

   随着移动互联网的飞速发展和信息量的猛增,大量的色情、赌博、暴力等不良信息图片夹杂在信息流中,严重影响着整个互联网的体验和健康发展。各大互联网公司为了保持自己所提供的服务不触犯国家法律和法规,使得鉴黄工作变得尤为重要。环信智能鉴黄服务基于深度学习的智能鉴黄算法,识别精准度高达99%,可以帮助企业完成95%的图片内容审查工作,节省90%的时间及人工成本。


环信公开课第16期分享内容:
001.png


002.png


003.png


004.png


005.png


006.png


007.png


008.png


009.png


010.png


环信公开课第16期视频回放:






参加环信公开课还有大礼相送:
恭喜手机尾号8985的leoNN同学成为本期公开课幸运观众,获得环信定制版瑞士军团双肩背包。

环信智能鉴黄免费体验请联系环信小助手,微信huanxin-hh
3a36009c9eb571b9a3a2797f17c4ae25.gif
0
评论

【开源项目】一个基于环信IM开发的开源的私密社交APP-Baby 即时通信 Baby

seven。 发表了文章 • 333 次浏览 • 2017-08-31 14:49 • 来自相关话题

Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。先上效果图




开屏页的登录和注册




编辑个人信息




相册页面




首页的Moment
版本更新:
 
version 1.6
加入Tinker 热修复更新部分依赖修复大量细节问题,加入部分注释

version 1.5
bug fixupdate sth

version 1.4
增加长按删除功能优化Rxbus订阅加载数据外国友人优化的一些细节等等

version 1.3
增加了评论功能优化了相册加载修复了一些内存泄漏等等

version 1.2
修复了一些Bug把登陆注册事件换了个Zip操作符更符合流的思想

version 1.1
修复了主页背景无法切换的问题修复了聊天推送的问题修了语音视频的问题做了一些细节修改
Download



安装包下载体验
 
github地址
github源码
 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。Thanks for improving my code m-ezzat.

Contacts
Email:379489343zhi@gmail.comQQ:379489343
 Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. 查看全部
   Baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。
先上效果图

003.png

开屏页的登录和注册


001.png

编辑个人信息


002.png

相册页面


004.png

首页的Moment


版本更新:
 
version 1.6
  1. 加入Tinker 热修复
  2. 更新部分依赖
  3. 修复大量细节问题,加入部分注释


version 1.5
  1. bug fix
  2. update sth


version 1.4
  1. 增加长按删除功能
  2. 优化Rxbus订阅加载数据
  3. 外国友人优化的一些细节
  4. 等等


version 1.3
  1. 增加了评论功能
  2. 优化了相册加载
  3. 修复了一些内存泄漏
  4. 等等


version 1.2
  1. 修复了一些Bug
  2. 把登陆注册事件换了个Zip操作符更符合流的思想


version 1.1
  1. 修复了主页背景无法切换的问题
  2. 修复了聊天推送的问题
  3. 修了语音视频的问题
  4. 做了一些细节修改

Download

 
github地址

 Development Environment & Library
 
MVP

这个项目是基于MVP框架写的(大体上,聊天那块直接用环信的了),大部分Base类参考FastAndroid里边的基类,参考这个很快就能布好基本的MVP架构。本来是有考虑过MVVM后来想想还是先学习一下MVP吧,看过几个MVVM项目感觉还是挺好用的,不过还是BETA版不知道有没有什么坑。

Material Design

早就手痒想体验一把V7包里边的各种控件了,特喜欢coordinatorlayout和collapsingtoolbarlayout的互动让Tollbar隐藏又现的感觉,但是看起来好看还是要点代价的,在这里捣鼓了不少时间,尤其是collapsingtoolbarlayout的Expanded固定让我Google了好久,因为用英文搜索可能我表达的不太好,最后竟然是一句nestedScroll(false)就可以了。。。。 还是感谢Stackoveflow里边的大腿吧。

Dagger2

依赖注入Dagger2,也是我早就想用的一个框架了,理由是各种配合Mvp十分方便和好用,渐渐也能体会到一次注入到处可用的快感。不过一个新技术真的学习成本,国内没什么中文文档介绍,看国外的看的云里雾里。原理看的明白,用起来好像不太知道如何使用,尤其是在@inject之后对象,也可以在别的地方Inject,原本是被Inject方后来也成了Module提供方。虽然到最后原理还不是特别明白这里,但还是不阻碍用起来的快感。

Realm

一开始被新技术吸引到的是不会放过任何新东西的包括Realm,不过进了坑不代表这个坑可以跳阿。由于我这次用到了leacncloud,Realm感觉会和LeanCloud的子类化冲突让你只能选择其中之一,不过这个也算了,Leancloud提供了类似Map的Put方法也可以接受就是麻烦了点。但是被坑到的地方是Realm所谓的自动数据同步竟然是一改就是改真实的数据,并不是数据的拷贝。。。感觉和我使用到要缓存的数据有点冲突,因为这个Moment里边的项是有点赞的,点赞要修改当前Recycleview的数据(修改数据要开事务)。修改数据后会出现一些很奇怪的现象,不在Recycleview当前Item会跳到当前Item,点赞的动画也会消失。。。真的是想破脑袋也解决不了,就直接跳坑了。最后感觉这个Realm在保存不跟服务器需要同步的数据会好点。

LeanCloud

用LeanCloud是因为在知乎太多吹它的人了而且它的确在BAAS这方面功能比较多(后来才发现即时通信没有语音和视频),所以就尝试使用了,SDK整体来说是不错的都挺好用的,满足了我对存储方面的要求。不过就在我开发的这几天,貌似稳定性没有想象中那么好,好几次上传个头像都会SocketTimeOut,查询也会有点慢,不过还好都在接受范围内(不过要是到了收费的标准我就接受不了)。

环信

baby这个开源项目基于环信IM开发,刚开始选择IM的时候,看到知乎上黑环信的人挺多的,就亲自下载了几家IM的demo源码跑一遍,从功能、集成难易和消息稳定几个方面对比,最终还是选择了环信。集成这方面环信做的真不错,尤其是有了EaseUi这个包,基本上一天就能集成完毕。项目运行至今没有出现过什么问题,发送消息挺稳定的。

Rxjava、RxAndroid

Rxjava我从第一眼看到了就喜欢上了(个人特喜欢那种通过.设置完成的感觉),接触也有几个月,一开始就和Retrofit 、Okhttp一起使用。学习成本还是要有的阿,看了不知道多少篇关于Rxjava使用的文章和例子,对里边的操作符也仅仅停留在那几个最常用的,其他一大堆好多都没用过,看来还用得不够。

Glide

Glide也是一个后来居上让我喜欢的图片加载库,一开始我喜欢picasso 是觉得轻巧而且好用有保证(主要是我偶像Jake Wharton主导,有加成),慢慢觉得Picasso对内存没有Glide来的友好,Glide在加载速度方面也领先,虽然整个库代码量是Picasso的几倍,但是比起重要的内存和用户体验来说还是Glide的领先一筹。

Butterknife、Ucrop等等

当让还有其他的一些润色的轮子啦,不过不是那么重要就不一一感谢啦。

Thanks
  • 感谢Github、LeanCloud、环信、还有造那么多轮子给我们用的Square FaceBook Google的大大们。
  • Thanks for improving my code m-ezzat.


Contacts

 
Copyright 2016 Roger ou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
6
评论

【新手快速入门】集成环信常见问题+解决方案汇总 常见问题

dujiepeng 发表了文章 • 5451 次浏览 • 2017-05-22 15:51 • 来自相关话题

   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇
APNs证书创建和上传到环信后台头像昵称的简述和处理方案音视频离线推送Demo实现环信服务器聊天记录保存多久?离线收不到好友请求IOS中环信聊天窗口如何实现文件发送和预览的功能ios集成常见问题环信推送的一些常见问题实现名片|红包|话题聊天室等自定义cell
 
Android篇
环信3.0SDK集成小米推送教程EaseUI库中V4、v7包冲突解决方案Android EaseUI里的百度地图替换为高德地图android扩展消息(名片集成)关于会话列表的置顶聊天java.lang.UnsatisfiedLinkError: 的问题android 端 app 后台被杀死收不到消息的解决方案
昵称头像篇
android中如何显示开发者服务器上的昵称和头像 Android中显示头像(接上一篇文章看)环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)IOS中如何显示开发者服务器上的昵称和头像【环信公开课第12期视频回放】-所有关于环信IM昵称头像的问题听这课就够了
 
直播篇
一言不合你就搞个直播APP
 
客服集成
IM-SDK和客服SDK并存开发指南—Android篇IM-SDK和客服SDK并存开发指南—iOS篇
 
开源项目
Android简版demoios简版demo凡信2.0:超仿微信的开源项目 凡信3.0:携直播和红包而来高仿微信:Github 3,515 Star方圆十里:环信编程大赛冠军项目泛聊:定一个小目标写一个QQSlack聊天机器人:一天时间做一个聊天机器人TV视频通话:在电视上视频通话视频通话:Android手机视频通话酷信:ios高仿微信公众号助手:与订阅用户聊天沟通
 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
  查看全部
   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇

 
Android篇

昵称头像篇

 
直播篇
  1. 一言不合你就搞个直播APP

 
客服集成
  1. IM-SDK和客服SDK并存开发指南—Android篇
  2. IM-SDK和客服SDK并存开发指南—iOS篇

 
开源项目

 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
 
0
评论

视频超过三十秒后再接受 无数据 环信_iOS

╰つ笑ぷ倾城ら 发表了文章 • 92 次浏览 • 2017-06-22 16:57 • 来自相关话题

iOS 根安卓的  视频聊天 超过三十秒之后在接受就没有画面了 都是黑的 小窗口是有画面的是因为 超时了吗 ? 还是什么原因该怎么解决呢  谢谢
iOS 根安卓的  视频聊天 超过三十秒之后在接受就没有画面了 都是黑的 小窗口是有画面的是因为 超时了吗 ? 还是什么原因该怎么解决呢  谢谢
3
评论

环信ReactNative IM Demo源码运行 环信_WebIM 环信_iOS

环信沈冲 发表了文章 • 922 次浏览 • 2016-12-29 12:43 • 来自相关话题

环信终于发布了ReactNative版本的demo:V0.1.0 2016-12-23

那么问题来了,ReactNative新手如何运行demo源码呢?

首先阅读下集成的官方文档:http://docs.easemob.com/im/react-native/ios-app;下载demo源码。

如果之前没有安装过ReactNative环境的,执行npm run newclear命令肯定会报错,这里介绍下如何从0开始运行ReactNative demo源码。
首先安装brew(url隐藏了可以看下图,或者点击即可在浏览器下个标签页地址栏获取):
ruby -e "$(curl -fsSL https://raw.githubusercontent. ... nstall)"



安装wget:
brew install wget 
再安装node:
1、先更新下brew,使其在最新版本,代码如下:brew update2、可以检查下brew是否有什么问题brew doctor这步可以先忽略,如后续步骤出错,可以执行该命令检查,然后根据报错或警告提示处理相关问题;如不会,可以截图给我评论;
3、安装nodebrew install node大概45M多点,需要点时间;
安装watchman:
brew install watchman 
安装flow:
brew install flow 
然后再到工程文件夹执行npm run newclear即可


注:
如果上述命令在执行的时候卡在下列命令行很久不动
fetchMetadata: sill mapToRegistry uri http://registry.npmjs.org/whatwg-fetch
那么更换成淘宝的源即可:npm config set registry https://registry.npm.taobao.org
-- 配置后可通过下面方式来验证是否成功
npm config get registry
-- 或npm info express  

在执行npm run newclear命令的时候,可以看到工程文件夹中node_modules文件夹的大小一直在增加,那就对了。下载完成,打开webim-react-native-master/ios/app.xcodeproj即可运行该项目了。 查看全部
环信终于发布了ReactNative版本的demo:V0.1.0 2016-12-23

那么问题来了,ReactNative新手如何运行demo源码呢?

首先阅读下集成的官方文档:http://docs.easemob.com/im/react-native/ios-app;下载demo源码。

如果之前没有安装过ReactNative环境的,执行
npm run newclear
命令肯定会报错,这里介绍下如何从0开始运行ReactNative demo源码。
  • 首先安装brew(url隐藏了可以看下图,或者点击即可在浏览器下个标签页地址栏获取):

ruby -e "$(curl -fsSL https://raw.githubusercontent. ... nstall)"
QQ20161229-0.png

  • 安装wget:

brew install wget
 
  • 再安装node:

1、先更新下brew,使其在最新版本,代码如下:
brew update
2、可以检查下brew是否有什么问题
brew doctor
这步可以先忽略,如后续步骤出错,可以执行该命令检查,然后根据报错或警告提示处理相关问题;如不会,可以截图给我评论;
3、安装node
brew install node
大概45M多点,需要点时间;
  • 安装watchman:

brew install watchman
 
  • 安装flow:

brew install flow
 
然后再到工程文件夹执行
npm run newclear
即可


注:
如果上述命令在执行的时候卡在下列命令行很久不动
fetchMetadata: sill mapToRegistry uri http://registry.npmjs.org/whatwg-fetch
那么更换成淘宝的源即可:
npm config set registry https://registry.npm.taobao.org  
-- 配置后可通过下面方式来验证是否成功
npm config get registry
-- 或npm info express  

在执行npm run newclear命令的时候,可以看到工程文件夹中node_modules文件夹的大小一直在增加,那就对了。下载完成,打开webim-react-native-master/ios/app.xcodeproj即可运行该项目了。
0
评论

谈谈iOS使用环信的几个问题 环信 iOS集成 环信_iOS

BluesACE 发表了文章 • 569 次浏览 • 2016-11-04 17:00 • 来自相关话题

关于怎样导入环信SDK 就不再说了 视频和文档上都有介绍。
1. 不过,需要注意的是环信的文档上是这样说的




pod "Hyphenate_CN" 是导入不了的, 因为找不到这个库。当然很多人都会先pod search "Hyphenate" 再选择需要导入的版本。
2.昵称、头像的设置
关于怎样设置昵称头像 环信官方也给出了解决方案http://docs.easemob.com/im/490integrationcases/10nickname
关于方法二 我还是遇到了一些问题:
手机先后登入两个帐号 (帐号A 、帐号B),那么帐号B的会话列表中就会出现帐号A的会话 ,如果帐号A发起了和帐号B的会话,甚至还会出现帐号B自己和自己的会话(这个很不明白)。
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];
既然这个是获取当前登入帐号的所有会话,那么为什么会出现这种状况? 我想是不是环信服务器里并没有保存我们的会话,仅仅是保存在当前设备上了?
 
 
  查看全部
关于怎样导入环信SDK 就不再说了 视频和文档上都有介绍。
1. 不过,需要注意的是环信的文档上是这样说的
Snip20161104_1.png

pod "Hyphenate_CN" 是导入不了的, 因为找不到这个库。当然很多人都会先pod search "Hyphenate" 再选择需要导入的版本。
2.昵称、头像的设置
关于怎样设置昵称头像 环信官方也给出了解决方案http://docs.easemob.com/im/490integrationcases/10nickname
关于方法二 我还是遇到了一些问题:
手机先后登入两个帐号 (帐号A 、帐号B),那么帐号B的会话列表中就会出现帐号A的会话 ,如果帐号A发起了和帐号B的会话,甚至还会出现帐号B自己和自己的会话(这个很不明白)。
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];
既然这个是获取当前登入帐号的所有会话,那么为什么会出现这种状况? 我想是不是环信服务器里并没有保存我们的会话,仅仅是保存在当前设备上了?
 
 
 
0
评论

【环信集成笔记】入门篇-环信单聊的简单用法 环信_iOS 环信 iOS集成 环信集成笔记

beyond 发表了文章 • 1223 次浏览 • 2016-09-20 12:03 • 来自相关话题

即时通讯--环信

      诚如诸位正在看这篇文章的童鞋们,即时通讯我们用到的最普遍的就是--环信,接下来我(范小明)将在工程项目中用到的环信知识列举下来:

       我们的项目用到的是单聊(不涉及群聊),用到的也是最基础的知识.


       想必你看我这篇文章之前已经看了http://docs.easemob.com/im/start"环信开发文档"了吧,是因为字太多看不下去吗,记住即便在我这篇文章拿到了你想要的知识,这个开发文档也要多研读多研读多研读(每读一次就会有新的体会,然后很多问题就会迎刃而解,不信的话你就多读几遍试试),ok,废话不多说,下面上实例:

1)下载最新版的SDK





http://www.easemob.com/download 点进去下载去吧
 
2)导入sdk到工程里

你的工程是新建立的还是老工程要加入及时通讯功能?如果是老工程的话,导入sdk时注意sdk包里面包含第三方和你原来工程里的第三方有冲突吗(主要是版本冲突)




(点第三方进去查看下版本信息是否跟你原来的有冲突)
 
第三方库介绍

EaseUI 中用到的第三方库:

MWPhotoBrowser: 图片处理库,浏览显示

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目

导入SDk环信官方文档写的特别清楚,我就不写了,直接参照文档就可以.

3)以上都搞完了是吗,我要把我的环信demo拿出来了,直接用就可以

即便导入sdk没有完成也可以直接用我的demo(上两步目的是担心sdk更新的太快)


demo的话加我个人qq1056912116给我要就可以,备注上:要环信单聊demo.(另外添加关注一下)

4)导入成功了,开始准备战斗

在工程里的Appdelegate中





appkey是你在环信官网中自己申请的
需要说明的是我的项目里环信ID是后台返的,然后再去注册,注册方法和登录方法记得都要开辟子线程去,要不会造成假死状态.获取对方的昵称和姓名是后台返给我的,不是通过延展改掉的,此处大家注意下.(一会我会特别标明)




















requestNICK这个方法是获取昵称和姓名的





以上截图均在Appdelegate里面,我的demo里面没有,到时你可以从官方demo里搜出来方法名直接调用就可以,仔细想一想就会了.
5)聊天界面的修改

聊天界面的控制器就是ChatViewController,看看我的demo研究下.在这个页面还需要把昵称和姓名附上值.





这是ChatViewController.m里面的方法,修改下就可以,里面的参数用你自己的
6)登录环信

一般工程项目里的环信登录账号和密码与工程账号密码不一致,那么我把登录环信的代码贴过来,在你需要的地方用就可以,一般是在Appdelegate.(记住工程退出账号时记得退出环信账号)




7)注册环信账号

 一般说来,环信账号的注册时有后台去完成的,但是我们今天讲一下如果后台不给注册,前端怎么去注册呢,看截图




注册成功就去登录就好(官方DEMO上可以找到方法)
以上都弄完以后,就可以互相通讯了,难点就是看你怎么把demo导入到你的工程里,当时我导入就导入了半天时间.祝大家赶紧把工作做好,把技术提升起来!✌️第三方库介绍

EaseUI 中用到的第三方库:

MWPhotoBrowser: 图片处理库,浏览显示

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目


作者简介:我是范小明,QQ:1056912116,各位同学看这篇笔记遇到不明白的地方,欢迎骚扰我! 查看全部
即时通讯--环信

      诚如诸位正在看这篇文章的童鞋们,即时通讯我们用到的最普遍的就是--环信,接下来我(范小明)将在工程项目中用到的环信知识列举下来:

       我们的项目用到的是单聊(不涉及群聊),用到的也是最基础的知识.


       想必你看我这篇文章之前已经看了http://docs.easemob.com/im/start"环信开发文档"了吧,是因为字太多看不下去吗,记住即便在我这篇文章拿到了你想要的知识,这个开发文档也要多研读多研读多研读(每读一次就会有新的体会,然后很多问题就会迎刃而解,不信的话你就多读几遍试试),ok,废话不多说,下面上实例:

1)下载最新版的SDK

1934707-84f9c953b646a1c0.jpg

http://www.easemob.com/download 点进去下载去吧
 
2)导入sdk到工程里

你的工程是新建立的还是老工程要加入及时通讯功能?如果是老工程的话,导入sdk时注意sdk包里面包含第三方和你原来工程里的第三方有冲突吗(主要是版本冲突)
1934707-167361e18eb2a773.jpg

(点第三方进去查看下版本信息是否跟你原来的有冲突)
 
第三方库介绍

EaseUI 中用到的第三方库:

MWPhotoBrowser: 图片处理库,浏览显示

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目

导入SDk环信官方文档写的特别清楚,我就不写了,直接参照文档就可以.

3)以上都搞完了是吗,我要把我的环信demo拿出来了,直接用就可以

即便导入sdk没有完成也可以直接用我的demo(上两步目的是担心sdk更新的太快)


demo的话加我个人qq1056912116给我要就可以,备注上:要环信单聊demo.(另外添加关注一下)

4)导入成功了,开始准备战斗

在工程里的Appdelegate中

1934707-c9e80e707b789ce5.jpg

appkey是你在环信官网中自己申请的
需要说明的是我的项目里环信ID是后台返的,然后再去注册,注册方法和登录方法记得都要开辟子线程去,要不会造成假死状态.获取对方的昵称和姓名是后台返给我的,不是通过延展改掉的,此处大家注意下.(一会我会特别标明)
1934707-44d05aa10da660c1.png


1934707-45dcf091e9b42495.png


1934707-0d0a73c9fd6b075f.png


1934707-869586f94c42ece4.png


requestNICK这个方法是获取昵称和姓名的

1934707-823fe2c6e2bca34f.png

以上截图均在Appdelegate里面,我的demo里面没有,到时你可以从官方demo里搜出来方法名直接调用就可以,仔细想一想就会了.
5)聊天界面的修改

聊天界面的控制器就是ChatViewController,看看我的demo研究下.在这个页面还需要把昵称和姓名附上值.

1934707-996373ba05fc22b0.png

这是ChatViewController.m里面的方法,修改下就可以,里面的参数用你自己的
6)登录环信

一般工程项目里的环信登录账号和密码与工程账号密码不一致,那么我把登录环信的代码贴过来,在你需要的地方用就可以,一般是在Appdelegate.(记住工程退出账号时记得退出环信账号)
1934707-741d799eb4fbf566.png

7)注册环信账号

 一般说来,环信账号的注册时有后台去完成的,但是我们今天讲一下如果后台不给注册,前端怎么去注册呢,看截图
1934707-5c7a9583f8bf963c.png

注册成功就去登录就好(官方DEMO上可以找到方法)
以上都弄完以后,就可以互相通讯了,难点就是看你怎么把demo导入到你的工程里,当时我导入就导入了半天时间.祝大家赶紧把工作做好,把技术提升起来!✌️
第三方库介绍

EaseUI 中用到的第三方库:

MWPhotoBrowser: 图片处理库,浏览显示

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目


作者简介:我是范小明,QQ:1056912116,各位同学看这篇笔记遇到不明白的地方,欢迎骚扰我!
1
评论

【环信集成笔记】入门篇-分享一些ios集成小技巧 环信集成笔记 iOS 环信_iOS

beyond 发表了文章 • 2571 次浏览 • 2016-09-20 11:47 • 来自相关话题

这段时间由于家里的事和工作上的项目太忙好久没写东西了,,,今天先说说集成环信的经验吧,也许会很乱,我会慢慢修改的。新手一枚第一次集成环信,咱们慢慢看算是我自己的一个整理。
 
一、准备工作:

1.环信官网http://www.easemob.com 也可以百度环信还是很好找的。

2.苹果账号,因为集成即时聊天要推送证书所以必须有账号,证书制作我就不在这里说了,可以上网查。

3.在环信创建APP上传推送证书,这样可以了过程很简单的(appkey,推送证书名是有用的可以先记录)。

二、开始集成

1.这里总的说一下

第一点环信提供两套SDK,一套带有实时语音(打电话)版本HyphenateFullSDK,一套没有的HyphenateSDK,正常不是专门聊天的APP都是不用实时语音功能的。

第二点环信给了一套做好的UI叫EaseUI,可以用能减少很多时间,特别是聊天页面自己写比较麻烦,特别是EASYUI中的Model写的都不错。

第三点集成方式可以手动集成SDK,可以用pod集成,手动集成就不说了,下面给出pod命令
pod 'HyphenateSDK', :git => 'https://github.com/easemob/hyphenate-cocoapods.git'
pod 'HyphenateFullSDK', :git => 'https://github.com/easemob/hyphenate-full-cocoapods.git'
pod 'EaseUI' //这个环信官网上没有是我在环信的git上找到的。
这里有一点注意的地方,如果你用pod集成,注意pod更新是会吧你改动的代码刷新掉,可以不直接用EaseUI里的东西,可以写子类,或者刷新掉了,可以用git或者svn,还原修改,这样就能回来了。
这样我们就把SDK集成到我们的项目了。

第四点什么改APP端做什么该服务端做,服务端做的其实很少,只有两个,第一注册环信,这部分一般式绑定在我们注册当前APP用户的要查询服务端数据库,所以服务端做,第二,好友关系,环信用户之间聊天是不需要好友关系的,所以决定了好友关系这部分可以直接用我们的服务端维护。这两点以外,其他的都是我们APP端做,,,

2.开始代码部分(这部分代码前提集成了HyphenateSDK和EaseUI)

首先在AppDelegate中注册环信,直接可用EaseUI中的注册方法

一,注册环信/*!

* APP启动时注册环信,并登陆当前用户(如果有用户的话)

*

* @param application application description

* @param launchOptions launchOptions description

*/

-(void)startHuanXinEasyUIUseapplication:(UIApplication *)application Options:(NSDictionary *)launchOptions{

//AppKey:注册的AppKey,详细见下面注释。

//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。

NSString *apnsCertName = nil;

#if DEBUG

apnsCertName = @"开发环境测试证书";

#else

apnsCertName = @"发布环境证书";

#endif

//环信appkey存放在UserDefaults

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

NSString *appkey = [ud stringForKey:@"identifier_appkey"];

if (!appkey) {

appkey = @"appkey";

[ud setObject:appkey forKey:@"identifier_appkey"];

}

//利用EasyUI启动环信(这里有一个坑,下面这个注册方法,点进去看会吧用户是否同意被加进群组改成NO,这里会导致群组加不上,记得看看,改回来)

[[EaseSDKHelper shareHelper] easemobApplication:application

didFinishLaunchingWithOptions:launchOptions

appkey:appkey

apnsCertName:apnsCertName

otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];

//判断当前是否有用户,有用户登陆环信

if (DEF_PERSISTENT_GET_OBJECT(@"userId") != nil && DEF_PERSISTENT_GET_OBJECT(@"userPwd") != nil) {

NSString *accound = [NSString stringWithFormat:@"%@",DEF_PERSISTENT_GET_OBJECT(@"userId")];

NSString *pwd = [NSString stringWithFormat:@"%@",DEF_PERSISTENT_GET_OBJECT(@"userPwd")];

EMError *error = [[EMClient sharedClient] loginWithUsername:accound password:pwd];

[[EMClient sharedClient] addDelegate:self];

if (!error) {

NSLog(@"登录成功");
}
}
}二、环信好友

聊天就得有好友,刚开始总述中说过好友是咱们服务器来维护的所以不用管,走一个接口就好了,因为我们集成EasyUI所以我们从接口中请求的数据最好都变成EasyUI中用户的Model(EaseUserModel),这样在用环信聊天的是不会那么麻烦,也可以自己写一个Model这样麻烦但是不乱,#import <Foundation/Foundation.h>

#import "IUserModel.h"

@interface EaseUserModel : NSObject<IUserModel>

@property (strong, nonatomic, readonly) NSString *buddy;//用户名
@property (strong, nonatomic) NSString *nickname;//名字
@property (strong, nonatomic) NSString *avatarURLPath;//头像地址
@property (strong, nonatomic) UIImage *avatarImage;//头像图片

- (instancetype)initWithBuddy:(NSString *)buddy;

@end中用户名是最有用的是直接用于创建聊天的,名字头像用处不大,因为这些存储都是在本地的,地方一改名字头像你这面可能没反应所以不用这个头像名字,都是使用消息中的扩展字段下面说。

三、环信聊天

聊天界面我推荐直接用EasyUI的,自己写各种消息cell实在麻烦,使用这个直接就是可以聊天的创建方法如下EaseMessageViewController *viewController = [[EaseMessageViewController alloc] initWithConversationChatter:@"聊天对象的id,或者群组的id" conversationType:聊天的类型(单聊,群聊,聊天室)];四、环信聊天消息重点*

在发消息过程中是不能传递用户名和头像的,所以我们要给消息添加扩展字段ext,(扩展字段可以其实就是发送消息是附带传递一个json数据),我们可以吧自己的头像和名字在每次发消息的时候发过去,这样聊天时,当前本人可以知道自己的名字和头像,聊天对方会在消息中发过来名字头像,这样两个人都有名字头像了,下面贴下我的扩展字段- (void)_sendMessage:(EMMessage *)message //发消息的总方法
{
message.ext = @{@"nikeName":_myNikeName,@"headImagePath":_myHeadImagePath}; //添加消息扩展,我的名字,我的头像

if (self.conversation.type == EMConversationTypeGroupChat){
message.chatType = EMChatTypeGroupChat;
}
else if (self.conversation.type == EMConversationTypeChatRoom){
message.chatType = EMChatTypeChatRoom;
}

[self addMessageToDataSource:message
progress:nil];

__weak typeof(self) weakself = self;
[[EMClient sharedClient].chatManager asyncSendMessage:message progress:nil completion:^(EMMessage *aMessage, EMError *aError) {
[weakself.tableView reloadData];
}];
}五、消息列表

消息列表的获取用环信的获取方法- (void)tableViewDidTriggerHeaderRefresh
{
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];//本地获取消息
NSArray* sorted = [conversations sortedArrayUsingComparator:
^(EMConversation *obj1, EMConversation* obj2){
EMMessage *message1 = [obj1 latestMessage];
EMMessage *message2 = [obj2 latestMessage];
if(message1.timestamp > message2.timestamp) {
return(NSComparisonResult)NSOrderedAscending;
}else {
return(NSComparisonResult)NSOrderedDescending;
}
}];
[self.tableView endHeaderFresh];
[self.tableView reloadData];
}这里有一个地方,再获得会话列表的时候,有几个数据要自己获取一下,头像,名字,最后一条消息内容,最后一条消息时间,消息未读数。其中消息未读数事环信帮我们做好的直接设置显示未读数就好
其中消息最后一条消息内容,最后一条消息时间。要我们获取最后一条消息在给其赋值//在tableView代理中写
cell.detailLabel.attributedText = [[EaseEmotionEscape sharedInstance] attStringFromTextForChatting:[self _latestMessageTitleForConversationModel:model]textFont:cell.detailLabel.font];
cell.timeLabel.text = [self _latestMessageTimeForConversationModel:model];

//获取最后一条消息内容
- (NSString *)_latestMessageTitleForConversationModel:(id<IConversationModel>)conversationModel
{
NSString *latestMessageTitle = @"";
EMMessage *lastMessage = [conversationModel.conversation latestMessage];
if (lastMessage) {
EMMessageBody *messageBody = lastMessage.body;
switch (messageBody.type) {
case EMMessageBodyTypeImage:{
latestMessageTitle = NSEaseLocalizedString(@"message.image1", @"[image]");
} break;
case EMMessageBodyTypeText:{
NSString *didReceiveText = [EaseConvertToCommonEmoticonsHelper
convertToSystemEmoticons:((EMTextMessageBody *)messageBody).text];
latestMessageTitle = didReceiveText;
} break;
case EMMessageBodyTypeVoice:{
latestMessageTitle = NSEaseLocalizedString(@"message.voice1", @"[voice]");
} break;
case EMMessageBodyTypeLocation: {
latestMessageTitle = NSEaseLocalizedString(@"message.location1", @"[location]");
} break;
case EMMessageBodyTypeVideo: {
latestMessageTitle = NSEaseLocalizedString(@"message.video1", @"
[video]");
} break;
case EMMessageBodyTypeFile: {
latestMessageTitle = NSEaseLocalizedString(@"message.file1", @"[file]");
} break;
default: {
} break;
}
}
return latestMessageTitle;
}

//获取最后一条消息时间
- (NSString *)_latestMessageTimeForConversationModel:(id<IConversationModel>)conversationModel
{
NSString *latestMessageTime = @"";
EMMessage *lastMessage = [conversationModel.conversation latestMessage];;
if (lastMessage) {
double timeInterval = lastMessage.timestamp ;
if(timeInterval > 140000000000) {
timeInterval = timeInterval / 1000;
}
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"YYYY-MM-dd"];
latestMessageTime = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];
}
return latestMessageTime;
}[/video]




至于头像名字则要我们使用我没发消息的扩展字段,
这里我们可以获取会话中最后一条来自对方的消息,然后取出扩展字段赋值就好,(ps:有一种情况我刚刚和一个人说话会话中没有来自对方的最后一条消息,这个时候我们要用我们本地自己赋值这个会话的头像和名字)

三、总结

恩,这是这个杂记的第一次写的东西,写了写基本的用法,简单的聊天功能,写的也比较乱,,我会慢慢整理修改的。
 
作者简介:我是windKing,一个iOS开发的小白希望能有一样的人和我一起成长。看的过程中有不明白的地方欢迎联系我qq1662628982。 查看全部
这段时间由于家里的事和工作上的项目太忙好久没写东西了,,,今天先说说集成环信的经验吧,也许会很乱,我会慢慢修改的。新手一枚第一次集成环信,咱们慢慢看算是我自己的一个整理。
 
一、准备工作:

1.环信官网http://www.easemob.com 也可以百度环信还是很好找的。

2.苹果账号,因为集成即时聊天要推送证书所以必须有账号,证书制作我就不在这里说了,可以上网查。

3.在环信创建APP上传推送证书,这样可以了过程很简单的(appkey,推送证书名是有用的可以先记录)。

二、开始集成

1.这里总的说一下

第一点环信提供两套SDK,一套带有实时语音(打电话)版本HyphenateFullSDK,一套没有的HyphenateSDK,正常不是专门聊天的APP都是不用实时语音功能的。

第二点环信给了一套做好的UI叫EaseUI,可以用能减少很多时间,特别是聊天页面自己写比较麻烦,特别是EASYUI中的Model写的都不错。

第三点集成方式可以手动集成SDK,可以用pod集成,手动集成就不说了,下面给出pod命令
pod 'HyphenateSDK', :git => 'https://github.com/easemob/hyphenate-cocoapods.git'
pod 'HyphenateFullSDK', :git => 'https://github.com/easemob/hyphenate-full-cocoapods.git'
pod 'EaseUI' //这个环信官网上没有是我在环信的git上找到的。
这里有一点注意的地方,如果你用pod集成,注意pod更新是会吧你改动的代码刷新掉,可以不直接用EaseUI里的东西,可以写子类,或者刷新掉了,可以用git或者svn,还原修改,这样就能回来了。
这样我们就把SDK集成到我们的项目了。

第四点什么改APP端做什么该服务端做,服务端做的其实很少,只有两个,第一注册环信,这部分一般式绑定在我们注册当前APP用户的要查询服务端数据库,所以服务端做,第二,好友关系,环信用户之间聊天是不需要好友关系的,所以决定了好友关系这部分可以直接用我们的服务端维护。这两点以外,其他的都是我们APP端做,,,

2.开始代码部分(这部分代码前提集成了HyphenateSDK和EaseUI)

首先在AppDelegate中注册环信,直接可用EaseUI中的注册方法

一,注册环信
/*!

* APP启动时注册环信,并登陆当前用户(如果有用户的话)

*

* @param application application description

* @param launchOptions launchOptions description

*/

-(void)startHuanXinEasyUIUseapplication:(UIApplication *)application Options:(NSDictionary *)launchOptions{

//AppKey:注册的AppKey,详细见下面注释。

//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。

NSString *apnsCertName = nil;

#if DEBUG

apnsCertName = @"开发环境测试证书";

#else

apnsCertName = @"发布环境证书";

#endif

//环信appkey存放在UserDefaults

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

NSString *appkey = [ud stringForKey:@"identifier_appkey"];

if (!appkey) {

appkey = @"appkey";

[ud setObject:appkey forKey:@"identifier_appkey"];

}

//利用EasyUI启动环信(这里有一个坑,下面这个注册方法,点进去看会吧用户是否同意被加进群组改成NO,这里会导致群组加不上,记得看看,改回来)

[[EaseSDKHelper shareHelper] easemobApplication:application

didFinishLaunchingWithOptions:launchOptions

appkey:appkey

apnsCertName:apnsCertName

otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];

//判断当前是否有用户,有用户登陆环信

if (DEF_PERSISTENT_GET_OBJECT(@"userId") != nil && DEF_PERSISTENT_GET_OBJECT(@"userPwd") != nil) {

NSString *accound = [NSString stringWithFormat:@"%@",DEF_PERSISTENT_GET_OBJECT(@"userId")];

NSString *pwd = [NSString stringWithFormat:@"%@",DEF_PERSISTENT_GET_OBJECT(@"userPwd")];

EMError *error = [[EMClient sharedClient] loginWithUsername:accound password:pwd];

[[EMClient sharedClient] addDelegate:self];

if (!error) {

NSLog(@"登录成功");
}
}
}
二、环信好友

聊天就得有好友,刚开始总述中说过好友是咱们服务器来维护的所以不用管,走一个接口就好了,因为我们集成EasyUI所以我们从接口中请求的数据最好都变成EasyUI中用户的Model(EaseUserModel),这样在用环信聊天的是不会那么麻烦,也可以自己写一个Model这样麻烦但是不乱,
#import <Foundation/Foundation.h>

#import "IUserModel.h"

@interface EaseUserModel : NSObject<IUserModel>

@property (strong, nonatomic, readonly) NSString *buddy;//用户名
@property (strong, nonatomic) NSString *nickname;//名字
@property (strong, nonatomic) NSString *avatarURLPath;//头像地址
@property (strong, nonatomic) UIImage *avatarImage;//头像图片

- (instancetype)initWithBuddy:(NSString *)buddy;

@end
中用户名是最有用的是直接用于创建聊天的,名字头像用处不大,因为这些存储都是在本地的,地方一改名字头像你这面可能没反应所以不用这个头像名字,都是使用消息中的扩展字段下面说。

三、环信聊天

聊天界面我推荐直接用EasyUI的,自己写各种消息cell实在麻烦,使用这个直接就是可以聊天的创建方法如下
EaseMessageViewController *viewController = [[EaseMessageViewController alloc] initWithConversationChatter:@"聊天对象的id,或者群组的id" conversationType:聊天的类型(单聊,群聊,聊天室)];
四、环信聊天消息重点*

在发消息过程中是不能传递用户名和头像的,所以我们要给消息添加扩展字段ext,(扩展字段可以其实就是发送消息是附带传递一个json数据),我们可以吧自己的头像和名字在每次发消息的时候发过去,这样聊天时,当前本人可以知道自己的名字和头像,聊天对方会在消息中发过来名字头像,这样两个人都有名字头像了,下面贴下我的扩展字段
- (void)_sendMessage:(EMMessage *)message //发消息的总方法
{
message.ext = @{@"nikeName":_myNikeName,@"headImagePath":_myHeadImagePath}; //添加消息扩展,我的名字,我的头像

if (self.conversation.type == EMConversationTypeGroupChat){
message.chatType = EMChatTypeGroupChat;
}
else if (self.conversation.type == EMConversationTypeChatRoom){
message.chatType = EMChatTypeChatRoom;
}

[self addMessageToDataSource:message
progress:nil];

__weak typeof(self) weakself = self;
[[EMClient sharedClient].chatManager asyncSendMessage:message progress:nil completion:^(EMMessage *aMessage, EMError *aError) {
[weakself.tableView reloadData];
}];
}
五、消息列表

消息列表的获取用环信的获取方法
- (void)tableViewDidTriggerHeaderRefresh
{
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];//本地获取消息
NSArray* sorted = [conversations sortedArrayUsingComparator:
^(EMConversation *obj1, EMConversation* obj2){
EMMessage *message1 = [obj1 latestMessage];
EMMessage *message2 = [obj2 latestMessage];
if(message1.timestamp > message2.timestamp) {
return(NSComparisonResult)NSOrderedAscending;
}else {
return(NSComparisonResult)NSOrderedDescending;
}
}];
[self.tableView endHeaderFresh];
[self.tableView reloadData];
}
这里有一个地方,再获得会话列表的时候,有几个数据要自己获取一下,头像,名字,最后一条消息内容,最后一条消息时间,消息未读数。其中消息未读数事环信帮我们做好的直接设置显示未读数就好
其中消息最后一条消息内容,最后一条消息时间。要我们获取最后一条消息在给其赋值
//在tableView代理中写
cell.detailLabel.attributedText = [[EaseEmotionEscape sharedInstance] attStringFromTextForChatting:[self _latestMessageTitleForConversationModel:model]textFont:cell.detailLabel.font];
cell.timeLabel.text = [self _latestMessageTimeForConversationModel:model];

//获取最后一条消息内容
- (NSString *)_latestMessageTitleForConversationModel:(id<IConversationModel>)conversationModel
{
NSString *latestMessageTitle = @"";
EMMessage *lastMessage = [conversationModel.conversation latestMessage];
if (lastMessage) {
EMMessageBody *messageBody = lastMessage.body;
switch (messageBody.type) {
case EMMessageBodyTypeImage:{
latestMessageTitle = NSEaseLocalizedString(@"message.image1", @"[image]");
} break;
case EMMessageBodyTypeText:{
NSString *didReceiveText = [EaseConvertToCommonEmoticonsHelper
convertToSystemEmoticons:((EMTextMessageBody *)messageBody).text];
latestMessageTitle = didReceiveText;
} break;
case EMMessageBodyTypeVoice:{
latestMessageTitle = NSEaseLocalizedString(@"message.voice1", @"[voice]");
} break;
case EMMessageBodyTypeLocation: {
latestMessageTitle = NSEaseLocalizedString(@"message.location1", @"[location]");
} break;
case EMMessageBodyTypeVideo: {
latestMessageTitle = NSEaseLocalizedString(@"message.video1", @"
[video]");
} break;
case EMMessageBodyTypeFile: {
latestMessageTitle = NSEaseLocalizedString(@"message.file1", @"[file]");
} break;
default: {
} break;
}
}
return latestMessageTitle;
}

//获取最后一条消息时间
- (NSString *)_latestMessageTimeForConversationModel:(id<IConversationModel>)conversationModel
{
NSString *latestMessageTime = @"";
EMMessage *lastMessage = [conversationModel.conversation latestMessage];;
if (lastMessage) {
double timeInterval = lastMessage.timestamp ;
if(timeInterval > 140000000000) {
timeInterval = timeInterval / 1000;
}
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"YYYY-MM-dd"];
latestMessageTime = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];
}
return latestMessageTime;
}[/video]




至于头像名字则要我们使用我没发消息的扩展字段,
这里我们可以获取会话中最后一条来自对方的消息,然后取出扩展字段赋值就好,(ps:有一种情况我刚刚和一个人说话会话中没有来自对方的最后一条消息,这个时候我们要用我们本地自己赋值这个会话的头像和名字)

三、总结

恩,这是这个杂记的第一次写的东西,写了写基本的用法,简单的聊天功能,写的也比较乱,,我会慢慢整理修改的。
 
作者简介:我是windKing,一个iOS开发的小白希望能有一样的人和我一起成长。看的过程中有不明白的地方欢迎联系我qq1662628982。
0
评论

SDK 问题 环信_iOS

wangcccong 发表了文章 • 449 次浏览 • 2016-08-30 21:52 • 来自相关话题

1、Android 和iOS方法不统一
2、Android封装含有附件的消息必须有路径(这个就尼玛坑爹)与iOS不一样
3、下载附件的时候为毛要把域名变成IP地址 (这个附件是我们自己服务器处理的消息附件)
1、Android 和iOS方法不统一
2、Android封装含有附件的消息必须有路径(这个就尼玛坑爹)与iOS不一样
3、下载附件的时候为毛要把域名变成IP地址 (这个附件是我们自己服务器处理的消息附件)
2
评论

iOS 拉取环信消息记录解决方法 环信_iOS iOS历史记录

wangcccong 发表了文章 • 785 次浏览 • 2016-08-26 08:52 • 来自相关话题

1、首先是通过环信接口将数据拉取到我们本地服务器 http://docs.easemob.com/im/100serverintegration/30chatlog
在此过程中,服务器注意需要将拉取下来的数据,保存至数据库中的同时将(img/audio/video)的附件下载,并替换掉数据库中消息的附件地址
2、iOS从自己的服务器拉取数据(主要是解析, 自己服务器保存格式完全按照http://docs.easemob.com/im/100serverintegration/30chatlog)下面贴出解析数据过程(Json-Model使用的是MJExtension)
定义的Model如下





 
处理消息









  查看全部
1、首先是通过环信接口将数据拉取到我们本地服务器 http://docs.easemob.com/im/100serverintegration/30chatlog
在此过程中,服务器注意需要将拉取下来的数据,保存至数据库中的同时将(img/audio/video)的附件下载,并替换掉数据库中消息的附件地址
2、iOS从自己的服务器拉取数据(主要是解析, 自己服务器保存格式完全按照http://docs.easemob.com/im/100serverintegration/30chatlog)下面贴出解析数据过程(Json-Model使用的是MJExtension)
定义的Model如下

0913E702-3480-4B0F-980D-5C7E847C0216.png

 
处理消息
2CA22EAB-167B-4B90-BA29-158A2D397725.png


35E3C8CD-2414-43DA-95E8-E72D2FB3D220.png

 
0
评论

基于环信SDK 开发的iOS 通讯项目-附项目源码,喜欢就请star一下! 环信_iOS

beyond 发表了文章 • 2518 次浏览 • 2016-08-02 14:21 • 来自相关话题

一:效果图

支持语音,图片以及emoji 和文字.在这就是未读消息显示以及自动登录.再者就是从数据库中消息的读取.最后就是一个添加好友以及好友的一个展示列表;先来几张效果图吧:




大概效果图.png




信息的读取.png
附上 github 地址:https://github.com/OneWang/IM-WeiChat
如果能够帮到您就 star 关注一下了,不胜感激(⊙o⊙)哦!;
 
二:集成

具体的集成流程环信官网上的开发文档我想步骤已经写得很详细了,如果还有不明白的可以私信我,具体可以查看官方文档;地址:http://docs.easemob.com

再者就是 appkey 的申请了;到环信的开发者中心去注册一下 账户,这是免费的哦!然后创建自己的应用获取相应的应用标识(AppKey);在后面开发的时候会用到的,没有的话是没法进行开发的;

三:开发流程
1.初始化 SDK:

第 1 步:引入相关头文件 #import “EMSDK.h”。
第 2 步:在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。 //registerSDKWithAppKey:注册的appKey,开发者注册及管理后台。
//apnsCertName:推送证书名(不需要加后缀),制作与上传推送证书。
// [[EaseMob sharedInstance] registerSDKWithAppKey:@"437512311#chat-wang" apnsCertName:nil];

//1.初始化SDK,并隐藏环信SDK的日志输出
[[EaseMob sharedInstance] registerSDKWithAppKey:@"437512311#chat-wang" apnsCertName:nil otherConfig:@{kSDKConfigEnableConsoleLogger : @(NO)}];
[[EaseMob sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

//app进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[EaseMob sharedInstance] applicationDidEnterBackground:application];
}

//app将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[EaseMob sharedInstance] applicationWillEnterForeground:application];
}
- (void)dealloc
{
[[EaseMob sharedInstance].chatManager removeDelegate:self];
}2.注册:

注册模式分两种,开放注册和授权注册。
只有开放注册时,才可以客户端注册。开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号。授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端。
//注册
[[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:username password:password withCompletion:^(NSString *username, NSString *password, EMError *error) {
if (!error) {
[MBProgressHUD showSuccess:@"注册成功"];
}else{
[MBProgressHUD showError:@"注册失败"];
NSLog(@"注册失败:%@",error);
}
} onQueue:dispatch_get_main_queue()];3.登录以及自动登录
自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。
 //让环信的SDK在第一次登录之后,自动从服务器获取好友列表,添加到本地数据库中(Buddy表)
[[EaseMob sharedInstance].chatManager setIsAutoFetchBuddyList:YES];

NSString * username = self.userNameField.text;
NSString * password = self.passWordField.text;

if (username.length == 0 || password.length == 0) {
[MBProgressHUD showError:@"账号或密码不能为空"];
return;
}
//登录
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:username password:password completion:^(NSDictionary *loginInfo, EMError *error) {
//登录请求之后的block的回调
if (!error) {

/* 登录信息格式
LastLoginTime = 1462246275413;
jid = "437512311#chat-wang_wang@easemob.com";
password = 123456;
resource = mobile;
token = "YWMtOqAglhDfEeaq3zM2X-U7XgAAAVWpp1G2iB3Bmbp4pSTCxFiBv2EgsfS4xUc";
username = wang;
*/

[MBProgressHUD showSuccess:@"登录成功"];
NSLog(@"用户信息:%@",loginInfo);

//设置自动登录
[[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES];

//来主界面
self.view.window.rootViewController = [UIStoryboard storyboardWithName:@"Main" bundle:nil].instantiateInitialViewController;
}else{
[MBProgressHUD showError:@"登录失败"];
NSLog(@"登录错误信息:%@",error);
//User do not exist
/** 每一个应用都有自己的注册用户 */
}
} onQueue:dispatch_get_main_queue()];自动登录在以下几种情况下会被取消:
用户调用了 SDK 的登出动作;用户在别的设备上更改了密码,导致此设备上自动登录失败;用户的账号被从服务器端删除;用户从另一个设备登录,把当前设备上登录的用户踢出。

所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。通过代理监听自动登录状态: //2.监听自动登录的状态
//设置chatManager代理
[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:dispatch_get_main_queue()];

//3.如果登录过,直接来到主界面
if ([[EaseMob sharedInstance].chatManager isAutoLoginEnabled]) {
self.window.rootViewController = [UIStoryboard storyboardWithName:@"Main" bundle:nil].instantiateInitialViewController;
}SDK 中,如果发生自动登录,会有以下回调:#pragma mark 自动登录的回调
- (void)didAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error
{
if (!error) {
[MBProgressHUD showSuccess:@"自动登录成功"];
NSLog(@"自动登录成功 %@",loginInfo);
}else{
[MBProgressHUD showError:@"自动登录失败"];
NSLog(@"自动登录失败 %@",error);
}
}4.退出登录

退出登录分两种类型:主动退出登录和被动退出登录。
主动退出登录:调用 SDK 的退出接口;被动退出登录:1. 正在登录的账号在另一台设备上登录;2. 正在登录的账号被从服务器端删除。logout:YES:是否解除 device token 的绑定,在被动退出时 SDK 内部处理,不需要调用退出方法。
 //isUnbind 是否推送
[[EaseMob sharedInstance].chatManager asyncLogoffWithUnbindDeviceToken:YES completion:^(NSDictionary *info, EMError *error) {
if (error) {
NSLog(@"退出失败 %@",error);
}else{
NSLog(@"退出成功");
//回到登录界面
self.view.window.rootViewController = [UIStoryboard storyboardWithName:@"Login" bundle:nil].instantiateInitialViewController;
}
} onQueue:nil];使用回调方法监听被动退出登录。/*!
@method
@brief 用户注销后的回调
@discussion
@param error 错误信息
@result
*/
- (void)didLogoffWithError:(EMError *)error;

/*!
@method
@brief 当前登录账号在其它设备登录时的通知回调
@discussion
@result
*/
- (void)didLoginFromOtherDevice;

/*!
@method
@brief 当前登录账号已经被从服务器端删除
@discussion
@result
*/
- (void)didRemovedFromServer;五:构建消息并发送消息对象- (void)sendMesssage:(id<IEMMessageBody>)body{

//2.构造消息对象
EMMessage *msgObj = [[EMMessage alloc] initWithReceiver:self.buddy.username bodies:@[body]];
//消息类型为单聊模式
msgObj.messageType = eMessageTypeChat;

//3.发送消息
[[EaseMob sharedInstance].chatManager asyncSendMessage:msgObj progress:nil prepare:^(EMMessage *message, EMError *error) {
NSLog(@"准备发送");
} onQueue:nil completion:^(EMMessage *message, EMError *error) {
NSLog(@"发送成功");
} onQueue:nil];

//把消息添加到数据源数组,然后刷新表格
[self addDataArrayWithMessage:msgObj];
[self.tableView reloadData];

//把消息滚动显示在最上面
[self scrollToBottom];
}初始化一个会话对象EMConversation *conversation = [[EaseMob sharedInstance].chatManager conversationForChatter:self.buddy.username conversationType:eConversationTypeChat];六:获取好友列表//从服务器获取好友列表
[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
//赋值给数据源
self.buddyList = buddyList;
//刷新
[self.tableView reloadData];
} onQueue:nil];
// 获取好友列表的数据
/* 注意
1.好友列表buddyList需要在自动登录之后才有值
2.buddyList数据是从本地数据库获取的
3.要想从服务器获取好友数据调用这个方法- (void *)asyncFetchBuddyListWithCompletion:(void (^)(NSArray *buddyList, EMError *error))completion
onQueue:(dispatch_queue_t)queue;
4.如果当前有添加好友请求,环信的SDK内部会往数据库的buddy表添加好友记录
5.如果程序删除或者用户第一次登录,buddyList表是没有记录的;
解决方案:
1.要从服务器获取好友列表记录
2.用户第一次登录后,自动从服务器获取还有列表
*/

//删除好友
[[EaseMob sharedInstance].chatManager removeBuddy:username removeFromRemote:YES error:nil];

//添加代理后好友列表更新监听
#pragma mark 好友数据列表被更新
- (void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd七:获取历史会话记录​//获取历史会话记录
//1.从内存中获取历史会话记录
NSArray *conversations = [[EaseMob sharedInstance].chatManager conversations];

//2.如果内存中没有会话记录,从数据库中获取conversations
if (conversations.count == 0) {
conversations = [[EaseMob sharedInstance].chatManager loadAllConversationsFromDatabaseWithAppend2Chat:YES];
}
self.conversations = conversations;显示未读消息数目://遍历所有的会话记录,将未读消息数进行类加
NSInteger totalUnreadCount = 0;
for (EMConversation *conversation in self.conversations) {
totalUnreadCount += conversation.unreadMessagesCount;
}
if (totalUnreadCount > 0) {
self.navigationController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld",totalUnreadCount];
}else{
self.navigationController.tabBarItem.badgeValue = nil;
}总结:
[EaseMob sharedInstance].chatManager ; //这是会话管理者,获取该对象后, 可以做登录、聊天、加好友等操作;
[EaseMob sharedInstance].callManager ;//这是即时通讯(语音聊天和视频聊天)的管理者.
在开发过程中主要是这两个个对象在掌控所有会话消息等;
作者:环信热心用户西风颂 查看全部
一:效果图

支持语音,图片以及emoji 和文字.在这就是未读消息显示以及自动登录.再者就是从数据库中消息的读取.最后就是一个添加好友以及好友的一个展示列表;先来几张效果图吧:

1867963-aa9b837073452817.png

大概效果图.png


1867963-320f39af6728b6c6.png

信息的读取.png


附上 github 地址:https://github.com/OneWang/IM-WeiChat
如果能够帮到您就 star 关注一下了,不胜感激(⊙o⊙)哦!;
 

二:集成

具体的集成流程环信官网上的开发文档我想步骤已经写得很详细了,如果还有不明白的可以私信我,具体可以查看官方文档;地址:http://docs.easemob.com

再者就是 appkey 的申请了;到环信的开发者中心去注册一下 账户,这是免费的哦!然后创建自己的应用获取相应的应用标识(AppKey);在后面开发的时候会用到的,没有的话是没法进行开发的;

三:开发流程
1.初始化 SDK:


第 1 步:引入相关头文件 #import “EMSDK.h”。
第 2 步:在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。
 //registerSDKWithAppKey:注册的appKey,开发者注册及管理后台。
//apnsCertName:推送证书名(不需要加后缀),制作与上传推送证书。
// [[EaseMob sharedInstance] registerSDKWithAppKey:@"437512311#chat-wang" apnsCertName:nil];

//1.初始化SDK,并隐藏环信SDK的日志输出
[[EaseMob sharedInstance] registerSDKWithAppKey:@"437512311#chat-wang" apnsCertName:nil otherConfig:@{kSDKConfigEnableConsoleLogger : @(NO)}];
[[EaseMob sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

//app进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[EaseMob sharedInstance] applicationDidEnterBackground:application];
}

//app将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[EaseMob sharedInstance] applicationWillEnterForeground:application];
}
- (void)dealloc
{
[[EaseMob sharedInstance].chatManager removeDelegate:self];
}
2.注册:

注册模式分两种,开放注册和授权注册。
  • 只有开放注册时,才可以客户端注册。开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号。
  • 授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端。

//注册
[[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:username password:password withCompletion:^(NSString *username, NSString *password, EMError *error) {
if (!error) {
[MBProgressHUD showSuccess:@"注册成功"];
}else{
[MBProgressHUD showError:@"注册失败"];
NSLog(@"注册失败:%@",error);
}
} onQueue:dispatch_get_main_queue()];
3.登录以及自动登录
  • 自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。
  • SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。

 
//让环信的SDK在第一次登录之后,自动从服务器获取好友列表,添加到本地数据库中(Buddy表)
[[EaseMob sharedInstance].chatManager setIsAutoFetchBuddyList:YES];

NSString * username = self.userNameField.text;
NSString * password = self.passWordField.text;

if (username.length == 0 || password.length == 0) {
[MBProgressHUD showError:@"账号或密码不能为空"];
return;
}
//登录
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:username password:password completion:^(NSDictionary *loginInfo, EMError *error) {
//登录请求之后的block的回调
if (!error) {

/* 登录信息格式
LastLoginTime = 1462246275413;
jid = "437512311#chat-wang_wang@easemob.com";
password = 123456;
resource = mobile;
token = "YWMtOqAglhDfEeaq3zM2X-U7XgAAAVWpp1G2iB3Bmbp4pSTCxFiBv2EgsfS4xUc";
username = wang;
*/

[MBProgressHUD showSuccess:@"登录成功"];
NSLog(@"用户信息:%@",loginInfo);

//设置自动登录
[[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES];

//来主界面
self.view.window.rootViewController = [UIStoryboard storyboardWithName:@"Main" bundle:nil].instantiateInitialViewController;
}else{
[MBProgressHUD showError:@"登录失败"];
NSLog(@"登录错误信息:%@",error);
//User do not exist
/** 每一个应用都有自己的注册用户 */
}
} onQueue:dispatch_get_main_queue()];
自动登录在以下几种情况下会被取消:
  • 用户调用了 SDK 的登出动作;
  • 用户在别的设备上更改了密码,导致此设备上自动登录失败;
  • 用户的账号被从服务器端删除;
  • 用户从另一个设备登录,把当前设备上登录的用户踢出。


所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。通过代理监听自动登录状态:
     //2.监听自动登录的状态
//设置chatManager代理
[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:dispatch_get_main_queue()];

//3.如果登录过,直接来到主界面
if ([[EaseMob sharedInstance].chatManager isAutoLoginEnabled]) {
self.window.rootViewController = [UIStoryboard storyboardWithName:@"Main" bundle:nil].instantiateInitialViewController;
}
SDK 中,如果发生自动登录,会有以下回调:
#pragma mark 自动登录的回调
- (void)didAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error
{
if (!error) {
[MBProgressHUD showSuccess:@"自动登录成功"];
NSLog(@"自动登录成功 %@",loginInfo);
}else{
[MBProgressHUD showError:@"自动登录失败"];
NSLog(@"自动登录失败 %@",error);
}
}
4.退出登录

退出登录分两种类型:主动退出登录和被动退出登录。
  • 主动退出登录:调用 SDK 的退出接口;
  • 被动退出登录:1. 正在登录的账号在另一台设备上登录;2. 正在登录的账号被从服务器端删除。
  • logout:YES:是否解除 device token 的绑定,在被动退出时 SDK 内部处理,不需要调用退出方法。

 
//isUnbind 是否推送
[[EaseMob sharedInstance].chatManager asyncLogoffWithUnbindDeviceToken:YES completion:^(NSDictionary *info, EMError *error) {
if (error) {
NSLog(@"退出失败 %@",error);
}else{
NSLog(@"退出成功");
//回到登录界面
self.view.window.rootViewController = [UIStoryboard storyboardWithName:@"Login" bundle:nil].instantiateInitialViewController;
}
} onQueue:nil];
使用回调方法监听被动退出登录。
/*!
@method
@brief 用户注销后的回调
@discussion
@param error 错误信息
@result
*/
- (void)didLogoffWithError:(EMError *)error;

/*!
@method
@brief 当前登录账号在其它设备登录时的通知回调
@discussion
@result
*/
- (void)didLoginFromOtherDevice;

/*!
@method
@brief 当前登录账号已经被从服务器端删除
@discussion
@result
*/
- (void)didRemovedFromServer;
五:构建消息并发送消息对象
- (void)sendMesssage:(id<IEMMessageBody>)body{

//2.构造消息对象
EMMessage *msgObj = [[EMMessage alloc] initWithReceiver:self.buddy.username bodies:@[body]];
//消息类型为单聊模式
msgObj.messageType = eMessageTypeChat;

//3.发送消息
[[EaseMob sharedInstance].chatManager asyncSendMessage:msgObj progress:nil prepare:^(EMMessage *message, EMError *error) {
NSLog(@"准备发送");
} onQueue:nil completion:^(EMMessage *message, EMError *error) {
NSLog(@"发送成功");
} onQueue:nil];

//把消息添加到数据源数组,然后刷新表格
[self addDataArrayWithMessage:msgObj];
[self.tableView reloadData];

//把消息滚动显示在最上面
[self scrollToBottom];
}
初始化一个会话对象
EMConversation *conversation = [[EaseMob sharedInstance].chatManager conversationForChatter:self.buddy.username conversationType:eConversationTypeChat];
六:获取好友列表
//从服务器获取好友列表
[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
//赋值给数据源
self.buddyList = buddyList;
//刷新
[self.tableView reloadData];
} onQueue:nil];
// 获取好友列表的数据
/* 注意
1.好友列表buddyList需要在自动登录之后才有值
2.buddyList数据是从本地数据库获取的
3.要想从服务器获取好友数据调用这个方法- (void *)asyncFetchBuddyListWithCompletion:(void (^)(NSArray *buddyList, EMError *error))completion
onQueue:(dispatch_queue_t)queue;
4.如果当前有添加好友请求,环信的SDK内部会往数据库的buddy表添加好友记录
5.如果程序删除或者用户第一次登录,buddyList表是没有记录的;
解决方案:
1.要从服务器获取好友列表记录
2.用户第一次登录后,自动从服务器获取还有列表
*/

//删除好友
[[EaseMob sharedInstance].chatManager removeBuddy:username removeFromRemote:YES error:nil];

//添加代理后好友列表更新监听
#pragma mark 好友数据列表被更新
- (void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd
七:获取历史会话记录​
//获取历史会话记录
//1.从内存中获取历史会话记录
NSArray *conversations = [[EaseMob sharedInstance].chatManager conversations];

//2.如果内存中没有会话记录,从数据库中获取conversations
if (conversations.count == 0) {
conversations = [[EaseMob sharedInstance].chatManager loadAllConversationsFromDatabaseWithAppend2Chat:YES];
}
self.conversations = conversations;
显示未读消息数目:
//遍历所有的会话记录,将未读消息数进行类加
NSInteger totalUnreadCount = 0;
for (EMConversation *conversation in self.conversations) {
totalUnreadCount += conversation.unreadMessagesCount;
}
if (totalUnreadCount > 0) {
self.navigationController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld",totalUnreadCount];
}else{
self.navigationController.tabBarItem.badgeValue = nil;
}
总结:

[EaseMob sharedInstance].chatManager ; //这是会话管理者,获取该对象后, 可以做登录、聊天、加好友等操作;
[EaseMob sharedInstance].callManager ;//这是即时通讯(语音聊天和视频聊天)的管理者.
在开发过程中主要是这两个个对象在掌控所有会话消息等;


作者:环信热心用户西风颂
6
评论

(iOS)名片。或称轨迹信息的做法(消息扩展3X) iOS名片 环信_iOS iOS环信UI集成 名片 iOS环信扩展

su酥酥 发表了文章 • 2443 次浏览 • 2016-07-27 18:22 • 来自相关话题

环信iOS版的名片怎么做尼?当你真正了解了。。你就会发现其实不是很难得东西。。。我先要感谢一个人他叫无双,。。谢谢你。。我也在这里发了很多问题。。现在是时候回报了。。希望可以帮助更多的人。。谢谢。。



如上图。。这是代表扩展信息的办法。。原理更头像的是一样的。。用的是消息携带的办法。。。我在这里就是把我的一些信息用消息携带的办法发送过去。要记住发送的对象名称和安卓的要一样哈。。收到就到了展示的时候了。。展示肯定要判断的。。这是肯定的。。- (UITableViewCell *)messageViewController:(UITableView *)tableView在这个方法里面写判断。。原因为什么这个不用我说吧。。。














这就是判断的代码。见人见智哇。。还有就是cell也就是你的名片的高度是多少。。也要有判断




大概的原理就是这样的了。。。此图仅供参考。。。我已经有一些备注的了。。。大概看起来不是什么问题的了。。希望对你们有帮助。 查看全部
环信iOS版的名片怎么做尼?当你真正了解了。。你就会发现其实不是很难得东西。。。我先要感谢一个人他叫无双,。。谢谢你。。我也在这里发了很多问题。。现在是时候回报了。。希望可以帮助更多的人。。谢谢。。
30883222-5266-42B6-BCE0-56D13183041A.jpg
如上图。。这是代表扩展信息的办法。。原理更头像的是一样的。。用的是消息携带的办法。。。我在这里就是把我的一些信息用消息携带的办法发送过去。要记住发送的对象名称和安卓的要一样哈。。收到就到了展示的时候了。。展示肯定要判断的。。这是肯定的。。- (UITableViewCell *)messageViewController:(UITableView *)tableView在这个方法里面写判断。。原因为什么这个不用我说吧。。。
6B8E00AE-10C4-44D0-9F83-7478E5F38CCC.png


40419A8D-91EE-4F57-9545-21EFBDD067CB.png


4B73C851-0353-4E48-B0B8-EAE456FF5F03.png

这就是判断的代码。见人见智哇。。还有就是cell也就是你的名片的高度是多少。。也要有判断
20064AF4-6FCE-4D08-B754-8C7827F5F7C7.png

大概的原理就是这样的了。。。此图仅供参考。。。我已经有一些备注的了。。。大概看起来不是什么问题的了。。希望对你们有帮助。
2
评论

一路有你,感谢环信 ! 环信_管理后台 环信_iOS 感谢环信

hzw87383197 发表了文章 • 836 次浏览 • 2016-07-21 15:40 • 来自相关话题

一路有你,感谢环信 ! 
今天无比的开心,激动,兴奋.
入这行以来,集成过无数SDK,第一次收到这么精致,清凉的小礼物 !
相信社区的小伙都想知道是什么小礼物吧,让我们一起来揭开神秘的面纱吧


ps:大家猜猜我叫什么名字 =(*^__^*) =
感谢环信,感谢社区的小伙伴 !
一路有你,  幸福,么么哒O(∩_∩)O


  查看全部
一路有你,感谢环信 ! 
今天无比的开心,激动,兴奋.
入这行以来,集成过无数SDK,第一次收到这么精致,清凉的小礼物 !
相信社区的小伙都想知道是什么小礼物吧,让我们一起来揭开神秘的面纱吧


ps:大家猜猜我叫什么名字 =(*^__^*) =
感谢环信,感谢社区的小伙伴 !
一路有你,  幸福,么么哒O(∩_∩)O


 
2
评论

swift集成环信(1) 环信_iOS

afer 发表了文章 • 5657 次浏览 • 2016-06-27 19:40 • 来自相关话题

 


 
1. 为了swift工程能使用OC编写的环信文件,我们需要一个桥接文件。在这里有个简单的方法,我们创建一个OC的Test类。如下,点击 Create Bridging Header 。系统就自动为我们生成了一个 桥接文件。 以后要在swift文件中引用的OC类 我们就需要把OC的头文件(*.h文件)导入到桥接文件里面。






ps. 如果操作失误没有自动提示生成,请自己创建并加入以下设置






2. 首先根据官网SDK导入流程 导入SDK 以及 easeUI.








3. 导入所需要的静态库, 此版本不包含实时语音。向Build Phases → Link Binary With Libraries 中添加依赖库CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
4. 将以下头文件加入到 Bridging Header 文件(Xcode自动生成的那个头文件)#import "EMSDK.h"
#import "EaseUI.h"
















此时运行工程大部分的时候会报错。 我们需要将EaseUI-Prefix.pch 加入到以下位置




// pch中的代码 #ifdef __OBJC__ // 这个在自己写pch的时候也必须加
#import <UIKit/UIKit.h>
#import "EMSDK.h"
#import "EaseUI.h"
#endif
5. 此时运行工程一般来说就没什么问题了,我们来初始化SDK试试
   func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
EaseSDKHelper.shareHelper().easemobApplication(application,
didFinishLaunchingWithOptions: launchOptions,
appkey: "appkey",
apnsCertName: "apnsCertName",
otherConfig: ["SDKConfigEnableConsoleLogger":"1"])
return true
}
6. 集成SDK以及easeUI到此结束。
 
swiftDemo git 地址:https://github.com/myafer/SwiftEaseUIDemo 查看全部
 



 
1. 为了swift工程能使用OC编写的环信文件,我们需要一个桥接文件。在这里有个简单的方法,我们创建一个OC的Test类。如下,点击 Create Bridging Header 。系统就自动为我们生成了一个 桥接文件。 以后要在swift文件中引用的OC类 我们就需要把OC的头文件(*.h文件)导入到桥接文件里面。

100.png


ps. 如果操作失误没有自动提示生成,请自己创建并加入以下设置

200.png


2. 首先根据官网SDK导入流程 导入SDK 以及 easeUI.

2.png




3. 导入所需要的静态库, 此版本不包含实时语音。向Build Phases → Link Binary With Libraries 中添加依赖库
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib

4. 将以下头文件加入到 Bridging Header 文件(Xcode自动生成的那个头文件)
#import "EMSDK.h" 
#import "EaseUI.h"
















此时运行工程大部分的时候会报错。 我们需要将EaseUI-Prefix.pch 加入到以下位置

222.png
// pch中的代码 
#ifdef __OBJC__ // 这个在自己写pch的时候也必须加
#import <UIKit/UIKit.h>
#import "EMSDK.h"
#import "EaseUI.h"
#endif

5. 此时运行工程一般来说就没什么问题了,我们来初始化SDK试试
   
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
EaseSDKHelper.shareHelper().easemobApplication(application,
didFinishLaunchingWithOptions: launchOptions,
appkey: "appkey",
apnsCertName: "apnsCertName",
otherConfig: ["SDKConfigEnableConsoleLogger":"1"])
return true
}

6. 集成SDK以及easeUI到此结束。
 
swiftDemo git 地址:https://github.com/myafer/SwiftEaseUIDemo
2
评论

iOS如何基于3.0SDK集成单聊界面 环信_iOS

donghai 发表了文章 • 2119 次浏览 • 2016-03-25 16:43 • 来自相关话题

1.首先到环信官网下载3.0SDK的demo 网址:http://www.easemob.com/download (IM 3.0.1 下的最新SDK下载就是demo)

2.然后将demo中的SDK加入到你的工程中(SDK的文件名是 HyphenateSDK),SDK文件中有两个.a包,一个是带实时通话功能,一个是不带的,选其中一个,另一个删除掉。 具体看链接如何添加SDK以及SDK的依赖库:http://docs.easemob.com/doku.php?id=im:300iosclientintegration:20iossdkimport 

3. 添加完SDK之后,添加聊天页面,环信demo中UI的部分都封装在了EaseUI文件中(具体是聊天页面,回话列表界面,联系人界面),找到环信 demo中的EaseUI文件。将EaseUI内部的EaseUI,以及EaseUIResource里的Resource,以及export文件 --->resource文件-->EaseUIResource.bundle,将这3个文件加到你的工程中,编译的过程会报错,下面是避 免报错的解决方法(还有就是会遇到三方库重复的报错,报错会提示你是哪个三方重复,看名称和路径自己删除一个)。然后先找到EaseUI- Prefix.pch,将其中的 #define NSEaseLocalizedString(key, comment) [[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"EaseUIResource" withExtension:@"bundle"]] localizedStringForKey:(key) value:@"" table:nil] 这段代码拷贝到自己的pch文件下, 在自己pch文件中所有代码的首尾加上#ifdef __OBJC__和#endif,具体看demo中的pch文件,然后再将NSObject+EaseMob这个类删除了,全局搜索就能搜索到。
然后将SDK的头文件引入到你的pch文件中,如果是用的带实时通话功能的SDK就引入 #import "EMSDKFull.h"  如果不带实时通话功能的引入 #import "EMSDK.h",同时在引入 #import "EaseUI.h"(UI的头文件)

4.工程编译成功后,在你的appdelegate,写上初始化环信appkey,以及登录环信服务器的方法:http://docs.easemob.com/doku.p ... basic (收发消息是根据环信ID,客户端一定要写登录环信服务器的方法,这个环信ID就是你环信管理后台应用下的IM用户)。然后自己可以写一个按钮,在按钮的点击事件中,跳转到聊天页面,方法如下:
EaseMessageViewController *message = [[EaseMessageViewController alloc] initWithConversationChatter:"这里填接受消息方的环信ID" conversationType:EMConversationTypeChat]; (EMConversationTypeChat是单聊类型)
这里用到的聊天页面就是EaseUI中的EaseMessageViewController.m聊天页面,自己引一下头文件

5.在聊天界面点击表情会崩的解决办法,可以在 在EaseMessageViewController.m类中的 viewdidload中的最后加上    EaseEmotionManager *manager= [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:[EaseEmoji allEmoji]];
[self.faceView setEmotionManagers:@[manager]];来进行处理。

6.在聊天界面收发消息,退出页面后再重新进入会看不到之前消息的处理方法,也是在EaseMessageViewController.m类中的 viewdidload中 调用[self tableViewDidTriggerHeaderRefresh];就可以了。
环信demo中用到的聊天类是ChatViewController.m是继承于EaseMessageViewController.m类的,具体的可以去看下(如果以后使用ChatViewController类的话,把上面5,6中添加的代码都注释掉,要不会出现问题)

7.以上步骤基本集成单聊的聊天页面,如果遇到了其他问题,可以到环信官网联系技术支持。 查看全部
1.首先到环信官网下载3.0SDK的demo 网址:http://www.easemob.com/download (IM 3.0.1 下的最新SDK下载就是demo)

2.然后将demo中的SDK加入到你的工程中(SDK的文件名是 HyphenateSDK),SDK文件中有两个.a包,一个是带实时通话功能,一个是不带的,选其中一个,另一个删除掉。 具体看链接如何添加SDK以及SDK的依赖库:http://docs.easemob.com/doku.php?id=im:300iosclientintegration:20iossdkimport 

3. 添加完SDK之后,添加聊天页面,环信demo中UI的部分都封装在了EaseUI文件中(具体是聊天页面,回话列表界面,联系人界面),找到环信 demo中的EaseUI文件。将EaseUI内部的EaseUI,以及EaseUIResource里的Resource,以及export文件 --->resource文件-->EaseUIResource.bundle,将这3个文件加到你的工程中,编译的过程会报错,下面是避 免报错的解决方法(还有就是会遇到三方库重复的报错,报错会提示你是哪个三方重复,看名称和路径自己删除一个)。然后先找到EaseUI- Prefix.pch,将其中的 #define NSEaseLocalizedString(key, comment) [[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"EaseUIResource" withExtension:@"bundle"]] localizedStringForKey:(key) value:@"" table:nil] 这段代码拷贝到自己的pch文件下, 在自己pch文件中所有代码的首尾加上#ifdef __OBJC__和#endif,具体看demo中的pch文件,然后再将NSObject+EaseMob这个类删除了,全局搜索就能搜索到。
然后将SDK的头文件引入到你的pch文件中,如果是用的带实时通话功能的SDK就引入 #import "EMSDKFull.h"  如果不带实时通话功能的引入 #import "EMSDK.h",同时在引入 #import "EaseUI.h"(UI的头文件)

4.工程编译成功后,在你的appdelegate,写上初始化环信appkey,以及登录环信服务器的方法http://docs.easemob.com/doku.p ... basic (收发消息是根据环信ID,客户端一定要写登录环信服务器的方法,这个环信ID就是你环信管理后台应用下的IM用户)。然后自己可以写一个按钮,在按钮的点击事件中,跳转到聊天页面,方法如下:
EaseMessageViewController *message = [[EaseMessageViewController alloc] initWithConversationChatter:"这里填接受消息方的环信ID" conversationType:EMConversationTypeChat]; (EMConversationTypeChat是单聊类型)
这里用到的聊天页面就是EaseUI中的EaseMessageViewController.m聊天页面,自己引一下头文件

5.在聊天界面点击表情会崩的解决办法,可以在 在EaseMessageViewController.m类中的 viewdidload中的最后加上    EaseEmotionManager *manager= [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:[EaseEmoji allEmoji]];
[self.faceView setEmotionManagers:@[manager]];来进行处理。

6.在聊天界面收发消息,退出页面后再重新进入会看不到之前消息的处理方法,也是在EaseMessageViewController.m类中的 viewdidload中 调用[self tableViewDidTriggerHeaderRefresh];就可以了。
环信demo中用到的聊天类是ChatViewController.m是继承于EaseMessageViewController.m类的,具体的可以去看下(如果以后使用ChatViewController类的话,把上面5,6中添加的代码都注释掉,要不会出现问题)

7.以上步骤基本集成单聊的聊天页面,如果遇到了其他问题,可以到环信官网联系技术支持。
1
评论

史上最全的环信iOS 2.x and 3.x SDK单聊的集成方案! 环信_iOS

环信沈冲 发表了文章 • 37424 次浏览 • 2016-03-23 12:12 • 来自相关话题

      先放上环信SDK的下载链接:http://www.easemob.com/download;
    
       这里可以下载到环信2.x和3.x版本的SDK,3.x版本的SDK是环信最新推出的SDK,具体与2.x版本的区别可以参考该社区链接:http://community.easemob.com/article/825307639;在集成单聊界面之前,开发者需要先集成SDK,关于SDK的集成环信官网都有相应的文档,步骤也很详细。
     
      下面分别讲解下环信2.x和3.x如何集成单聊界面:
      对于2.x,集成相对较简单,因为已经有针对2.x的单聊集成视频,直接放上视频地址:http://v.youku.com/v_show/id_X ... 1.7-2;这个视频的EaseUI是2015年10月30日的版本,现在已经更新了很多代(这也得益于环信的更新速度,解决了不少bug),所以现在集成会报一个错,解决办法很简单,环信技术工程师也很贴心的将解决方案贴在了社区:http://community.easemob.com/question/5900;有了这几个链接,相信环信开发者很容易就可以集成一个使用环信SDK集成单聊界面的小demo了。
     
       对于3.x,可以先参考2.xEaseUI的集成视频,然后改动几个地方的代码即可。在导入3.xSDK的头文件 #import “EMSDK.h”后,点击进入头文件,将其中的
#if TARGET_OS_IPHONE、
#else、
#import <HyphenateSDK/EMClient.h>
#import <HyphenateSDK/EMClientDelegate.h>
这几句注释,不然会报错;
即使这样处理了,还是会有几个文件会缺头文件,不用担心,Xcode会提醒您哪地方缺,只需要在报错的文件中添加 #import “EMClient.h"和#import “EMClientDelegate.h"头文件即可。如果您导入的是使用实时音视频的头文件 #import “EMSDKFull.h”,也点进去做同样的处理。
   
     这样,2.x或3.xSDK的单聊就集成一大半了,下面再说一个表情的处理。
   
      新版的环信demo中,不但有emoji表情,还加入了兔斯基表情,所以处理起来相对之前的版本要稍微复杂点。如果您的单聊控制器是直接往 EaseMessageViewController中push的,进入聊天页点击表情肯定会崩溃一下下,因为处理表情的相关代码都放在了 ChatViewController.m中,您可以选择直接往 ChatViewController中push,也可以自定义聊天控制器继承于EaseMessageViewController,代码参考ChatViewController实现即可,在ChatViewController.m中搜索 EaseEmotion即可找到表情处理相关代码,环信demo实现的很完整,参考价值5颗星。
  
       放上使用3.1.0SDK集成的单聊小demo:http://yun.baidu.com/s/1pLMjYSN
     
       到这里,单聊界面就完整的实现了。
     
       最后,头像昵称一定是即时通讯的痛点,由于环信不保存用户的个人信息,所以头像昵称需要开发者自己的服务器处理,这里给出了实现方案:http://docs.easemob.com/doku.p ... kname;当然,环信demo也提供了parse的处理,这里再给大家一个环信技术工程师写的本地处理方案:http://www.imgeek.org/article/825307675。
      
       以上的这些,虽说很简单,但是在集成的过程中您一定也有一些疑问,这时候向大家推出环信“最可爱的人”再合适不过了,他们直接为开发者一对一的解决各种集成问题,回复解决方案也很及时,贴心到没朋友,他们就是“环信技术支持”,您在官网左下角或右下角都能找到他们,听说还有妹子哦!赶紧去联(sao)系(rao)他们吧!

       更新:附上2.x和3.x对比导入的视频: http://community.easemob.com/video/23
  查看全部
      先放上环信SDK的下载链接:http://www.easemob.com/download
    
       这里可以下载到环信2.x和3.x版本的SDK,3.x版本的SDK是环信最新推出的SDK,具体与2.x版本的区别可以参考该社区链接:http://community.easemob.com/article/825307639;在集成单聊界面之前,开发者需要先集成SDK,关于SDK的集成环信官网都有相应的文档,步骤也很详细。
     
      下面分别讲解下环信2.x和3.x如何集成单聊界面:
      对于2.x,集成相对较简单,因为已经有针对2.x的单聊集成视频,直接放上视频地址:http://v.youku.com/v_show/id_X ... 1.7-2;这个视频的EaseUI是2015年10月30日的版本,现在已经更新了很多代(这也得益于环信的更新速度,解决了不少bug),所以现在集成会报一个错,解决办法很简单,环信技术工程师也很贴心的将解决方案贴在了社区:http://community.easemob.com/question/5900;有了这几个链接,相信环信开发者很容易就可以集成一个使用环信SDK集成单聊界面的小demo了。
     
       对于3.x,可以先参考2.xEaseUI的集成视频,然后改动几个地方的代码即可。在导入3.xSDK的头文件 #import “EMSDK.h”后,点击进入头文件,将其中的
#if TARGET_OS_IPHONE、
#else、
#import <HyphenateSDK/EMClient.h>
#import <HyphenateSDK/EMClientDelegate.h>
这几句注释,不然会报错;
即使这样处理了,还是会有几个文件会缺头文件,不用担心,Xcode会提醒您哪地方缺,只需要在报错的文件中添加 #import “EMClient.h"和#import “EMClientDelegate.h"头文件即可。如果您导入的是使用实时音视频的头文件 #import “EMSDKFull.h”,也点进去做同样的处理。
   
     这样,2.x或3.xSDK的单聊就集成一大半了,下面再说一个表情的处理。
   
      新版的环信demo中,不但有emoji表情,还加入了兔斯基表情,所以处理起来相对之前的版本要稍微复杂点。如果您的单聊控制器是直接往 EaseMessageViewController中push的,进入聊天页点击表情肯定会崩溃一下下,因为处理表情的相关代码都放在了 ChatViewController.m中,您可以选择直接往 ChatViewController中push,也可以自定义聊天控制器继承于EaseMessageViewController,代码参考ChatViewController实现即可,在ChatViewController.m中搜索 EaseEmotion即可找到表情处理相关代码,环信demo实现的很完整,参考价值5颗星。
  
       放上使用3.1.0SDK集成的单聊小demo:http://yun.baidu.com/s/1pLMjYSN
     
       到这里,单聊界面就完整的实现了。
     
       最后,头像昵称一定是即时通讯的痛点,由于环信不保存用户的个人信息,所以头像昵称需要开发者自己的服务器处理,这里给出了实现方案:http://docs.easemob.com/doku.p ... kname;当然,环信demo也提供了parse的处理,这里再给大家一个环信技术工程师写的本地处理方案:http://www.imgeek.org/article/825307675
      
       以上的这些,虽说很简单,但是在集成的过程中您一定也有一些疑问,这时候向大家推出环信“最可爱的人”再合适不过了,他们直接为开发者一对一的解决各种集成问题,回复解决方案也很及时,贴心到没朋友,他们就是“环信技术支持”,您在官网左下角或右下角都能找到他们,听说还有妹子哦!赶紧去联(sao)系(rao)他们吧!

       更新:附上2.x和3.x对比导入的视频: http://community.easemob.com/video/23
 
11
评论

头像昵称的本地保存与获取 环信_iOS

环信沈冲 发表了文章 • 9708 次浏览 • 2016-03-15 19:25 • 来自相关话题

       环信demo中使用parse保存和处理的头像昵称,并将获取的头像昵称本地保存。一般开发者是不需要使用parse的,头像昵称需要从自己服务器获取,并自己处理本地保存。环信文档给出了两种解决方案http://docs.easemob.com/start/ ... kname,都可以借鉴,下面提供了本地保存和UI上显示的思路。
        https://github.com/shenchong/EMDemoUserProfile
        首先小伙伴需要将链接的demo下载下来,并且根据readme中的提示处理运行,测试效果。
         小demo中相对于IMdemo增加了一个SCUserProfileEntity类,这个类就是实现处理本地存储和取出以及删除的功能。存储以环信ID作为唯一字段区分。
         主要修改头像昵称是在ConversationListController.m和ChatViewController.m中,相关代码见// 头像和昵称,实现思路是:先从本地获取头像昵称,如果没有,再从自己服务器网络获取,并保存到本地,下一次直接可从本地获取,无需调用网络请求。这里的前提是先从自己服务器根据相应字段,比如环信ID,获取到头像昵称。自己的服务器可以将头像昵称跟环信ID做关联。
        PS.这个小demo只集成了单聊和会话列表,代码简洁,欢迎参考。 查看全部
       环信demo中使用parse保存和处理的头像昵称,并将获取的头像昵称本地保存。一般开发者是不需要使用parse的,头像昵称需要从自己服务器获取,并自己处理本地保存。环信文档给出了两种解决方案http://docs.easemob.com/start/ ... kname,都可以借鉴,下面提供了本地保存和UI上显示的思路。
        https://github.com/shenchong/EMDemoUserProfile
        首先小伙伴需要将链接的demo下载下来,并且根据readme中的提示处理运行,测试效果。
         小demo中相对于IMdemo增加了一个SCUserProfileEntity类,这个类就是实现处理本地存储和取出以及删除的功能。存储以环信ID作为唯一字段区分。
         主要修改头像昵称是在ConversationListController.m和ChatViewController.m中,相关代码见// 头像和昵称,实现思路是:先从本地获取头像昵称,如果没有,再从自己服务器网络获取,并保存到本地,下一次直接可从本地获取,无需调用网络请求。这里的前提是先从自己服务器根据相应字段,比如环信ID,获取到头像昵称。自己的服务器可以将头像昵称跟环信ID做关联。
        PS.这个小demo只集成了单聊和会话列表,代码简洁,欢迎参考。
3
评论

环信:发送头像和昵称(从消息扩展中获取) 昵称 头像 环信_iOS

beyond 发表了文章 • 11458 次浏览 • 2016-02-29 12:03 • 来自相关话题

昵称和头像

注意:以下是在官方Demo3.0的基础上修改的。官方Demo下载地址

环信提供了获取头像和昵称的两种方式:方法一 从APP服务器获取昵称和头像

昵称和头像的获取:当收到一条消息(群消息)时,得到发送者的用户ID,然后查找手机本地数据库是否有此用户ID的昵称和头像,如没有则调用APP服务器接口通过用户ID查询出昵称和头像,然后保存到本地数据库和缓存,下次此用户发来信息即可直接查询缓存或者本地数据库,不需要再次向APP服务器发起请求

昵称和头像的更新:当点击发送者头像时加载用户详情时从APP服务器查询此用户的具体信息然后更新本地数据库和缓存。当用户自己更新昵称或头像时,也可以发送一条透传消息到其他用户和用户所在的群,来更新该用户的昵称和头像。

方法二 从消息扩展中获取昵称和头像

昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据库和缓存。当显示昵称和头像时,请从本地或者缓存中读取,不要直接从消息中把赋值拿给界面(否则当用户昵称改变后,同一个人会显示不同的昵称)。

昵称和头像的更新:当扩展消息中的昵称和头像URI与当前本地数据库和缓存中的相应数据不同的时候,需要把新的昵称保存到本地数据库和缓存,并下载新的头像并保存到本地数据库和缓存。

本文主要介绍第二种方法:给消息添加扩展,用于携带昵称和头像信息。先来看下效果:




效果图
在消息发送时,设置并发送扩展消息

1:因为是在官方Demo里修改的,但对其还不熟悉,咋办呢?

其实,环信是基于XMPP优化而来的,而XMPP消息又是基于XML的。已经知道在XMPP里扩展消息的方式了,这里应该也是类似的。只不过首先要找到发送消息的时机。可是我不知道在哪?这里要善用搜索和断点。下面简要的说下我的思路:在项目里搜索【消息】,找到了EaseChatToolbar.h中的- (void)didSendText:(NSString *)text;方法(别问我为什么是这个方法,不会告诉你我也是查了很久的)。然后在.m中该方法处设置断点,运行程序,输入文字后点击发送按钮。然后看看程序执行的流程是什么。依次向上修改方法,添加头像和昵称信息。如图:




工程截图

2:修改- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
中的调用方法。并设定头像和昵称字典,代码如下:- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
//注释掉的 -- [self.delegate didSendText:textView.text];
//新增头像和昵称扩展
NSDictionary *ext = @{@"accountName":accountName,@"img":@"http://7xo30v.com1.z0.glb.clou ... ot%3B};
[self.delegate didSendText:textView.text withExt:ext];
//结束
self.inputTextView.text = @"";
[self _willShowInputTextViewToHeight:[self _getTextViewContentH:self.inputTextView]];;
}
return NO;
}
return YES;
}
3:从新运行程序,发送消息,查看日志。在<body>元素里包含了额外添加的昵称和头像信息。如下:ChatDemoJCV1[17136:720f] SEND: <message type="chat" to="easemob-demo#chatdemoui_zlanchun1@easemob.com" id="151a0fcc287">
<body>{"ext":{"img":"http://7xo30v.com1.z0.glb.clou ... ot%3B,"accountName":"zlanchun"},"to":"zlanchun1","bodies":[{"type":"txt","msg":"You"}],"from":"zlanchun"}</body></message>
4:在聊天框中显示消息里地头像和昵称。因为是测试,所以在ChatViewController.m直接将消息中的昵称和头像赋值给视图(实际应用中不推荐这么做,正如环信方法二缺点所说的,需要自己缓存,从本地提取信息)- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id<IMessageModel>)model
{
if (model.bodyType == eMessageBodyType_Text ) {
NSString *CellIdentifier = [CustomMessageCell cellIdentifierWithModel:model];
//发送cell
CustomMessageCell *sendCell = (CustomMessageCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if (sendCell == nil) {
sendCell = [[CustomMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier model:model];
sendCell.selectionStyle = UITableViewCellSelectionStyleNone;
}
//设定头像和昵称
model.avatarURLPath = model.message.ext[@"img"];
model.nickname = model.message.ext[@"accountName"];
sendCell.model = model;
return sendCell;
}
return nil;
}最后,这里只是修改了text类型消息的扩展,还有其他几种类型的消息扩展也可以按照这样来处理。
 
本篇集成文章由环信热心开发者提供,作者主页取水 查看全部
昵称和头像

注意:以下是在官方Demo3.0的基础上修改的。官方Demo下载地址

环信提供了获取头像和昵称的两种方式:
方法一 从APP服务器获取昵称和头像

昵称和头像的获取:当收到一条消息(群消息)时,得到发送者的用户ID,然后查找手机本地数据库是否有此用户ID的昵称和头像,如没有则调用APP服务器接口通过用户ID查询出昵称和头像,然后保存到本地数据库和缓存,下次此用户发来信息即可直接查询缓存或者本地数据库,不需要再次向APP服务器发起请求

昵称和头像的更新:当点击发送者头像时加载用户详情时从APP服务器查询此用户的具体信息然后更新本地数据库和缓存。当用户自己更新昵称或头像时,也可以发送一条透传消息到其他用户和用户所在的群,来更新该用户的昵称和头像。

方法二 从消息扩展中获取昵称和头像

昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据库和缓存。当显示昵称和头像时,请从本地或者缓存中读取,不要直接从消息中把赋值拿给界面(否则当用户昵称改变后,同一个人会显示不同的昵称)。

昵称和头像的更新:当扩展消息中的昵称和头像URI与当前本地数据库和缓存中的相应数据不同的时候,需要把新的昵称保存到本地数据库和缓存,并下载新的头像并保存到本地数据库和缓存。


本文主要介绍第二种方法:给消息添加扩展,用于携带昵称和头像信息。先来看下效果:

1163763-27c154f8d8a20e13.gif

效果图


在消息发送时,设置并发送扩展消息

1:因为是在官方Demo里修改的,但对其还不熟悉,咋办呢?

其实,环信是基于XMPP优化而来的,而XMPP消息又是基于XML的。已经知道在XMPP里扩展消息的方式了,这里应该也是类似的。只不过首先要找到发送消息的时机。可是我不知道在哪?这里要善用搜索和断点。下面简要的说下我的思路:在项目里搜索【消息】,找到了EaseChatToolbar.h中的- (void)didSendText:(NSString *)text;方法(别问我为什么是这个方法,不会告诉你我也是查了很久的)。然后在.m中该方法处设置断点,运行程序,输入文字后点击发送按钮。然后看看程序执行的流程是什么。依次向上修改方法,添加头像和昵称信息。如图:

1163763-d32c3f012208e4e4.png

工程截图



2:修改- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
中的调用方法。并设定头像和昵称字典,代码如下:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
//注释掉的 -- [self.delegate didSendText:textView.text];
//新增头像和昵称扩展
NSDictionary *ext = @{@"accountName":accountName,@"img":@"http://7xo30v.com1.z0.glb.clou ... ot%3B};
[self.delegate didSendText:textView.text withExt:ext];
//结束
self.inputTextView.text = @"";
[self _willShowInputTextViewToHeight:[self _getTextViewContentH:self.inputTextView]];;
}
return NO;
}
return YES;
}

3:从新运行程序,发送消息,查看日志。在<body>元素里包含了额外添加的昵称和头像信息。如下:
ChatDemoJCV1[17136:720f] SEND: <message type="chat" to="easemob-demo#chatdemoui_zlanchun1@easemob.com" id="151a0fcc287">
<body>{"ext":{"img":"http://7xo30v.com1.z0.glb.clou ... ot%3B,"accountName":"zlanchun"},"to":"zlanchun1","bodies":[{"type":"txt","msg":"You"}],"from":"zlanchun"}</body></message>

4:在聊天框中显示消息里地头像和昵称。因为是测试,所以在ChatViewController.m直接将消息中的昵称和头像赋值给视图(实际应用中不推荐这么做,正如环信方法二缺点所说的,需要自己缓存,从本地提取信息)
- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id<IMessageModel>)model
{
if (model.bodyType == eMessageBodyType_Text ) {
NSString *CellIdentifier = [CustomMessageCell cellIdentifierWithModel:model];
//发送cell
CustomMessageCell *sendCell = (CustomMessageCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if (sendCell == nil) {
sendCell = [[CustomMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier model:model];
sendCell.selectionStyle = UITableViewCellSelectionStyleNone;
}
//设定头像和昵称
model.avatarURLPath = model.message.ext[@"img"];
model.nickname = model.message.ext[@"accountName"];
sendCell.model = model;
return sendCell;
}
return nil;
}
最后,这里只是修改了text类型消息的扩展,还有其他几种类型的消息扩展也可以按照这样来处理。
 
本篇集成文章由环信热心开发者提供,作者主页取水
1
评论

ios端部分回调接口不执行排查思路 环信_iOS

mazhihua 发表了文章 • 1813 次浏览 • 2016-02-22 15:47 • 来自相关话题

1 发送消息:
1.1 /*!
 @method
 @brief 发送一条消息
 @discussion 待发送的消息对象和发送后的消息对象是同一个对象, 在发送过程中对象属性可能会被更改
 @param message  消息对象(包括from, to, body列表等信息)
 @param progress 发送多媒体信息时的progress回调对象
 @param pError   错误信息
 @result 发送完成后的消息对象
 */
- (EMMessage *)sendMessage:(EMMessage *)message
                 progress:(id<IEMChatProgressDelegate>)progress
                    error:(EMError **)pError;
解释: 这个方法是同步方法,是不会执行回调的

1.2 /*!
 @method
 @brief 异步方法, 发送一条消息
 @discussion 待发送的消息对象和发送后的消息对象是同一个对象, 在发送过程中对象属性可能会被更改. 在发送过程中, willSendMessage:error:和didSendMessage:error:这两个回调会被触发
 @param message  消息对象(包括from, to, body列表等信息)
 @param progress 发送多媒体信息时的progress回调对象
 @result 发送的消息对象(因为是异步方法, 不能作为发送完成或发送成功失败与否的判断)
 */
- (EMMessage *)asyncSendMessage:(EMMessage *)message
                      progress:(id<IEMChatProgressDelegate>)progress;
解释: 这个方法是异步发送消息的方法,调用这个方法willSendMessage:error:和didSendMessage:error:这两个回调会被触发。
如果没有触发,排查思路:a 看一下有没有遵守IChatManagerDelegate这个协议;b 看一下viewDidLoad里面有没有注册代理,方法是[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
1.3 /*!
 @method
 @brief 异步方法, 发送一条消息
 @discussion 待发送的消息对象和发送后的消息对象是同一个对象, 在发送过程中对象属性可能会被更改
 @param message  消息对象(包括from, to, body列表等信息)
 @param progress 发送多媒体信息时的progress回调对象
 @param prepare          将要发送消息前的回调block
 @param aPrepareQueue    回调block时的线程
 @param completion       发送消息完成后的回调
 @param aCompletionQueue 回调block时的线程
 @result 发送的消息对象(因为是异步方法, 不能作为发送完成或发送成功失败与否的判断)
 */
- (EMMessage *)asyncSendMessage:(EMMessage *)message
                           progress:(id<IEMChatProgressDelegate>)progress
                            prepare:(void (^)(EMMessage *message,
                                              EMError *error))prepare
                            onQueue:(dispatch_queue_t)aPrepareQueue
                         completion:(void (^)(EMMessage *message,
                                              EMError *error))completion
                            onQueue:(dispatch_queue_t)aCompletionQueue;
解释: 这个方法是异步block回调的方法,也不会执行回调的

2接收消息
2.1 接收在线消息

/*!
 @method
 @brief 收到消息时的回调
 @param message      消息对象
 @discussion 当EMConversation对象的enableReceiveMessage属性为YES时, 会触发此回调
             针对有附件的消息, 此时附件还未被下载.
             附件下载过程中的进度回调请参考didFetchingMessageAttachments:progress:, 
             下载完所有附件后, 回调didMessageAttachmentsStatusChanged:error:会被触发
 */
- (void)didReceiveMessage:(EMMessage *)message;
解释:这个方法是接收在线消息的方法,如果这个回调不执行,排查:
a 先判断消息是不是发送成功,接收方可以使用环信的Demo(AppKey换成您自己的)测试,如果能够接受到消息,说明消息发送成功了;
b看一下有没有遵守IChatManagerDelegate这个协议;
c看一下viewDidLoad里面有没有注册代理,方法是[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
d 程序所处的界面不是didReceiveMessage方法所在的界面,可以在根控制器中调用didReceiveMessage

2.2 接受离线消息
/*!
 @method
 @brief 接收到离线非透传消息的回调
 @discussion
 @param offlineMessages 接收到的离线列表
 @result
 */
- (void)didReceiveOfflineMessages:(NSArray *)offlineMessages;
解释:这个方法是接收离线消息的方法,如果这个回调不执行,排查:
a 先判断消息是不是发送成功,接收方可以使用环信的Demo(AppKey换成您自己的)测试,如果能够接受到消息,说明消息发送成功了;
b看一下有没有遵守IChatManagerDelegate这个协议;
c看一下viewDidLoad里面有没有注册代理,方法是[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
d 程序所处的界面不是didReceiveOfflineMessage方法所在的界面,可以在根控制器中调用didReceiveOfflineMessage 查看全部
1 发送消息:
1.1 /*!
 @method
 @brief 发送一条消息
 @discussion 待发送的消息对象和发送后的消息对象是同一个对象, 在发送过程中对象属性可能会被更改
 @param message  消息对象(包括from, to, body列表等信息)
 @param progress 发送多媒体信息时的progress回调对象
 @param pError   错误信息
 @result 发送完成后的消息对象
 */
- (EMMessage *)sendMessage:(EMMessage *)message
                 progress:(id<IEMChatProgressDelegate>)progress
                    error:(EMError **)pError;
解释: 这个方法是同步方法,是不会执行回调的

1.2 /*!
 @method
 @brief 异步方法, 发送一条消息
 @discussion 待发送的消息对象和发送后的消息对象是同一个对象, 在发送过程中对象属性可能会被更改. 在发送过程中, willSendMessage:error:和didSendMessage:error:这两个回调会被触发
 @param message  消息对象(包括from, to, body列表等信息)
 @param progress 发送多媒体信息时的progress回调对象
 @result 发送的消息对象(因为是异步方法, 不能作为发送完成或发送成功失败与否的判断)
 */
- (EMMessage *)asyncSendMessage:(EMMessage *)message
                      progress:(id<IEMChatProgressDelegate>)progress;
解释: 这个方法是异步发送消息的方法,调用这个方法willSendMessage:error:和didSendMessage:error:这两个回调会被触发。
如果没有触发,排查思路:a 看一下有没有遵守IChatManagerDelegate这个协议;b 看一下viewDidLoad里面有没有注册代理,方法是[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
1.3 /*!
 @method
 @brief 异步方法, 发送一条消息
 @discussion 待发送的消息对象和发送后的消息对象是同一个对象, 在发送过程中对象属性可能会被更改
 @param message  消息对象(包括from, to, body列表等信息)
 @param progress 发送多媒体信息时的progress回调对象
 @param prepare          将要发送消息前的回调block
 @param aPrepareQueue    回调block时的线程
 @param completion       发送消息完成后的回调
 @param aCompletionQueue 回调block时的线程
 @result 发送的消息对象(因为是异步方法, 不能作为发送完成或发送成功失败与否的判断)
 */
- (EMMessage *)asyncSendMessage:(EMMessage *)message
                           progress:(id<IEMChatProgressDelegate>)progress
                            prepare:(void (^)(EMMessage *message,
                                              EMError *error))prepare
                            onQueue:(dispatch_queue_t)aPrepareQueue
                         completion:(void (^)(EMMessage *message,
                                              EMError *error))completion
                            onQueue:(dispatch_queue_t)aCompletionQueue;
解释: 这个方法是异步block回调的方法,也不会执行回调的

2接收消息
2.1 接收在线消息

/*!
 @method
 @brief 收到消息时的回调
 @param message      消息对象
 @discussion 当EMConversation对象的enableReceiveMessage属性为YES时, 会触发此回调
             针对有附件的消息, 此时附件还未被下载.
             附件下载过程中的进度回调请参考didFetchingMessageAttachments:progress:, 
             下载完所有附件后, 回调didMessageAttachmentsStatusChanged:error:会被触发
 */
- (void)didReceiveMessage:(EMMessage *)message;
解释:这个方法是接收在线消息的方法,如果这个回调不执行,排查:
a 先判断消息是不是发送成功,接收方可以使用环信的Demo(AppKey换成您自己的)测试,如果能够接受到消息,说明消息发送成功了;
b看一下有没有遵守IChatManagerDelegate这个协议;
c看一下viewDidLoad里面有没有注册代理,方法是[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
d 程序所处的界面不是didReceiveMessage方法所在的界面,可以在根控制器中调用didReceiveMessage

2.2 接受离线消息
/*!
 @method
 @brief 接收到离线非透传消息的回调
 @discussion
 @param offlineMessages 接收到的离线列表
 @result
 */
- (void)didReceiveOfflineMessages:(NSArray *)offlineMessages;
解释:这个方法是接收离线消息的方法,如果这个回调不执行,排查:
a 先判断消息是不是发送成功,接收方可以使用环信的Demo(AppKey换成您自己的)测试,如果能够接受到消息,说明消息发送成功了;
b看一下有没有遵守IChatManagerDelegate这个协议;
c看一下viewDidLoad里面有没有注册代理,方法是[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
d 程序所处的界面不是didReceiveOfflineMessage方法所在的界面,可以在根控制器中调用didReceiveOfflineMessage
4
评论

iOS端实时音视频的集成与实现 环信_iOS

环信沈冲 发表了文章 • 11441 次浏览 • 2016-02-17 19:31 • 来自相关话题

音视频是独立于单聊界面的,需要单独集成,如果不单独集成,在单聊的更多功能中点击语音通话和视频通话是没有效果的,并且实时音视频暂时只支持一对一,不支持一对多或群聊。

本文介绍3.0demo实现实时音视频的步骤:
一、发出实时音视频
1、在EaseMessageViewController.m中,实现了EaseChatBarMoreViewDelegate方法moreViewAudioCallAction,发出KNOTIFICATION_CALL通知;
2、在根控制器中接收通知,并实现callOutWithChatter方法,该方法中通过判断实时音视频的类型和必要条件去发出相应的音视频请求,在发出请求后跳转到CallViewController中,等待对方接听或挂断;

此时,需要向大家介绍实时音视频状态变化的回调方法:
/*!
 @method
 @brief 实时通话状态发生变化时的回调
 @param callSession 实时通话的实例
 @param reason   变化原因
 @param error    错误信息
 */
- (void)callSessionStatusChanged:(EMCallSession *)callSession
                    changeReason:(EMCallStatusChangedReason)reason
                           error:(EMError *)error;
该方法在实时通话状态发生变化时会执行,前提条件是在使用回调方法的控制器注册了代理:
[[EaseMob sharedInstance].callManager removeDelegate:self];
[[EaseMob sharedInstance].callManager addDelegate:self delegateQueue:nil];
demo中该回调方法在mainViewController和CallViewController中都有实现,开发者务必参考demo中这两处的实现操作。

若对方接听,会执行到该回调方法,进入callSession.status == eCallSessionStatusAccepted判断,并可以开始音视频通话;
若对方拒接或未连接上,则挂断,进入callSession.status == eCallSessionStatusDisconnected判断,在_close方法中发出通知callControllerClose,关闭页面,在mainViewController中是接收通知并实现callControllerClose方法,该方法中只做了一步操作,注册代理[[EaseMob sharedInstance].callManager addDelegate:self delegateQueue:nil];
注:如果没有这一步注册代理的操作,在挂断后无法再次发出和接收音视频请求。

二、接收实时音视频
1、在根控制器mainViewController中注册了callManager的代理,并实现了callSessionStatusChanged回调方法,这样,当有音视频的请求过来时,会执行该回调方法,判断如果当前app不在后台,则可以present到CallViewController中,等待接听;
2、在挂断操作时,和上面一样,需要执行callControllerClose方法。


以上是2.xSDK音视频的集成,下面再给一个使用3.1.0SDK集成音视频的demo供集成3.1.0SDK的开发者参考:http://yun.baidu.com/s/1kU7iN4b
3.1.0SDK集成音视频的视频链接:http://community.easemob.com/video/24
  查看全部
音视频是独立于单聊界面的,需要单独集成,如果不单独集成,在单聊的更多功能中点击语音通话和视频通话是没有效果的,并且实时音视频暂时只支持一对一,不支持一对多或群聊。

本文介绍3.0demo实现实时音视频的步骤:
一、发出实时音视频
1、在EaseMessageViewController.m中,实现了EaseChatBarMoreViewDelegate方法moreViewAudioCallAction,发出KNOTIFICATION_CALL通知;
2、在根控制器中接收通知,并实现callOutWithChatter方法,该方法中通过判断实时音视频的类型和必要条件去发出相应的音视频请求,在发出请求后跳转到CallViewController中,等待对方接听或挂断;

此时,需要向大家介绍实时音视频状态变化的回调方法:
/*!
 @method
 @brief 实时通话状态发生变化时的回调
 @param callSession 实时通话的实例
 @param reason   变化原因
 @param error    错误信息
 */
- (void)callSessionStatusChanged:(EMCallSession *)callSession
                    changeReason:(EMCallStatusChangedReason)reason
                           error:(EMError *)error;
该方法在实时通话状态发生变化时会执行,前提条件是在使用回调方法的控制器注册了代理:
[[EaseMob sharedInstance].callManager removeDelegate:self];
[[EaseMob sharedInstance].callManager addDelegate:self delegateQueue:nil];
demo中该回调方法在mainViewController和CallViewController中都有实现,开发者务必参考demo中这两处的实现操作。

若对方接听,会执行到该回调方法,进入callSession.status == eCallSessionStatusAccepted判断,并可以开始音视频通话;
若对方拒接或未连接上,则挂断,进入callSession.status == eCallSessionStatusDisconnected判断,在_close方法中发出通知callControllerClose,关闭页面,在mainViewController中是接收通知并实现callControllerClose方法,该方法中只做了一步操作,注册代理[[EaseMob sharedInstance].callManager addDelegate:self delegateQueue:nil];
注:如果没有这一步注册代理的操作,在挂断后无法再次发出和接收音视频请求。

二、接收实时音视频
1、在根控制器mainViewController中注册了callManager的代理,并实现了callSessionStatusChanged回调方法,这样,当有音视频的请求过来时,会执行该回调方法,判断如果当前app不在后台,则可以present到CallViewController中,等待接听;
2、在挂断操作时,和上面一样,需要执行callControllerClose方法。


以上是2.xSDK音视频的集成,下面再给一个使用3.1.0SDK集成音视频的demo供集成3.1.0SDK的开发者参考:http://yun.baidu.com/s/1kU7iN4b
3.1.0SDK集成音视频的视频链接:http://community.easemob.com/video/24
 
1
评论

IOS V2.2.2 2016-02-02版本更新 环信_iOS 产品快递

beyond 发表了文章 • 1389 次浏览 • 2016-02-04 13:40 • 来自相关话题

流浪的脚步在外闯荡,家是永远的方向。不管你是已经到家,还是在回家的路上或还坚守在公司,环信送上最真挚的祝福,道一声朋友,祝你一路顺风,新春快乐。
环信与你同在,在距离春节最后一周,我们期待已久的ios新版本sdk发布了,这里让我们向还奋斗在一线的工程师们致敬。
 
以下是此次新版本介绍,文章结尾附下载链接

 新功能:
实时通话新增弱网监测、暂停或打开音频视频流等API(相应增加的方法可查看文档)。
实时视频新增录制功能(相应增加的方法可查看文档)。

bug fix:
SDK bug: iphone 6s 实时视频挂断crash。
SDK bug: 优化iphone 6s 实时语音外放噪音。
SDK bug: 使用sdk发送高分辨率图片crush bug。
SDK bug: 附件下载失败,附件下载状态为成功的bug。

SDK细节调整:
提升实时语音音质
 
点击下载体验http://www.easemob.com/downloads 查看全部
流浪的脚步在外闯荡,家是永远的方向。不管你是已经到家,还是在回家的路上或还坚守在公司,环信送上最真挚的祝福,道一声朋友,祝你一路顺风,新春快乐。

环信与你同在,在距离春节最后一周,我们期待已久的ios新版本sdk发布了,这里让我们向还奋斗在一线的工程师们致敬。
 
以下是此次新版本介绍,文章结尾附下载链接

 新功能:

实时通话新增弱网监测、暂停或打开音频视频流等API(相应增加的方法可查看文档)。
实时视频新增录制功能(相应增加的方法可查看文档)。



bug fix:

SDK bug: iphone 6s 实时视频挂断crash。
SDK bug: 优化iphone 6s 实时语音外放噪音。
SDK bug: 使用sdk发送高分辨率图片crush bug。
SDK bug: 附件下载失败,附件下载状态为成功的bug。



SDK细节调整:

提升实时语音音质


 
点击下载体验http://www.easemob.com/downloads
3
评论

基于EaseUI实现的图文混排 环信_iOS

环信沈冲 发表了文章 • 1334 次浏览 • 2016-02-03 18:36 • 来自相关话题

http://yun.baidu.com/s/1W4F1c
链接是实现的demo,主要是在MessageCellBubbleView中添加了EaseBubbleView+Custom.m,并在来图文混排消息的时候使用该bubbleview去展示。 查看全部
http://yun.baidu.com/s/1W4F1c
链接是实现的demo,主要是在MessageCellBubbleView中添加了EaseBubbleView+Custom.m,并在来图文混排消息的时候使用该bubbleview去展示。
0
评论

如何给实时语音实时视频通话加上播放铃声提醒 环信_iOS

环信沈冲 发表了文章 • 1564 次浏览 • 2016-01-27 12:08 • 来自相关话题

进CallViewController.m,在viewDidLoad中的相应位置调用_beginRing方法即可。具体代码如下:
if (_isIncoming) {
        _statusLabel.text = NSLocalizedString(@"call.waiting", @"Waiting to answer...");
        [_actionView addSubview:_answerButton];
        [_actionView addSubview:_rejectButton];
        // PS.开始播放铃声
        [self _beginRing];
    } 查看全部
进CallViewController.m,在viewDidLoad中的相应位置调用_beginRing方法即可。具体代码如下:
if (_isIncoming) {
        _statusLabel.text = NSLocalizedString(@"call.waiting", @"Waiting to answer...");
        [_actionView addSubview:_answerButton];
        [_actionView addSubview:_rejectButton];
        // PS.开始播放铃声
        [self _beginRing];
    }
3
评论

使用环信demo实现类似QQ那样的会话界面效果 环信昵称以及聊天信息位置的改变 环信_iOS

iOSwork 发表了文章 • 17167 次浏览 • 2016-01-25 17:24 • 来自相关话题

使用环信即时聊天,将昵称和聊天信息显示样式更改成类似QQ的效果。
如图:




也就是图片的上半部分显示昵称,昵称下面紧跟着聊天信息的效果。如果你还不了解这种效果的话,那么你打开你的手机QQ进入一个群看下就明白了。
注意:我使用的是环信2.0,不是3.0
 
1、更改昵称的位置
全局搜索找到EMChatViewBaseCell.h文件,在该文件中的layoutSubviews方法里面进行更改。




2、在layoutSubviews更改完成之后,还是在该文件中,然后在setMessageModel方法里面进行一个更改。代码如下图显示。




3、这样昵称就显示出来了。如果是别人的信息(左侧),昵称在图片的右侧;自己发送的信息,昵称在图片的左侧。到目前位置,显示昵称及位置已经好了,但是问题出现了,聊天信息会遮住了昵称,那么就要往下看了。
4、找到EMChatViewCell.h文件,EMChatViewCell是继承于EMChatViewBaseCell的一个子类,这里主要是显示聊天信息的一个view。在这个文件里面进行聊天信息位置的设定即可。代码如下:
找到EMChatViewCell文件中的layoutSubviews方法,在这个里面进行设置即可。
将bubbleFrame.origin.y = self.headImageView.frame.origin.y;
改成
bubbleFrame.origin.y = self.headImageView.frame.origin.y + 15;即可
这layoutSubviews方法里面有俩个地方要改。如下图显示





 
 如果上面更改成功了,那么就完成了,可以看看效果了。如图





 
 
  查看全部
使用环信即时聊天,将昵称和聊天信息显示样式更改成类似QQ的效果。
如图:
更改后的.png

也就是图片的上半部分显示昵称,昵称下面紧跟着聊天信息的效果。如果你还不了解这种效果的话,那么你打开你的手机QQ进入一个群看下就明白了。

注意:我使用的是环信2.0,不是3.0
 
1、更改昵称的位置
全局搜索找到EMChatViewBaseCell.h文件,在该文件中的layoutSubviews方法里面进行更改。

layoutSubviews.png

2、在layoutSubviews更改完成之后,还是在该文件中,然后在setMessageModel方法里面进行一个更改。代码如下图显示。
setmodel.png

3、这样昵称就显示出来了。如果是别人的信息(左侧),昵称在图片的右侧;自己发送的信息,昵称在图片的左侧。到目前位置,显示昵称及位置已经好了,但是问题出现了,聊天信息会遮住了昵称,那么就要往下看了。
4、找到EMChatViewCell.h文件,EMChatViewCell是继承于EMChatViewBaseCell的一个子类,这里主要是显示聊天信息的一个view。在这个文件里面进行聊天信息位置的设定即可。代码如下:
找到EMChatViewCell文件中的layoutSubviews方法,在这个里面进行设置即可。
将bubbleFrame.origin.y = self.headImageView.frame.origin.y;
改成
bubbleFrame.origin.y = self.headImageView.frame.origin.y + 15;即可
这layoutSubviews方法里面有俩个地方要改。如下图显示

viewset.png

 


 如果上面更改成功了,那么就完成了,可以看看效果了。如图

更改后的.png

 
 
 
9
评论

【原来配置环信apns就这么简单】内含各种问题点详讲 环信_iOS

donghai 发表了文章 • 43444 次浏览 • 2016-01-14 22:05 • 来自相关话题

 
配置环信apns推送消息的准备工作配置证书:
链接1:http://docs.easemob.com/doku.php?id=start:300iosclientintegration:10prepareforsdkimport 

工程中需要写的代码:
链接2:http://docs.easemob.com/doku.p ... 0apns
如果按照以上方法配置完以后,测试的时候,如果还是收不到apns推送消息的话,按照下面步骤进行排查。注 意:(app在后台静默3分钟以上或者杀掉app,长连接断开才会走apns推送,3分钟以内的话要想收到消息通知,需要实现本地通知,环信demo是实 现本地通知的方法在 MainViewController.m类  - (void)showNotificationWithMessage:(EMMessage *)message,这个方法是在接收消息的回调中被调用的。具体的请查看demo。还需要注意一点的是,看看自己是否设置了全局免打扰,就是说在某个时段不接收apns推送消息,一般新集成的是不会设置的,设置代码在上面第二个链接2中)另外还要注意的是请确保导出p12时使用的电脑和创建 CertificateSigningRequest.certSigningRequest文件的电脑是同一台,导出证书的时候要直接点击导出,不要点击下面的内容导出,确认申请的证书是否带有推送功能。

1.检查下你后台绑定的证书名称和你工程里面的名称是不是对应的 ,初始化appkey的方法 填写的证书名称 (如图)





2.看下devicetoken是否传给了SDK,然后在环信管理后台看下IM用户是否显示了证书名称,如果显示了,说明devicetoken传给SDK,绑定成功了。
// 将得到的deviceToken传给SDK (真机上获取,打印下deviceToken)
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    [[EaseMob sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
} (如图)










3.调用rest接口,查看下登录的用户,绑定的证书名称和devicetoken是不是正确。这里说下查看的方法。
  1)首先看下这个链接http://docs.easemob.com/doku.p ... users
 调用rest接口,需要你的appkey ,Client Id,Client Secret(到环信管理后台查看),获取  到token
 2)例子:
 curl -X POST
"https://a1.easemob.com/easemob-demo/chatdemoui/token"  '{"grant_type":"client_credentials","client_id":"YXA6wDs-  MARqEeSO0VcBzaqg11","client_secret":"YXA6JOMWlLap_YbI_ucz77j-4-mI0dd"}'
 这 个是环信的,改成自己的话,将“easemob-demo/chatdemoui” 换成自己appkey #号前后两  部分,"client_id"和"client_secret"后面的参数换成自己的Client Id与Client Secret对应  的参数,替换完成之后,复制粘贴到终端上,点击回车运行,如果没有出错会获取  到"access_token"后面的参数。
 3)然后调用链接里面的 给IM用户的添加好友的接口
 例 子:curl -X POST -H "Authorization: Bearer YWMtP_8IisA-EeK-  a5cNq4Jt3QAAAT7fI10IbPuKdRxUTjA9CNiZMnQIgk0LEU2"
'https://a1.easemob.com/easemob-demo/chatdemoui/users/jliu/contacts/users/yantao'
 YWMtP_8IisA- EeK-a5cNq4Jt3QAAAT7fI10IbPuKdRxUTjA9CNiZMnQIgk0LEU2这个参数换成自己获  取到的"access_token"后面的参数,‘easemob-demo/chatdemoui’换成自己的  appkey,‘jliu’和 ‘yantao’替换成自己的环信 ID,‘yantao’这个环信ID一定要是登录状  态的,只有在登录状态才会获取到他绑定的证书名称和devicetoken。替换完成之后,复制粘贴  到 终端上,点击回车,正确的话,会从得到的信息中看到"notifier_name"和"device_token"这  两个参数,就是证书名称和 devicetoken,检查下是否正确。

4.测试推送证书的时候,首先登录两个环信ID(其中一个账号需要真机登录),相互收发消息,如果没有 问题的话,那么将真机上的app直接杀掉(双击 home键,找到对应的app杀掉),然后给之前真机登录的环信ID发消息,如果一切都正常的话,那么会收到apns推送消息,通知栏会有提示。

5. 如果还是收不到推送的话,可以将p12证书,证书密码,devicetoken,还有是什么环境的证书,这些信息发给环信的技术支持,帮着测试下证书。一般收 不到推送,都是证书的问题,需要重新配置。(如果是生产环境的证书,需要你的app上传到AppStore或者ad hoc打包,才能测试。) 查看全部
 
配置环信apns推送消息的准备工作配置证书:
链接1:http://docs.easemob.com/doku.php?id=start:300iosclientintegration:10prepareforsdkimport 

工程中需要写的代码:
链接2:http://docs.easemob.com/doku.p ... 0apns

如果按照以上方法配置完以后,测试的时候,如果还是收不到apns推送消息的话,按照下面步骤进行排查。注 意:(app在后台静默3分钟以上或者杀掉app,长连接断开才会走apns推送,3分钟以内的话要想收到消息通知,需要实现本地通知,环信demo是实 现本地通知的方法在 MainViewController.m类  - (void)showNotificationWithMessage:(EMMessage *)message,这个方法是在接收消息的回调中被调用的。具体的请查看demo。还需要注意一点的是,看看自己是否设置了全局免打扰,就是说在某个时段不接收apns推送消息,一般新集成的是不会设置的,设置代码在上面第二个链接2中)另外还要注意的是请确保导出p12时使用的电脑和创建 CertificateSigningRequest.certSigningRequest文件的电脑是同一台,导出证书的时候要直接点击导出,不要点击下面的内容导出,确认申请的证书是否带有推送功能。

1.检查下你后台绑定的证书名称和你工程里面的名称是不是对应的 ,初始化appkey的方法 填写的证书名称 (如图)

1.png


2.看下devicetoken是否传给了SDK,然后在环信管理后台看下IM用户是否显示了证书名称,如果显示了,说明devicetoken传给SDK,绑定成功了。
// 将得到的deviceToken传给SDK (真机上获取,打印下deviceToken)
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    [[EaseMob sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
} (如图)
3.png


2.png


3.调用rest接口,查看下登录的用户,绑定的证书名称和devicetoken是不是正确。这里说下查看的方法。
  1)首先看下这个链接http://docs.easemob.com/doku.p ... users
 调用rest接口,需要你的appkey ,Client Id,Client Secret(到环信管理后台查看),获取  到token
 2)例子:
 curl -X POST
"https://a1.easemob.com/easemob-demo/chatdemoui/token"  '{"grant_type":"client_credentials","client_id":"YXA6wDs-  MARqEeSO0VcBzaqg11","client_secret":"YXA6JOMWlLap_YbI_ucz77j-4-mI0dd"}'
 这 个是环信的,改成自己的话,将“easemob-demo/chatdemoui” 换成自己appkey #号前后两  部分,"client_id"和"client_secret"后面的参数换成自己的Client Id与Client Secret对应  的参数,替换完成之后,复制粘贴到终端上,点击回车运行,如果没有出错会获取  到"access_token"后面的参数。
 3)然后调用链接里面的 给IM用户的添加好友的接口
 例 子:curl -X POST -H "Authorization: Bearer YWMtP_8IisA-EeK-  a5cNq4Jt3QAAAT7fI10IbPuKdRxUTjA9CNiZMnQIgk0LEU2"
'https://a1.easemob.com/easemob-demo/chatdemoui/users/jliu/contacts/users/yantao'
 YWMtP_8IisA- EeK-a5cNq4Jt3QAAAT7fI10IbPuKdRxUTjA9CNiZMnQIgk0LEU2这个参数换成自己获  取到的"access_token"后面的参数,‘easemob-demo/chatdemoui’换成自己的  appkey,‘jliu’和 ‘yantao’替换成自己的环信 ID,‘yantao’这个环信ID一定要是登录状  态的,只有在登录状态才会获取到他绑定的证书名称和devicetoken。替换完成之后,复制粘贴  到 终端上,点击回车,正确的话,会从得到的信息中看到"notifier_name"和"device_token"这  两个参数,就是证书名称和 devicetoken,检查下是否正确。

4.测试推送证书的时候,首先登录两个环信ID(其中一个账号需要真机登录),相互收发消息,如果没有 问题的话,那么将真机上的app直接杀掉(双击 home键,找到对应的app杀掉),然后给之前真机登录的环信ID发消息,如果一切都正常的话,那么会收到apns推送消息,通知栏会有提示。

5. 如果还是收不到推送的话,可以将p12证书,证书密码,devicetoken,还有是什么环境的证书,这些信息发给环信的技术支持,帮着测试下证书。一般收 不到推送,都是证书的问题,需要重新配置。(如果是生产环境的证书,需要你的app上传到AppStore或者ad hoc打包,才能测试。)


5
评论

集成环信3.0 处理UI上展示昵称 头像的方法 环信_iOS

donghai 发表了文章 • 21782 次浏览 • 2016-01-14 13:28 • 来自相关话题

 因为遇到了不少用户问到了这个问题,所以在这里总结一下。

首先明确一下,环信只是即时通讯的消息引擎。环信本身不提供用户体系,环信既不保存任何APP业务数据,也不保存任何APP的用户信息。

根据环信ID来绑定用户的昵称,头像,方便维护。 环信3.0 demo中,是用parse来管理昵称,头像的(parse是管理昵称,头像的一个三方库,将头像,昵称上传到parse服务器,在从parse服务器获取),从自己服务器获取的话就按照下面的方法参考一下吧。
1.  服务器维护昵称,头像的方案先看下这个链接: http://docs.easemob.com/im/490 ... kname

2. 从自己服务器获取到用户的昵称,头像后,会话列表类的替换,在EaseConversationCell.m类,- (void)setModel:(id<IConversationModel>)model中              [self.avatarView.imageView sd_setImageWithURL:[NSURL URLWithString:_model.avatarURLPath] placeholderImage:_model.avatarImage];   这个方法就是来展示头像的

3. 聊天类的替换,在EaseBaseMessageCell.m类,- (void)setModel:(id<IMessageModel>)model中      
if (model.isSender) {
        UIImage *placeholderImage = [UIImage imageNamed:@"123"];
        self.avatarView.image = placeholderImage;
    } else {
        if (model.avatarURLPath) {
            [self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
        } else {
            self.avatarView.image = model.avatarImage;
        }
    }
if (model.isSender) 我自己加的判断 区分发送者和接受者的头像(isSender判断是不是当前登录者),如果想在这个类中想要获取到对方的环信ID,那么引入 #import <EMMessage.h>头文件,    EMMessage *message = model.message;   NSString *username = message.from;就可以获取到了,然后自己在根据环信ID自己做处理,展示。  如果是群聊的话,想要获取到群成员在群里发送消息人的环信ID,通过message.groupSenderName 获取到。

4.联系人类的替换,在EaseUserCell.m类,- (void)setModel:(id<IUserModel>)model中,self.titleLabel.text = _model.buddy.username;          [self.avatarView.imageView sd_setImageWithURL:[NSURL URLWithString:_model.avatarURLPath] placeholderImage:_model.avatarImage];  
 
具体的到3.0demo中 自己看一下吧, 仅仅给提供个参考。 查看全部
 因为遇到了不少用户问到了这个问题,所以在这里总结一下。

首先明确一下,环信只是即时通讯的消息引擎。环信本身不提供用户体系,环信既不保存任何APP业务数据,也不保存任何APP的用户信息。

根据环信ID来绑定用户的昵称,头像,方便维护。 环信3.0 demo中,是用parse来管理昵称,头像的(parse是管理昵称,头像的一个三方库,将头像,昵称上传到parse服务器,在从parse服务器获取),从自己服务器获取的话就按照下面的方法参考一下吧。

1.  服务器维护昵称,头像的方案先看下这个链接: http://docs.easemob.com/im/490 ... kname

2. 从自己服务器获取到用户的昵称,头像后,会话列表类的替换,在EaseConversationCell.m类,- (void)setModel:(id<IConversationModel>)model中              [self.avatarView.imageView sd_setImageWithURL:[NSURL URLWithString:_model.avatarURLPath] placeholderImage:_model.avatarImage];   这个方法就是来展示头像的

3. 聊天类的替换,在EaseBaseMessageCell.m类,- (void)setModel:(id<IMessageModel>)model中      
if (model.isSender) {
        UIImage *placeholderImage = [UIImage imageNamed:@"123"];
        self.avatarView.image = placeholderImage;
    } else {
        if (model.avatarURLPath) {
            [self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
        } else {
            self.avatarView.image = model.avatarImage;
        }
    }
if (model.isSender) 我自己加的判断 区分发送者和接受者的头像(isSender判断是不是当前登录者),如果想在这个类中想要获取到对方的环信ID,那么引入 #import <EMMessage.h>头文件,    EMMessage *message = model.message;   NSString *username = message.from;就可以获取到了,然后自己在根据环信ID自己做处理,展示。  如果是群聊的话,想要获取到群成员在群里发送消息人的环信ID,通过message.groupSenderName 获取到。

4.联系人类的替换,在EaseUserCell.m类,- (void)setModel:(id<IUserModel>)model中,self.titleLabel.text = _model.buddy.username;          [self.avatarView.imageView sd_setImageWithURL:[NSURL URLWithString:_model.avatarURLPath] placeholderImage:_model.avatarImage];  


 
具体的到3.0demo中 自己看一下吧, 仅仅给提供个参考。
4
评论

环信扩展消息的UI问题 扩展 环信_iOS

sj3023356 发表了文章 • 1240 次浏览 • 2016-01-13 10:09 • 来自相关话题

我在自定义一个扩展消息的时候,UI格式参照环信File的类型写的,可是UI却显示不出来,麻烦谁能帮我解决下。代码和截图如下
 
 
我在自定义一个扩展消息的时候,UI格式参照环信File的类型写的,可是UI却显示不出来,麻烦谁能帮我解决下。代码和截图如下
 
 
10
评论

看到很多人都急需一个ios简单集成 的demo ,这里就献丑上传一个 开源项目 iOS 环信_iOS

beyond 发表了文章 • 10122 次浏览 • 2016-01-06 11:34 • 来自相关话题

这个demo是按照视频http://v.youku.com/v_show/id_XMTQyMDc0NTQwMA==.html?from=y1.7-2  集成的,真的很简单...
 
   项目已经上传到附件,感兴趣的可以下载看看,有不明白的可以在下面跟帖
 
 
附件查看不到demo 的可以通过连接下载,下载地址:点击下载 查看全部
这个demo是按照视频http://v.youku.com/v_show/id_XMTQyMDc0NTQwMA==.html?from=y1.7-2  集成的,真的很简单...
 
   项目已经上传到附件,感兴趣的可以下载看看,有不明白的可以在下面跟帖
 
 
附件查看不到demo 的可以通过连接下载,下载地址:点击下载