iOS

iOS

1
评论

环信及时通信iOS SDK的一些看法和建议 环信 ios iOS

xiaohao01 发表了文章 • 55 次浏览 • 2017-01-16 11:46 • 来自相关话题

先说下环境:我使用的是HyphenateLite,3.2.3版本
 1,关于bitcode
终于看到3.2.3版本有说:sdk支持bitcode拉,赶紧下载组装。编译时提示:
libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
看来官方给出的sdk支持bitcode还真是仅限于“sdk”了,EaseUI里的libopencore-amrnb不是环信出品的,就不管了??可这对开发者来说有什么用呢?我们需要sdk提供的全部组件都支持bicode才行呢!!!
另外:跟iOS SDK客服沟通了下,似乎没有搞明白开启bitcode时什么意思。
强调一遍:必须在TARGET中设置bitcode为YES,然后真机运行,真机运行!!!!
麻烦官方再仔细检查一遍给我们开发者一个真正能用的bitcode版本!!!
 
2,关于文档
这次3.2.3说使用了动态framework,嗯,对官方的这种与时俱进赞一个。但你们能仔细看看给的文档吗:
注: 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交
然后呢?如何操作?能再简洁一点吗?
熟悉开发的肯定都知道用lipo操作,但是刚入门的是还需要查询的呀。能直接说下怎么操作岂不是更好!
 
3,一些建议
1,做SDK不像平常开发个app,自己的一亩三分地想怎么搞就怎么搞,sdk是拿出来给大家用的,对象都是开发者,需要开发sdk的同学本身就非常精通。一个建议,对于暴漏的.h文件最好都引用:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>//如何有UI
 
2,并且文档什么的要尽量细化。看到官方推出了不少视频的开发文档,这个虽然很好,降低了门槛,可是sdk总是在升级的在变动的,视频的内容往往发出来不久就落后于实际的代码了。建议多些文字文档,重要步骤尽量详细,文字能快速传达信息,没人有希望集成个sdk都要花费很多时间。
 
以上是我个人的浅见,不是纯粹是发牢骚,大家都是开发者,都希望作品精益求精,希望共同进步!
 
匆促中难免有错字,望理解!谢谢!
  查看全部
先说下环境:我使用的是HyphenateLite,3.2.3版本
 1,关于bitcode
终于看到3.2.3版本有说:sdk支持bitcode拉,赶紧下载组装。编译时提示:
libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
看来官方给出的sdk支持bitcode还真是仅限于“sdk”了,EaseUI里的libopencore-amrnb不是环信出品的,就不管了??可这对开发者来说有什么用呢?我们需要sdk提供的全部组件都支持bicode才行呢!!!
另外:跟iOS SDK客服沟通了下,似乎没有搞明白开启bitcode时什么意思。
强调一遍:必须在TARGET中设置bitcode为YES,然后真机运行,真机运行!!!!
麻烦官方再仔细检查一遍给我们开发者一个真正能用的bitcode版本!!!
 
2,关于文档
这次3.2.3说使用了动态framework,嗯,对官方的这种与时俱进赞一个。但你们能仔细看看给的文档吗:

注: 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交


然后呢?如何操作?能再简洁一点吗?
熟悉开发的肯定都知道用lipo操作,但是刚入门的是还需要查询的呀。能直接说下怎么操作岂不是更好!
 
3,一些建议
1,做SDK不像平常开发个app,自己的一亩三分地想怎么搞就怎么搞,sdk是拿出来给大家用的,对象都是开发者,需要开发sdk的同学本身就非常精通。一个建议,对于暴漏的.h文件最好都引用:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>//如何有UI
 
2,并且文档什么的要尽量细化。看到官方推出了不少视频的开发文档,这个虽然很好,降低了门槛,可是sdk总是在升级的在变动的,视频的内容往往发出来不久就落后于实际的代码了。建议多些文字文档,重要步骤尽量详细,文字能快速传达信息,没人有希望集成个sdk都要花费很多时间。
 
以上是我个人的浅见,不是纯粹是发牢骚,大家都是开发者,都希望作品精益求精,希望共同进步!
 
匆促中难免有错字,望理解!谢谢!
 
1
最佳

iOS动态库sdk上架问题? 动态库 iOS

beyond 回复了问题 • 2 人关注 • 175 次浏览 • 2017-01-10 17:32 • 来自相关话题

0
评论

环信动态库sdk上架问题解决方案 iOS 动态库

beyond 发表了文章 • 92 次浏览 • 2017-01-10 17:28 • 来自相关话题

环信发布了动态库sdk:




但是也会有一些问题,这里讲下关于这个上架的问题。

1.先把Hyphenate.framework放到桌面上;

2.终端位置cd到桌面;

3.运行:lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7  

4.运行后没有输出提示,直接运行下一个命令:lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64                                                                                                                                                                

5.运行后一样没有输出提示,直接运行下一个命令:lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate                                                                                                                                                                            

6.运行后一样没有输出提示,直接运行最后一个命令:mv Hyphenate Hyphenate.framework/




得到的Hyphenate.framework就是最后的结果,拖进工程,编译打包上架。
 
作者:环信ios工程师张磊 查看全部
环信发布了动态库sdk:
2639170-be3d6bfe875d544c.png

但是也会有一些问题,这里讲下关于这个上架的问题。

1.先把Hyphenate.framework放到桌面上;

2.终端位置cd到桌面;

3.运行:lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7  

4.运行后没有输出提示,直接运行下一个命令:lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64                                                                                                                                                                

5.运行后一样没有输出提示,直接运行下一个命令:lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate                                                                                                                                                                            

6.运行后一样没有输出提示,直接运行最后一个命令:mv Hyphenate Hyphenate.framework/
2639170-6aa66fdee8102250.png

得到的Hyphenate.framework就是最后的结果,拖进工程,编译打包上架。
 
作者:环信ios工程师张磊
2
回复

时间戳问题 iOS

zl 回复了问题 • 2 人关注 • 98 次浏览 • 2017-01-06 18:11 • 来自相关话题

0
评论

Android ios V3.2.3 SDK 已发布,SDK十余项更新,更加简洁易用,新增广告红包 产品快递 Android iOS

产品更新 发表了文章 • 301 次浏览 • 2016-12-30 11:51 • 来自相关话题

Android​ V3.2.3 2016-12-29
新功能/优化:
sdk提供aar及gradle方式集成,具体方法查看gradle方式导入aar增加离线推送设置的相关接口,具体方法可查看EMPushManager API文档为了使sdk更简洁易用,修改以及过时了一些api,具体修改查看3.2.3api修改,另外过时的api后续3-5个版本会进行删除优化loadAllConversationsFromDB()方法,从联表查询改为从两个表分别查询,解决在个别乐视手机上执行很慢的问题优化登录模块,减少登录失败的概率鉴于市面上的手机基本都是armeabi-v7a及以上的架构,从这版本开始不再提供普通的armeabi架构的so,减少打包时app的体积

红包相关:
新增:
小额随机红包增加广告红包(需要使用请单独联系商务)商户后台增加广告红包配置、统计功能商户后台增加修改密码功能

优化:
绑卡后的用户验证四要素改为验证二要素发红包等页面增加点击空白区域收回键盘的功能群成员列表索引增加常用姓氏以及汉字的支持

修复bug:
红包详情页领取人列表展示不全华为P8手机密码框无法获取焦点部分银行卡号输入正确,提示银行卡号不正确红包祝福语有换行符显示不正确修复Emoji表情显示乱码修复商户自主配置红包最低限额错误修复零钱明细显示顺序错误问题
 
iOS​ V3.2.3 2016-12-29
新功能/优化:
新增:实时1v1音视频,设置了对方不在线发送离线推送的前提下,当对方不在线时返回回调,以便于用户自定义离线消息推送更新:SDK支持bitcode更新:SDK使用动态库为了使SDK更简洁易用,过时的API会在后续3~5个版本进行删除

红包相关:
新增:
小额随机红包商户后台增加修改密码功能

优化:
绑卡后的用户验证四要素改为验证二要素iOS和Android两端UI展示一致性支付流程的优化SDK注册流程去掉XIB集成过程的参数检查风险策略

修复:
SDKToken注册失败的问题发红包缺少参数的问题修复Emoji表情显示乱码修复支付密码可能误报出错修复商户自主配置红包最低限额错误修复零钱明细显示顺序错误问题修改抢红包流程为依赖后端数据修复支行信息返回为空时的文案
 
 版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载 查看全部
7750.jpg_wh860_.jpg

Android​ V3.2.3 2016-12-29
新功能/优化:
  • sdk提供aar及gradle方式集成,具体方法查看gradle方式导入aar
  • 增加离线推送设置的相关接口,具体方法可查看EMPushManager API文档
  • 为了使sdk更简洁易用,修改以及过时了一些api,具体修改查看3.2.3api修改,另外过时的api后续3-5个版本会进行删除
  • 优化loadAllConversationsFromDB()方法,从联表查询改为从两个表分别查询,解决在个别乐视手机上执行很慢的问题
  • 优化登录模块,减少登录失败的概率
  • 鉴于市面上的手机基本都是armeabi-v7a及以上的架构,从这版本开始不再提供普通的armeabi架构的so,减少打包时app的体积


红包相关:
新增:

  • 小额随机红包
  • 增加广告红包(需要使用请单独联系商务)
  • 商户后台增加广告红包配置、统计功能
  • 商户后台增加修改密码功能


优化:
  • 绑卡后的用户验证四要素改为验证二要素
  • 发红包等页面增加点击空白区域收回键盘的功能
  • 群成员列表索引增加常用姓氏以及汉字的支持


修复bug:
  • 红包详情页领取人列表展示不全
  • 华为P8手机密码框无法获取焦点
  • 部分银行卡号输入正确,提示银行卡号不正确
  • 红包祝福语有换行符显示不正确
  • 修复Emoji表情显示乱码
  • 修复商户自主配置红包最低限额错误
  • 修复零钱明细显示顺序错误问题

 
iOS​ V3.2.3 2016-12-29
新功能/优化:
  • 新增:实时1v1音视频,设置了对方不在线发送离线推送的前提下,当对方不在线时返回回调,以便于用户自定义离线消息推送
  • 更新:SDK支持bitcode
  • 更新:SDK使用动态库
  • 为了使SDK更简洁易用,过时的API会在后续3~5个版本进行删除


红包相关:
新增:

  • 小额随机红包
  • 商户后台增加修改密码功能


优化:
  • 绑卡后的用户验证四要素改为验证二要素
  • iOS和Android两端UI展示一致性
  • 支付流程的优化
  • SDK注册流程
  • 去掉XIB
  • 集成过程的参数检查
  • 风险策略


修复:
  • SDKToken注册失败的问题
  • 发红包缺少参数的问题
  • 修复Emoji表情显示乱码
  • 修复支付密码可能误报出错
  • 修复商户自主配置红包最低限额错误
  • 修复零钱明细显示顺序错误问题
  • 修改抢红包流程为依赖后端数据
  • 修复支行信息返回为空时的文案

 
 版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载
0
评论

ios V2.3.0 SDK 已发布,增加HttpsOnly参数,允许用户配置 iOS 产品快递

产品更新 发表了文章 • 71 次浏览 • 2016-12-28 14:46 • 来自相关话题

ios V2.3.0 2016-12-28




新功能/改进:
修复2.2.9升级覆盖2.1.5至2.2.3版本,可能无法登录的bug

增加HttpsOnly参数,允许用户配置,默认设置为YES

SDK支持bitcode
版本历史:更新日志
下载地址:SDK下载 查看全部
ios V2.3.0 2016-12-28
1494.jpg_wh860_.jpg

新功能/改进:

修复2.2.9升级覆盖2.1.5至2.2.3版本,可能无法登录的bug

增加HttpsOnly参数,允许用户配置,默认设置为YES

SDK支持bitcode


版本历史:更新日志
下载地址:SDK下载
0
评论

IOS 2.2.9设置https only遇到无法登录的解决方案 ios_2.X iOS 环信集成指南

beyond 发表了文章 • 352 次浏览 • 2016-12-28 14:34 • 来自相关话题

分享一个自己遇到的在环信IOS2.X中设置https登录不上的解决方案。
 
SDK的老版本(版本范围为SDK2.1.5-2.2.3)中存在默认不使用https的设置。部分使用了范围内SDK版本的用户在升级到最新的SDK2.2.9时,设置https only的选项后会出现用户无法正常登录的问题。

这个问题可以升级到SDK2.2.9及以上版本,在SDK初始化时添加otherConfig:@{kSDKConfigUseHttps:@YES}的设置,具体的代码实现如下:[[EaseMob sharedInstance] registerSDKWithAppKey:@"easemob-demo#chatdemoui" apnsCertName:@"chatdemoui" otherConfig:@{kSDKConfigUseHttps:@YES}];
上记代码仅未示例,具体在使用时需要将appkey等信息替换为自己的对应信息就可以了。
 
集成过程中遇到问题欢迎在IMGeek社区发帖咨询。 查看全部
分享一个自己遇到的在环信IOS2.X中设置https登录不上的解决方案。
 
SDK的老版本(版本范围为SDK2.1.5-2.2.3)中存在默认不使用https的设置。部分使用了范围内SDK版本的用户在升级到最新的SDK2.2.9时,设置https only的选项后会出现用户无法正常登录的问题。

这个问题可以升级到SDK2.2.9及以上版本,在SDK初始化时添加otherConfig:@{kSDKConfigUseHttps:@YES}的设置,具体的代码实现如下:
[[EaseMob sharedInstance] registerSDKWithAppKey:@"easemob-demo#chatdemoui" apnsCertName:@"chatdemoui" otherConfig:@{kSDKConfigUseHttps:@YES}];

上记代码仅未示例,具体在使用时需要将appkey等信息替换为自己的对应信息就可以了。
 
集成过程中遇到问题欢迎在IMGeek社区发帖咨询。
2
回复

"本期环信直播课堂将由环信IOS工程师fudh给大家详细讲解集成3.0 SDK实时音视频"demo你放在那里? iOS 环信 音视频

yu 回复了问题 • 2 人关注 • 165 次浏览 • 2016-12-27 13:31 • 来自相关话题

1
最佳

环信服务端集成,如何集成? iOS Android webim

环信沈冲 回复了问题 • 2 人关注 • 289 次浏览 • 2016-12-26 14:47 • 来自相关话题

1
回复

集成3.2.2编译Success,但却有40+的警告 iOS 环信

donghai 回复了问题 • 2 人关注 • 321 次浏览 • 2016-12-21 17:45 • 来自相关话题

1
回复

环信音视频问题 音视频 iOS 环信_iOS

环信沈冲 回复了问题 • 2 人关注 • 162 次浏览 • 2016-12-20 11:33 • 来自相关话题

3
回复

使用EMConversation的updateConversationExtToDB并没有把ext属性更新到本地数据库中 iOS 环信iOS

dujiepeng 回复了问题 • 4 人关注 • 782 次浏览 • 2016-12-19 15:29 • 来自相关话题

1
回复

集成音视频 跟视图的问题 音视频相关问题 iOS 环信_iOS

donghai 回复了问题 • 2 人关注 • 157 次浏览 • 2016-12-09 14:29 • 来自相关话题

1
评论

ios V3.2.2 SDK 已发布,增加是否删除会话选项 ios_3.x iOS 产品快递

产品更新 发表了文章 • 229 次浏览 • 2016-12-08 19:10 • 来自相关话题

ios ​V3.2.2 2016-12-08





 
新功能/优化:
 

SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题

版本历史:更新日志 
下载地址:SDK下载 查看全部
ios ​V3.2.2 2016-12-08

2597.jpg_wh860_.jpg

 
新功能/优化:
 


SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题


版本历史:更新日志 
下载地址:SDK下载
0
评论

ios V2.2.9 SDK 已发布,SDK满足apple ATS的要求 ios_2.X iOS 产品快递

产品更新 发表了文章 • 235 次浏览 • 2016-12-08 18:54 • 来自相关话题

ios 版本 V3.2.2 2016-12-08





 
新功能/优化:

SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题

版本历史:更新日志 
下载地址:SDK下载 查看全部
ios 版本 V3.2.2 2016-12-08
7282.jpg_wh860_.jpg


 
新功能/优化:


SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题


版本历史:更新日志 
下载地址:SDK下载
0
评论

ios V3.2.1 SDK 已发布,聊天室列表支持分页获取 iOS 产品快递

产品更新 发表了文章 • 234 次浏览 • 2016-12-07 11:33 • 来自相关话题

ios V3.2.1 2016-11-12
 





新功能/优化:
 
聊天室列表支持分页获取

EMOption中usingHttps默认为YES

bug fix:
修复Lite版本SDK编译warning的问题
 
版本历史:更新日志  
下载地址:SDK下载 查看全部
ios V3.2.1 2016-11-12
 
3099.jpg_wh860_.jpg


新功能/优化:
 

聊天室列表支持分页获取

EMOption中usingHttps默认为YES



bug fix:

修复Lite版本SDK编译warning的问题


 
版本历史:更新日志  
下载地址:SDK下载
7
回复

fudh环信ios工程师 能不能把你集成音视频的demo发给我1217212724 或者给一个连接 iOS 环信 音视频

马二 回复了问题 • 8 人关注 • 1025 次浏览 • 2016-11-26 18:36 • 来自相关话题

3
回复

ios 发送相册图片 问什么相册里 “ 我的照片流里的照片” 发送不了 相册 图片发送 iOS

zhangyb 回复了问题 • 3 人关注 • 559 次浏览 • 2016-11-25 09:25 • 来自相关话题

11
回复

在集成环信的UI的出现_OBJC_CLASS_xxx错误与大家共勉,有没有遇到相似的错误,见下面图片 iOS 环信_iOS

环信沈冲 回复了问题 • 6 人关注 • 1545 次浏览 • 2016-11-21 14:15 • 来自相关话题

5
最佳

会话列表接受消息时没反应 要下拉刷新才出来 怎么解决 消息接受 iOS 环信_iOS

一等到天幻 回复了问题 • 4 人关注 • 1432 次浏览 • 2016-11-20 11:16 • 来自相关话题

1
回复

iOS如何取消键盘弹出 视图上移的效果(环信自定义的键盘) iOS

环信沈冲 回复了问题 • 2 人关注 • 212 次浏览 • 2016-11-12 12:27 • 来自相关话题

4
回复

发起语音聊天时,对方收不到。 环信_iOS iOS iOS 语音通话

zl 回复了问题 • 2 人关注 • 317 次浏览 • 2016-11-04 17:36 • 来自相关话题

2
最佳

ios如何添加Emoji哇 SDK emoji 环信_iOS iOS EaseUI

beyond 回复了问题 • 2 人关注 • 236 次浏览 • 2016-11-03 18:58 • 来自相关话题

1
回复

Xcode 8 下真机发送位置无反应 位置共享 定位 环信_iOS iOS EaseUI

zl 回复了问题 • 2 人关注 • 216 次浏览 • 2016-11-03 18:08 • 来自相关话题

条新动态, 点击查看
zl

zl 回答了问题 • 2015-12-03 17:00 • 19 个回复 不感兴趣

iOS EaseMessageCell.h:48:44: Property has a previous declaration

赞同来自:

emoji的  表情。添加下相关库、
emoji的  表情。添加下相关库、
http://docs.easemob.com/doku.php?id=start:300iosclientintegration:60chat看下这个文档,发送消息的方法。
http://docs.easemob.com/doku.php?id=start:300iosclientintegration:60chat看下这个文档,发送消息的方法。
这里看不出来啥问题,你可以开全局断电或者 badAccess检查器 查找错误在哪儿 。。。。。。
这里看不出来啥问题,你可以开全局断电或者 badAccess检查器 查找错误在哪儿 。。。。。。
在viewWillAppear中设置隐藏,如果是自定义的,可以将高度设为0。
在viewWillAppear中设置隐藏,如果是自定义的,可以将高度设为0。
在EaseBaseMessageCell.m中的下面方法中修改:
- (void)setModel:(id<IMessageModel>)model
{
    [super setModel:model];
    
    if (model.... 显示全部 »
在EaseBaseMessageCell.m中的下面方法中修改:
- (void)setModel:(id<IMessageModel>)model
{
    [super setModel:model];
    
    if (model.avatarURLPath) {
        [self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
    } else {
        self.avatarView.image = model.avatarImage;
    }
    _nameLabel.text = model.nickname;
这个是从parse拿到图片的,不是自己设置的。
这个是从parse拿到图片的,不是自己设置的。
EaseConversationCell.m中的setModel方法中设置self.titleLabel.text,就是会话列表的昵称。
EaseConversationCell.m中的setModel方法中设置self.titleLabel.text,就是会话列表的昵称。
获取会话的最后一条消息,conversation.latestmessage.ext 然后获取出来之后去显示吧
 
获取会话的最后一条消息,conversation.latestmessage.ext 然后获取出来之后去显示吧
 
参考demo中chatviewcontroller这个方法:
//通过会话管理者获取已收发消息
    [self tableViewDidTriggerHeaderRefresh];
参考demo中chatviewcontroller这个方法:
//通过会话管理者获取已收发消息
    [self tableViewDidTriggerHeaderRefresh];
根控制器中这个回调方法没实现吧:/*!
 @method
 @brief 实时通话状态发生变化时的回调
 @param callSession 实时通话的实例
 @param reason   变化原因
 @param error    错误信息
 */
- ... 显示全部 »
根控制器中这个回调方法没实现吧:/*!
 @method
 @brief 实时通话状态发生变化时的回调
 @param callSession 实时通话的实例
 @param reason   变化原因
 @param error    错误信息
 */
- (void)callSessionStatusChanged:(EMCallSession *)callSession
                    changeReason:(EMCallStatusChangedReason)reason
                           error:(EMError *)error;
参考demo中怎么设置的,还需要注册代理:
[[EaseMob sharedInstance].callManager removeDelegate:self];
    // 注册为Call的Delegate
    [[EaseMob sharedInstance].callManager addDelegate:self delegateQueue:nil];
发送方看下didsendmessage回调方法中,message.ext有没有设置的值。
发送方看下didsendmessage回调方法中,message.ext有没有设置的值。
zl

zl 回答了问题 • 2016-02-22 17:46 • 4 个回复 不感兴趣

好友申请和入群申请

赞同来自:

是啊 。这个是回调,代理传值。sdk内部接收到好友请求,然后返回给你,就是通过这个方法接收。
是啊 。这个是回调,代理传值。sdk内部接收到好友请求,然后返回给你,就是通过这个方法接收。
sdk.a包括实时语音通话和实时视频,里面有lite.a里的功能。 lite.a有基本聊天功能。 这两个留一个就行了。不用实时语音通话和视频,就用lite.a就可以了
sdk.a包括实时语音通话和实时视频,里面有lite.a里的功能。 lite.a有基本聊天功能。 这两个留一个就行了。不用实时语音通话和视频,就用lite.a就可以了
zl

zl 回答了问题 • 2016-03-23 11:53 • 3 个回复 不感兴趣

与支付宝冲突

赞同来自:

other linker 设置下 -force_load + 支付宝的库的路径,并放在最前面。这里不需要再设置环信sdk。
other linker 设置下 -force_load + 支付宝的库的路径,并放在最前面。这里不需要再设置环信sdk。
环信沈冲

环信沈冲 回答了问题 • 2016-04-07 18:52 • 1 个回复 不感兴趣

iOS集成环信Demo 3.0在不同机型上运行问题

赞同来自:

在3.0demo中找到FixFopen.c导入项目中,并在pch文件中的首尾加上__OBJC__和endif
在3.0demo中找到FixFopen.c导入项目中,并在pch文件中的首尾加上__OBJC__和endif
donghai

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

求一份 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有
lizilong

lizilong 回答了问题 • 2016-05-16 14:26 • 2 个回复 不感兴趣

iOS集成parse的报错,大神请进

赞同来自:

应该是缺少这两个依赖
Accounts.framework
Social.framework
 
应该是缺少这两个依赖
Accounts.framework
Social.framework
 
zhangyb

zhangyb 回答了问题 • 2016-06-20 19:37 • 1 个回复 不感兴趣

ios 8, ipV6, 环信demo,无法登录,无法用了

赞同来自:

iOS9.2以下,不支持ipv6
iOS9.2以下,不支持ipv6
feynmanren

feynmanren 回答了问题 • 2016-06-29 15:16 • 1 个回复 不感兴趣

环信3.0,登录admin帐户失败!

赞同来自:

自己回答吧, 需要自己手动创建admin账户。
自己回答吧, 需要自己手动创建admin账户。
mazhihua

mazhihua 回答了问题 • 2016-08-09 19:28 • 2 个回复 不感兴趣

iOS 角标问题 app 活跃状态 和 被杀死 情况下

赞同来自:

您好,这个角标是服务器设置的,改不了的,因为服务器推送的离线消息是从0 开始计算的,所以从1 开始重新累加了
您好,这个角标是服务器设置的,改不了的,因为服务器推送的离线消息是从0 开始计算的,所以从1 开始重新累加了
[[EaseSDKHelper shareHelper] hyphenateApplication:application
                    didFinishLaunchingWithOptions:launchOptions
    ... 显示全部 »
[[EaseSDKHelper shareHelper] hyphenateApplication:application
                    didFinishLaunchingWithOptions:launchOptions
                                           appkey:appkey
                                     apnsCertName:apnsCertName
                                      otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];
Swift

Swift 回答了问题 • 2016-11-03 16:46 • 2 个回复 不感兴趣

ios如何添加Emoji哇

赞同来自:

已解决EaseMessageViewController在的viewdidload方法的
第一行添加:[self setupEmotion];
最后一行添加: EaseEmotionManager *manager= [[EaseEmotionManager ... 显示全部 »
已解决EaseMessageViewController在的viewdidload方法的
第一行添加:[self setupEmotion];
最后一行添加: EaseEmotionManager *manager= [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:[EaseEmoji allEmoji]]; [self.faceView setEmotionManagers:@[manager]];
然后神奇的出现了emoji
环信沈冲

环信沈冲 回答了问题 • 2016-12-26 14:32 • 1 个回复 不感兴趣

环信服务端集成,如何集成?

赞同来自:

客户端直接集成SDK即可,服务端可以根据自己需求调用相应的rest接口集成
客户端直接集成SDK即可,服务端可以根据自己需求调用相应的rest接口集成
beyond

beyond 回答了问题 • 2017-01-10 17:32 • 1 个回复 不感兴趣

iOS动态库sdk上架问题?

赞同来自:

你好,环信在V3.2.3 2016-12-29版本支持了动态SDK
可以参考环信动态库sdk上架问题解决方案 http://www.imgeek.org/article/825308639
你好,环信在V3.2.3 2016-12-29版本支持了动态SDK
可以参考环信动态库sdk上架问题解决方案 http://www.imgeek.org/article/825308639
1
最佳

iOS动态库sdk上架问题? 动态库 iOS

回复

beyond 回复了问题 • 2 人关注 • 175 次浏览 • 2017-01-10 17:32 • 来自相关话题

2
回复

时间戳问题 iOS

回复

zl 回复了问题 • 2 人关注 • 98 次浏览 • 2017-01-06 18:11 • 来自相关话题

2
回复

"本期环信直播课堂将由环信IOS工程师fudh给大家详细讲解集成3.0 SDK实时音视频"demo你放在那里? iOS 环信 音视频

回复

yu 回复了问题 • 2 人关注 • 165 次浏览 • 2016-12-27 13:31 • 来自相关话题

1
最佳

环信服务端集成,如何集成? iOS Android webim

回复

环信沈冲 回复了问题 • 2 人关注 • 289 次浏览 • 2016-12-26 14:47 • 来自相关话题

1
回复

集成3.2.2编译Success,但却有40+的警告 iOS 环信

回复

donghai 回复了问题 • 2 人关注 • 321 次浏览 • 2016-12-21 17:45 • 来自相关话题

1
回复

环信音视频问题 音视频 iOS 环信_iOS

回复

环信沈冲 回复了问题 • 2 人关注 • 162 次浏览 • 2016-12-20 11:33 • 来自相关话题

3
回复

使用EMConversation的updateConversationExtToDB并没有把ext属性更新到本地数据库中 iOS 环信iOS

回复

dujiepeng 回复了问题 • 4 人关注 • 782 次浏览 • 2016-12-19 15:29 • 来自相关话题

1
回复

集成音视频 跟视图的问题 音视频相关问题 iOS 环信_iOS

回复

donghai 回复了问题 • 2 人关注 • 157 次浏览 • 2016-12-09 14:29 • 来自相关话题

7
回复

fudh环信ios工程师 能不能把你集成音视频的demo发给我1217212724 或者给一个连接 iOS 环信 音视频

回复

马二 回复了问题 • 8 人关注 • 1025 次浏览 • 2016-11-26 18:36 • 来自相关话题

3
回复

ios 发送相册图片 问什么相册里 “ 我的照片流里的照片” 发送不了 相册 图片发送 iOS

回复

zhangyb 回复了问题 • 3 人关注 • 559 次浏览 • 2016-11-25 09:25 • 来自相关话题

11
回复

在集成环信的UI的出现_OBJC_CLASS_xxx错误与大家共勉,有没有遇到相似的错误,见下面图片 iOS 环信_iOS

回复

环信沈冲 回复了问题 • 6 人关注 • 1545 次浏览 • 2016-11-21 14:15 • 来自相关话题

5
最佳

会话列表接受消息时没反应 要下拉刷新才出来 怎么解决 消息接受 iOS 环信_iOS

回复

一等到天幻 回复了问题 • 4 人关注 • 1432 次浏览 • 2016-11-20 11:16 • 来自相关话题

1
回复

iOS如何取消键盘弹出 视图上移的效果(环信自定义的键盘) iOS

回复

环信沈冲 回复了问题 • 2 人关注 • 212 次浏览 • 2016-11-12 12:27 • 来自相关话题

4
回复

发起语音聊天时,对方收不到。 环信_iOS iOS iOS 语音通话

回复

zl 回复了问题 • 2 人关注 • 317 次浏览 • 2016-11-04 17:36 • 来自相关话题

2
最佳

ios如何添加Emoji哇 SDK emoji 环信_iOS iOS EaseUI

回复

beyond 回复了问题 • 2 人关注 • 236 次浏览 • 2016-11-03 18:58 • 来自相关话题

1
回复

Xcode 8 下真机发送位置无反应 位置共享 定位 环信_iOS iOS EaseUI

回复

zl 回复了问题 • 2 人关注 • 216 次浏览 • 2016-11-03 18:08 • 来自相关话题

3
回复

iOS集成视频通话ffmpeg错误 iOS

回复

zl 回复了问题 • 3 人关注 • 265 次浏览 • 2016-10-31 17:54 • 来自相关话题

1
回复

创建群组 添加成员 没有成员 iOS iOS 环信

回复

环信沈冲 回复了问题 • 2 人关注 • 254 次浏览 • 2016-10-24 13:00 • 来自相关话题

2
回复

iOS音频通话挂断电话后会一直打印VoeClient_NetworkDisconnectederror:index is Overlow in iOS

回复

··· 回复了问题 • 2 人关注 • 212 次浏览 • 2016-10-24 09:33 • 来自相关话题

2
回复

IOS 官网demoV2 不能使用 iOS

回复

假想控| 回复了问题 • 2 人关注 • 237 次浏览 • 2016-10-18 15:49 • 来自相关话题

1
回复

请问下升级视频在哪边,没有找到视频资源 iOS 环信

回复

环信沈冲 回复了问题 • 2 人关注 • 237 次浏览 • 2016-10-12 19:13 • 来自相关话题

2
回复

ios 在线求问打包上架时出现问题 求问 环信上架 iOS

回复

江南孤鹜 回复了问题 • 3 人关注 • 299 次浏览 • 2016-10-12 16:07 • 来自相关话题

2
回复

iOS登录失败返回错误码200 登录失败 iOS

回复

lizg 回复了问题 • 2 人关注 • 270 次浏览 • 2016-10-10 18:38 • 来自相关话题

1
评论

环信及时通信iOS SDK的一些看法和建议 环信 ios iOS

xiaohao01 发表了文章 • 55 次浏览 • 2017-01-16 11:46 • 来自相关话题

先说下环境:我使用的是HyphenateLite,3.2.3版本
 1,关于bitcode
终于看到3.2.3版本有说:sdk支持bitcode拉,赶紧下载组装。编译时提示:
libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
看来官方给出的sdk支持bitcode还真是仅限于“sdk”了,EaseUI里的libopencore-amrnb不是环信出品的,就不管了??可这对开发者来说有什么用呢?我们需要sdk提供的全部组件都支持bicode才行呢!!!
另外:跟iOS SDK客服沟通了下,似乎没有搞明白开启bitcode时什么意思。
强调一遍:必须在TARGET中设置bitcode为YES,然后真机运行,真机运行!!!!
麻烦官方再仔细检查一遍给我们开发者一个真正能用的bitcode版本!!!
 
2,关于文档
这次3.2.3说使用了动态framework,嗯,对官方的这种与时俱进赞一个。但你们能仔细看看给的文档吗:
注: 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交
然后呢?如何操作?能再简洁一点吗?
熟悉开发的肯定都知道用lipo操作,但是刚入门的是还需要查询的呀。能直接说下怎么操作岂不是更好!
 
3,一些建议
1,做SDK不像平常开发个app,自己的一亩三分地想怎么搞就怎么搞,sdk是拿出来给大家用的,对象都是开发者,需要开发sdk的同学本身就非常精通。一个建议,对于暴漏的.h文件最好都引用:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>//如何有UI
 
2,并且文档什么的要尽量细化。看到官方推出了不少视频的开发文档,这个虽然很好,降低了门槛,可是sdk总是在升级的在变动的,视频的内容往往发出来不久就落后于实际的代码了。建议多些文字文档,重要步骤尽量详细,文字能快速传达信息,没人有希望集成个sdk都要花费很多时间。
 
以上是我个人的浅见,不是纯粹是发牢骚,大家都是开发者,都希望作品精益求精,希望共同进步!
 
匆促中难免有错字,望理解!谢谢!
  查看全部
先说下环境:我使用的是HyphenateLite,3.2.3版本
 1,关于bitcode
终于看到3.2.3版本有说:sdk支持bitcode拉,赶紧下载组装。编译时提示:
libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
看来官方给出的sdk支持bitcode还真是仅限于“sdk”了,EaseUI里的libopencore-amrnb不是环信出品的,就不管了??可这对开发者来说有什么用呢?我们需要sdk提供的全部组件都支持bicode才行呢!!!
另外:跟iOS SDK客服沟通了下,似乎没有搞明白开启bitcode时什么意思。
强调一遍:必须在TARGET中设置bitcode为YES,然后真机运行,真机运行!!!!
麻烦官方再仔细检查一遍给我们开发者一个真正能用的bitcode版本!!!
 
2,关于文档
这次3.2.3说使用了动态framework,嗯,对官方的这种与时俱进赞一个。但你们能仔细看看给的文档吗:

注: 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交


然后呢?如何操作?能再简洁一点吗?
熟悉开发的肯定都知道用lipo操作,但是刚入门的是还需要查询的呀。能直接说下怎么操作岂不是更好!
 
3,一些建议
1,做SDK不像平常开发个app,自己的一亩三分地想怎么搞就怎么搞,sdk是拿出来给大家用的,对象都是开发者,需要开发sdk的同学本身就非常精通。一个建议,对于暴漏的.h文件最好都引用:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>//如何有UI
 
2,并且文档什么的要尽量细化。看到官方推出了不少视频的开发文档,这个虽然很好,降低了门槛,可是sdk总是在升级的在变动的,视频的内容往往发出来不久就落后于实际的代码了。建议多些文字文档,重要步骤尽量详细,文字能快速传达信息,没人有希望集成个sdk都要花费很多时间。
 
以上是我个人的浅见,不是纯粹是发牢骚,大家都是开发者,都希望作品精益求精,希望共同进步!
 
匆促中难免有错字,望理解!谢谢!
 
0
评论

环信动态库sdk上架问题解决方案 iOS 动态库

beyond 发表了文章 • 92 次浏览 • 2017-01-10 17:28 • 来自相关话题

环信发布了动态库sdk:




但是也会有一些问题,这里讲下关于这个上架的问题。

1.先把Hyphenate.framework放到桌面上;

2.终端位置cd到桌面;

3.运行:lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7  

4.运行后没有输出提示,直接运行下一个命令:lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64                                                                                                                                                                

5.运行后一样没有输出提示,直接运行下一个命令:lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate                                                                                                                                                                            

6.运行后一样没有输出提示,直接运行最后一个命令:mv Hyphenate Hyphenate.framework/




得到的Hyphenate.framework就是最后的结果,拖进工程,编译打包上架。
 
作者:环信ios工程师张磊 查看全部
环信发布了动态库sdk:
2639170-be3d6bfe875d544c.png

但是也会有一些问题,这里讲下关于这个上架的问题。

1.先把Hyphenate.framework放到桌面上;

2.终端位置cd到桌面;

3.运行:lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7  

4.运行后没有输出提示,直接运行下一个命令:lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64                                                                                                                                                                

5.运行后一样没有输出提示,直接运行下一个命令:lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate                                                                                                                                                                            

6.运行后一样没有输出提示,直接运行最后一个命令:mv Hyphenate Hyphenate.framework/
2639170-6aa66fdee8102250.png

得到的Hyphenate.framework就是最后的结果,拖进工程,编译打包上架。
 
作者:环信ios工程师张磊
0
评论

Android ios V3.2.3 SDK 已发布,SDK十余项更新,更加简洁易用,新增广告红包 产品快递 Android iOS

产品更新 发表了文章 • 301 次浏览 • 2016-12-30 11:51 • 来自相关话题

Android​ V3.2.3 2016-12-29
新功能/优化:
sdk提供aar及gradle方式集成,具体方法查看gradle方式导入aar增加离线推送设置的相关接口,具体方法可查看EMPushManager API文档为了使sdk更简洁易用,修改以及过时了一些api,具体修改查看3.2.3api修改,另外过时的api后续3-5个版本会进行删除优化loadAllConversationsFromDB()方法,从联表查询改为从两个表分别查询,解决在个别乐视手机上执行很慢的问题优化登录模块,减少登录失败的概率鉴于市面上的手机基本都是armeabi-v7a及以上的架构,从这版本开始不再提供普通的armeabi架构的so,减少打包时app的体积

红包相关:
新增:
小额随机红包增加广告红包(需要使用请单独联系商务)商户后台增加广告红包配置、统计功能商户后台增加修改密码功能

优化:
绑卡后的用户验证四要素改为验证二要素发红包等页面增加点击空白区域收回键盘的功能群成员列表索引增加常用姓氏以及汉字的支持

修复bug:
红包详情页领取人列表展示不全华为P8手机密码框无法获取焦点部分银行卡号输入正确,提示银行卡号不正确红包祝福语有换行符显示不正确修复Emoji表情显示乱码修复商户自主配置红包最低限额错误修复零钱明细显示顺序错误问题
 
iOS​ V3.2.3 2016-12-29
新功能/优化:
新增:实时1v1音视频,设置了对方不在线发送离线推送的前提下,当对方不在线时返回回调,以便于用户自定义离线消息推送更新:SDK支持bitcode更新:SDK使用动态库为了使SDK更简洁易用,过时的API会在后续3~5个版本进行删除

红包相关:
新增:
小额随机红包商户后台增加修改密码功能

优化:
绑卡后的用户验证四要素改为验证二要素iOS和Android两端UI展示一致性支付流程的优化SDK注册流程去掉XIB集成过程的参数检查风险策略

修复:
SDKToken注册失败的问题发红包缺少参数的问题修复Emoji表情显示乱码修复支付密码可能误报出错修复商户自主配置红包最低限额错误修复零钱明细显示顺序错误问题修改抢红包流程为依赖后端数据修复支行信息返回为空时的文案
 
 版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载 查看全部
7750.jpg_wh860_.jpg

Android​ V3.2.3 2016-12-29
新功能/优化:
  • sdk提供aar及gradle方式集成,具体方法查看gradle方式导入aar
  • 增加离线推送设置的相关接口,具体方法可查看EMPushManager API文档
  • 为了使sdk更简洁易用,修改以及过时了一些api,具体修改查看3.2.3api修改,另外过时的api后续3-5个版本会进行删除
  • 优化loadAllConversationsFromDB()方法,从联表查询改为从两个表分别查询,解决在个别乐视手机上执行很慢的问题
  • 优化登录模块,减少登录失败的概率
  • 鉴于市面上的手机基本都是armeabi-v7a及以上的架构,从这版本开始不再提供普通的armeabi架构的so,减少打包时app的体积


红包相关:
新增:

  • 小额随机红包
  • 增加广告红包(需要使用请单独联系商务)
  • 商户后台增加广告红包配置、统计功能
  • 商户后台增加修改密码功能


优化:
  • 绑卡后的用户验证四要素改为验证二要素
  • 发红包等页面增加点击空白区域收回键盘的功能
  • 群成员列表索引增加常用姓氏以及汉字的支持


修复bug:
  • 红包详情页领取人列表展示不全
  • 华为P8手机密码框无法获取焦点
  • 部分银行卡号输入正确,提示银行卡号不正确
  • 红包祝福语有换行符显示不正确
  • 修复Emoji表情显示乱码
  • 修复商户自主配置红包最低限额错误
  • 修复零钱明细显示顺序错误问题

 
iOS​ V3.2.3 2016-12-29
新功能/优化:
  • 新增:实时1v1音视频,设置了对方不在线发送离线推送的前提下,当对方不在线时返回回调,以便于用户自定义离线消息推送
  • 更新:SDK支持bitcode
  • 更新:SDK使用动态库
  • 为了使SDK更简洁易用,过时的API会在后续3~5个版本进行删除


红包相关:
新增:

  • 小额随机红包
  • 商户后台增加修改密码功能


优化:
  • 绑卡后的用户验证四要素改为验证二要素
  • iOS和Android两端UI展示一致性
  • 支付流程的优化
  • SDK注册流程
  • 去掉XIB
  • 集成过程的参数检查
  • 风险策略


修复:
  • SDKToken注册失败的问题
  • 发红包缺少参数的问题
  • 修复Emoji表情显示乱码
  • 修复支付密码可能误报出错
  • 修复商户自主配置红包最低限额错误
  • 修复零钱明细显示顺序错误问题
  • 修改抢红包流程为依赖后端数据
  • 修复支行信息返回为空时的文案

 
 版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载
0
评论

ios V2.3.0 SDK 已发布,增加HttpsOnly参数,允许用户配置 iOS 产品快递

产品更新 发表了文章 • 71 次浏览 • 2016-12-28 14:46 • 来自相关话题

ios V2.3.0 2016-12-28




新功能/改进:
修复2.2.9升级覆盖2.1.5至2.2.3版本,可能无法登录的bug

增加HttpsOnly参数,允许用户配置,默认设置为YES

SDK支持bitcode
版本历史:更新日志
下载地址:SDK下载 查看全部
ios V2.3.0 2016-12-28
1494.jpg_wh860_.jpg

新功能/改进:

修复2.2.9升级覆盖2.1.5至2.2.3版本,可能无法登录的bug

增加HttpsOnly参数,允许用户配置,默认设置为YES

SDK支持bitcode


版本历史:更新日志
下载地址:SDK下载
0
评论

IOS 2.2.9设置https only遇到无法登录的解决方案 ios_2.X iOS 环信集成指南

beyond 发表了文章 • 352 次浏览 • 2016-12-28 14:34 • 来自相关话题

分享一个自己遇到的在环信IOS2.X中设置https登录不上的解决方案。
 
SDK的老版本(版本范围为SDK2.1.5-2.2.3)中存在默认不使用https的设置。部分使用了范围内SDK版本的用户在升级到最新的SDK2.2.9时,设置https only的选项后会出现用户无法正常登录的问题。

这个问题可以升级到SDK2.2.9及以上版本,在SDK初始化时添加otherConfig:@{kSDKConfigUseHttps:@YES}的设置,具体的代码实现如下:[[EaseMob sharedInstance] registerSDKWithAppKey:@"easemob-demo#chatdemoui" apnsCertName:@"chatdemoui" otherConfig:@{kSDKConfigUseHttps:@YES}];
上记代码仅未示例,具体在使用时需要将appkey等信息替换为自己的对应信息就可以了。
 
集成过程中遇到问题欢迎在IMGeek社区发帖咨询。 查看全部
分享一个自己遇到的在环信IOS2.X中设置https登录不上的解决方案。
 
SDK的老版本(版本范围为SDK2.1.5-2.2.3)中存在默认不使用https的设置。部分使用了范围内SDK版本的用户在升级到最新的SDK2.2.9时,设置https only的选项后会出现用户无法正常登录的问题。

这个问题可以升级到SDK2.2.9及以上版本,在SDK初始化时添加otherConfig:@{kSDKConfigUseHttps:@YES}的设置,具体的代码实现如下:
[[EaseMob sharedInstance] registerSDKWithAppKey:@"easemob-demo#chatdemoui" apnsCertName:@"chatdemoui" otherConfig:@{kSDKConfigUseHttps:@YES}];

上记代码仅未示例,具体在使用时需要将appkey等信息替换为自己的对应信息就可以了。
 
集成过程中遇到问题欢迎在IMGeek社区发帖咨询。
1
评论

ios V3.2.2 SDK 已发布,增加是否删除会话选项 ios_3.x iOS 产品快递

产品更新 发表了文章 • 229 次浏览 • 2016-12-08 19:10 • 来自相关话题

ios ​V3.2.2 2016-12-08





 
新功能/优化:
 

SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题

版本历史:更新日志 
下载地址:SDK下载 查看全部
ios ​V3.2.2 2016-12-08

2597.jpg_wh860_.jpg

 
新功能/优化:
 


SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题


版本历史:更新日志 
下载地址:SDK下载
0
评论

ios V2.2.9 SDK 已发布,SDK满足apple ATS的要求 ios_2.X iOS 产品快递

产品更新 发表了文章 • 235 次浏览 • 2016-12-08 18:54 • 来自相关话题

ios 版本 V3.2.2 2016-12-08





 
新功能/优化:

SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题

版本历史:更新日志 
下载地址:SDK下载 查看全部
ios 版本 V3.2.2 2016-12-08
7282.jpg_wh860_.jpg


 
新功能/优化:


SDK满足apple ATS的要求

删除好友逻辑的修改(增加是否删除会话选项)

修复呼叫时对方不在线,不能正确显示通话结束原因的问题


版本历史:更新日志 
下载地址:SDK下载
0
评论

ios V3.2.1 SDK 已发布,聊天室列表支持分页获取 iOS 产品快递

产品更新 发表了文章 • 234 次浏览 • 2016-12-07 11:33 • 来自相关话题

ios V3.2.1 2016-11-12
 





新功能/优化:
 
聊天室列表支持分页获取

EMOption中usingHttps默认为YES

bug fix:
修复Lite版本SDK编译warning的问题
 
版本历史:更新日志  
下载地址:SDK下载 查看全部
ios V3.2.1 2016-11-12
 
3099.jpg_wh860_.jpg


新功能/优化:
 

聊天室列表支持分页获取

EMOption中usingHttps默认为YES



bug fix:

修复Lite版本SDK编译warning的问题


 
版本历史:更新日志  
下载地址:SDK下载
0
评论

快速找到当前页面的viewcontroller,有助于看别人代码 iOS

奋斗的蜗牛 发表了文章 • 142 次浏览 • 2016-10-28 17:52 • 来自相关话题

下面我将上传一个微信demo试试看了下效果,只需要往工程里面添加创建的视图控制器,就可以快速找到当前页面的viewcontroler




 
下面我将上传一个微信demo试试看了下效果,只需要往工程里面添加创建的视图控制器,就可以快速找到当前页面的viewcontroler
屏幕快照_2016-10-28_下午5.47_.49_.png

 
1
评论

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

beyond 发表了文章 • 1503 次浏览 • 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 表情 环信 iOS集成 环信

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

今天看了下环信SDK聊天模块下封装的自定义消息工具条以及表情键盘,了解了下iOS自带表情的转码。顺[b]带记录下集成环信SDK遇到的坑。[/b]一、DXMessageToolBar工具条的封装

DXMessageToolBar是加在聊天页面底部的消息工具条,其负责控制四个控件:

1、录音视图DXRecordView
2、输入文本框XHMessageTextView
3、表情键盘DXFaceView
4、更多视图DXChatBarMoreView

DXMessageToolBar不仅要控制这四个UIView之间的切换,负责正确改变视图的位置与大小,还要将一系列的动作事件通过委托传到聊天页面控制器ChatViewController中去处理。

DXRecordView是录制音频的时候展示的视图,通过不断检测音量大小来展示不同的UIImage从而达到动态效果。

XHMessageTextView是继承自UITextView的,其中实现了自定义placeHolder的颜色,由于修改placeHolder是私有方法,因此这里换了种方式实现,那就是通过重写drawRect:方法,在其中将placeHolder绘制到UITextView上面。

DXFaceView表情键盘,它上面加了FacialView。FacialView上面放置了一些列的UIButton,UIButton的标题设置为iOS自带的表情。

DXChatBarMoreView更多视图,上面添加从相册选择照片,调用相机拍摄照片等按钮。

二、表情键盘的封装

表情键盘上放置了一些iOS自带的表情,而且在最后加了一个发送按钮和一个删除按钮,如图:





点击对应的表情,将表情字符串添加到文本框中。点击删除按钮通过委托调用了DXMessageToolBar的方法,其实现方式:- (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete
{
NSString *chatText = self.inputTextView.text;

if (!isDelete && str.length > 0) {
self.inputTextView.text = [NSString stringWithFormat:@"%@%@",chatText,str];
}
else {
if (chatText.length >= 2)
{
NSString *subStr = [chatText substringFromIndex:chatText.length-2];
if ([(DXFaceView *)self.faceView stringIsFace:subStr]) {
self.inputTextView.text = [chatText substringToIndex:chatText.length-2];
[self textViewDidChange:self.inputTextView];
return;
}
}

if (chatText.length > 0) {
self.inputTextView.text = [chatText substringToIndex:chatText.length-1];
}
}

[self textViewDidChange:self.inputTextView];
}由此可见一个表情字符串占两个字符的长度,所以要在点击删除按钮之后判断文本框当前字符串的末尾处是否是表情。

三、iOS自带表情的转码

每个表情都有它自己的编码,通过编码可以拿到它对应的表情字符串:#import <Foundation/Foundation.h>

#define MAKE_Q(x) @#x
#define MAKE_EM(x,y) MAKE_Q(x##y)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunicode"
#define MAKE_EMOJI(x) MAKE_EM(\U000,x)
#pragma clang diagnostic pop

#define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); }
#define EMOJI_HMETHOD(x) + (NSString *)x;
#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);

/*!
@class
@brief iOS内置表情编码处理类
*/
@interface Emoji : NSObject

/*!
@method
@brief unicode编码转换为iOS内置表情字符串
@discussion
@param code iOS内置表情对应的unicode编码值
@result iOS内置表情字符串
*/
+ (NSString *)emojiWithCode:(int)code;

/*!
@method
@brief 获取所有iOS内置表情
@discussion
@result iOS表情字符串数组
*/
+ (NSArray *)allEmoji;
@end

#import "Emoji.h"
#import "EmojiEmoticons.h"

@implementation Emoji
+ (NSString *)emojiWithCode:(int)code {
int sym = EMOJI_CODE_TO_SYMBOL(code);
return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
}
+ (NSArray *)allEmoji {
NSMutableArray *array = [NSMutableArray new];
[array addObjectsFromArray:[EmojiEmoticons allEmoticons]];
return array;
}
@end这里拿表情编码做一系列运算,然后传入[[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];生成对应的字符串的运算方法暂时没找到解释,没搞清楚运算原理。若哪位大神看到出处,敬请告知!

四、集成环信遇到的坑

1、显示用户头像和昵称

环信默认不显示头像和昵称,如果要显示头像,需要自己实现。这里要实现显示头像和昵称,需要发消息的时候在ext这个扩展字段中加入和Android约定好的字段,在接收到消息的时候将这些字段保存到本地数据库中。

这里特别需要注意的一点是:在读取本地数据库的时候,是通过chatter来匹配的话,记得环信的chatter在保存的时候都做了小写处理。所以,在数据库中匹配的时候,最好是大小写不敏感的匹配方式:NSString *sql = [NSString stringWithFormat:@"select * from %@
where upper(chatter)=upper('%@')",_tbName,chatter];2、自定义推送内容

环信默认推送内容是“你有一条新的消息”,如果要自定义内容,需要在在ext扩展字段中添加以下字段:@"em_apns_ext":@{
@"em_push_title":文本内容
},3、发送用户信息给客服

如果要在用户跟客服聊天时能在客服后台看到当前用户的一些基本信息,需要在ext扩展字段中添加以下字段(比如需要用户手机号码和名字):@"weichat":@{
@"visitor":@{
@"phone":userPhone,
@"userNickname":userNickName,
}
},4、发送用户轨迹给客服

如果要在用户点击客服咨询时,比如是点击职位下面的咨询,想将当期职位的信息发给客服,那就是环信的发送用户轨迹信息。这个时候在进入聊天页面时需要单独处理,自动发送一个自己封装的信息:-(void)sendJobInfo:(YLJob *)aJob
{
NSMutableDictionary *ext = [NSMutableDictionary dictionary];
NSDictionary *msgtype = @{@"track":@{@"title":aJob.title?:@"",
@"item_url":aJob.link?:@""}};
[ext setObject:msgtype forKey:@"msgtype"];

EMChatText *text = [[EMChatText alloc] initWithText:[NSString stringWithFormat:@"我想咨询 %@",aJob.title?:@""]];
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithChatObject:text];
EMMessage *message = [[EMMessage alloc] initWithReceiver:_chatter bodies:[NSArray arrayWithObject:body]];
message.ext = ext;
[[EaseMob sharedInstance].chatManager asyncSendMessage:message progress:nil];

}这里只是简单的使用了环信已经封装好的文本消息的接口,并且在聊天页面的展示方式也将是纯文本的方式Cell的展现方式。如果要以其他样式的Cell展示,需要自定义Cell,并且在展示的时候根据ext中的字段来判断是否是这种自定义消息。

其他具体可用字段名称,请登录环信官网查看官方文档。

参考:
以下是Emoji的表情编码对照表:
Emoji Unicode Tables
 
作者:Code_Ninja 查看全部
今天看了下环信SDK聊天模块下封装的自定义消息工具条以及表情键盘,了解了下iOS自带表情的转码。顺[b]带记录下集成环信SDK遇到的坑。[/b]
一、DXMessageToolBar工具条的封装

DXMessageToolBar是加在聊天页面底部的消息工具条,其负责控制四个控件:

1、录音视图DXRecordView
2、输入文本框XHMessageTextView
3、表情键盘DXFaceView
4、更多视图DXChatBarMoreView

DXMessageToolBar不仅要控制这四个UIView之间的切换,负责正确改变视图的位置与大小,还要将一系列的动作事件通过委托传到聊天页面控制器ChatViewController中去处理。

DXRecordView是录制音频的时候展示的视图,通过不断检测音量大小来展示不同的UIImage从而达到动态效果。

XHMessageTextView是继承自UITextView的,其中实现了自定义placeHolder的颜色,由于修改placeHolder是私有方法,因此这里换了种方式实现,那就是通过重写drawRect:方法,在其中将placeHolder绘制到UITextView上面。

DXFaceView表情键盘,它上面加了FacialView。FacialView上面放置了一些列的UIButton,UIButton的标题设置为iOS自带的表情。

DXChatBarMoreView更多视图,上面添加从相册选择照片,调用相机拍摄照片等按钮。

二、表情键盘的封装

表情键盘上放置了一些iOS自带的表情,而且在最后加了一个发送按钮和一个删除按钮,如图:

141604-f58b918d4fb3aad0.jpg

点击对应的表情,将表情字符串添加到文本框中。点击删除按钮通过委托调用了DXMessageToolBar的方法,其实现方式:
- (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete
{
NSString *chatText = self.inputTextView.text;

if (!isDelete && str.length > 0) {
self.inputTextView.text = [NSString stringWithFormat:@"%@%@",chatText,str];
}
else {
if (chatText.length >= 2)
{
NSString *subStr = [chatText substringFromIndex:chatText.length-2];
if ([(DXFaceView *)self.faceView stringIsFace:subStr]) {
self.inputTextView.text = [chatText substringToIndex:chatText.length-2];
[self textViewDidChange:self.inputTextView];
return;
}
}

if (chatText.length > 0) {
self.inputTextView.text = [chatText substringToIndex:chatText.length-1];
}
}

[self textViewDidChange:self.inputTextView];
}
由此可见一个表情字符串占两个字符的长度,所以要在点击删除按钮之后判断文本框当前字符串的末尾处是否是表情。

三、iOS自带表情的转码

每个表情都有它自己的编码,通过编码可以拿到它对应的表情字符串:
#import <Foundation/Foundation.h>

#define MAKE_Q(x) @#x
#define MAKE_EM(x,y) MAKE_Q(x##y)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunicode"
#define MAKE_EMOJI(x) MAKE_EM(\U000,x)
#pragma clang diagnostic pop

#define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); }
#define EMOJI_HMETHOD(x) + (NSString *)x;
#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);

/*!
@class
@brief iOS内置表情编码处理类
*/
@interface Emoji : NSObject

/*!
@method
@brief unicode编码转换为iOS内置表情字符串
@discussion
@param code iOS内置表情对应的unicode编码值
@result iOS内置表情字符串
*/
+ (NSString *)emojiWithCode:(int)code;

/*!
@method
@brief 获取所有iOS内置表情
@discussion
@result iOS表情字符串数组
*/
+ (NSArray *)allEmoji;
@end

#import "Emoji.h"
#import "EmojiEmoticons.h"

@implementation Emoji
+ (NSString *)emojiWithCode:(int)code {
int sym = EMOJI_CODE_TO_SYMBOL(code);
return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
}
+ (NSArray *)allEmoji {
NSMutableArray *array = [NSMutableArray new];
[array addObjectsFromArray:[EmojiEmoticons allEmoticons]];
return array;
}
@end
这里拿表情编码做一系列运算,然后传入[[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];生成对应的字符串的运算方法暂时没找到解释,没搞清楚运算原理。若哪位大神看到出处,敬请告知!

四、集成环信遇到的坑

1、显示用户头像和昵称

环信默认不显示头像和昵称,如果要显示头像,需要自己实现。这里要实现显示头像和昵称,需要发消息的时候在ext这个扩展字段中加入和Android约定好的字段,在接收到消息的时候将这些字段保存到本地数据库中。

这里特别需要注意的一点是:在读取本地数据库的时候,是通过chatter来匹配的话,记得环信的chatter在保存的时候都做了小写处理。所以,在数据库中匹配的时候,最好是大小写不敏感的匹配方式:
NSString *sql = [NSString stringWithFormat:@"select * from %@ 
where upper(chatter)=upper('%@')",_tbName,chatter];
2、自定义推送内容

环信默认推送内容是“你有一条新的消息”,如果要自定义内容,需要在在ext扩展字段中添加以下字段:
@"em_apns_ext":@{                           
@"em_push_title":文本内容
},
3、发送用户信息给客服

如果要在用户跟客服聊天时能在客服后台看到当前用户的一些基本信息,需要在ext扩展字段中添加以下字段(比如需要用户手机号码和名字):
@"weichat":@{
@"visitor":@{
@"phone":userPhone,
@"userNickname":userNickName,
}
},
4、发送用户轨迹给客服

如果要在用户点击客服咨询时,比如是点击职位下面的咨询,想将当期职位的信息发给客服,那就是环信的发送用户轨迹信息。这个时候在进入聊天页面时需要单独处理,自动发送一个自己封装的信息:
-(void)sendJobInfo:(YLJob *)aJob
{
NSMutableDictionary *ext = [NSMutableDictionary dictionary];
NSDictionary *msgtype = @{@"track":@{@"title":aJob.title?:@"",
@"item_url":aJob.link?:@""}};
[ext setObject:msgtype forKey:@"msgtype"];

EMChatText *text = [[EMChatText alloc] initWithText:[NSString stringWithFormat:@"我想咨询 %@",aJob.title?:@""]];
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithChatObject:text];
EMMessage *message = [[EMMessage alloc] initWithReceiver:_chatter bodies:[NSArray arrayWithObject:body]];
message.ext = ext;
[[EaseMob sharedInstance].chatManager asyncSendMessage:message progress:nil];

}
这里只是简单的使用了环信已经封装好的文本消息的接口,并且在聊天页面的展示方式也将是纯文本的方式Cell的展现方式。如果要以其他样式的Cell展示,需要自定义Cell,并且在展示的时候根据ext中的字段来判断是否是这种自定义消息。

其他具体可用字段名称,请登录环信官网查看官方文档。

参考:
以下是Emoji的表情编码对照表:
Emoji Unicode Tables
 
作者:Code_Ninja
0
评论

【环信集成笔记】进阶篇-集成环信 ios 2.0,看这篇就够了 环信 环信 iOS集成 iOS 环信集成笔记

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

一、准备工作
 
1、注册环信帐号注册一个环信账号之后,我们用注册的帐号登陆。然后创建一个应用,会得到一个对应的AppKey,这个AppKey在初始化环信SDK的时候需要用到。(这个去环信官网自己弄环信)
 
2、制作推送证书如果需要做离线推送的功能,需要制作一个推送证书。如果只是需要实现单聊、群聊等功能,可以跳过此步骤。个人建议刚开始接触环信的开发者可以忽略此步骤。制作证书
 
3、下载环信sdk.下的是2.0





二、集成环信的SDK

1、把环信SDK添加到工程中

从环信官网下载下来的是一个压缩包,解压之后,把我们需要的环信SDK,即EaseMobSDK这个文件夹,整个的拖入到我们的工程中。如下图:




在lib文件夹下面有两个静态库,只需要用到一个,根据你的需求选择。libEaseMobClientSDKLite.a不包含实时语音功能,libEaseMobClientSDK.a包含所有功能。2、添加对应的依赖库

向Build Phases → Link Binary With Libraries 中添加依赖库
MobileCoreServices.frameworkCFNetwork.framelibsqlite3.tbdlibstdc++.6.0.9.tbdlibz.tbdlibiconv.tbdlibresolv.tbdlibxml2.tbd
温馨提示:注意不要添加错了,也不能添加少了,添加完毕之后,不要着急,先编译一下。编译成功,则说明没有问题;如果编译报错,则仔细对照上面例举的静态库进行添加,直到编译成功,再进行下一步。
 
3、配置工程
 
3.1 不包含语音静态库的配置方法
(1) 删掉libEaseMobClientSDK.a,保留libEaseMobClientSDKLite.a;
(2) 在Build Settings -> Other Linker Flags 添加”fore_load”和”libEaseMobClientSDKLite.a”的相对路径。
如下图所示:




3.2 包含语音静态库的配置方法

(1) 删掉libEaseMobClientSDKLite.a,保留libEaseMobClientSDK.a;

(2) 在Build Settings -> Other Linker Flags 添加”-ObjC”。

如下图所示:




4、验证SDK是否添加成功
在AppDelegate.m文件中添加环信SDK初始化的方法,记得添加头文件”EaseMob.h”。下面提供了我用的测试AppKey,你可以替换成你自己申请的AppKey。编译成功,则说明你已经正确集成了环信的SDK了。
 
如果编译有问题,可能存在的原因:
(1) 静态库没有添加正确;
(2) 静态库工程配置不正确#define APPKEY @"1101#testrongyun" //环信APPKEY
#define APNSCert @"TestHuanXin" //环信推送证书名称
#import "AppDelegate.h"
#import "EaseMob.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化环信SDK
[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];
return YES;
}






三、添加UI文件到你的工程

集成环信2.0UI文件,需要添加的文件,如下图所示:




添加完成之后,如下图所示:




四、设置pch文件的路径
 
文件添加成功之后,编译会报错,因为你没有添加pch文件。自己手动添加pch文件(EaseUI-Prefix.pch),设置一下pch文件的加载路径即可。如下图所示:




在EaseUI-Prefix.pch中添加头文件”EaseUI.h”,如下图:




最后,编译一下,编译成功则说明添加集成UI文件成功。
 
五,搭建基本框架
 
1、新建三个UIViewController
 
新建三个ViewController,继承UIViewController,分别命名为:FirstViewController,SecondViewController,ThirdViewController。如下图所示





2、添加登陆方法

在AppDelegate.m中添加如下代码:#define APPKEY @"1101#testrongyun" //环信APPKEY
#define APNSCert @"TestHuanXin" //环信推送证书名称
#import "AppDelegate.h"
#import "EaseMob.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
@interface AppDelegate ()
@end@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//初始化环信SDK
[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];
//异步登陆的方法(这里的账号密码要去环信后台自己注册)
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"账号" password:@"密码" completion:^(NSDictionary *loginInfo, EMError *error) {
if (!error && loginInfo) {
NSLog(@"登陆成功");
[self setUpNav];
}
} onQueue:nil];
return YES;
}
- (void)setUpNav
{
FirstViewController *firstVC = [[FirstViewController alloc] init];
SecondViewController *secondVC = [[SecondViewController alloc] init];
ThirdViewController *thirdVC = [[ThirdViewController alloc] init];
firstVC.title = @"会话列表";
secondVC.title = @"通讯录";
thirdVC.title = @"设置";
UITabBarController *tabBar = [[UITabBarController alloc] init];
tabBar.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:firstVC],
[[UINavigationController alloc] initWithRootViewController:secondVC],
[[UINavigationController alloc] initWithRootViewController:thirdVC]];
self.window.rootViewController = tabBar;
self.window.backgroundColor = [UIColor whiteColor];
}
@end编译一下,看下效果。




六、添加与聊天有关的文件

1、添加GifImage文件2、添加chat文件








添加完成之后,编译一下,把报错的地方全部注释掉,有很多地方需要注释掉,这些地方是因为有些我们不需要的文件没有添加进来。(自己注释比较麻烦)
 
注释好的GifImage和chat文件,下载后无需注释无关代码,可直接使用注释好的文件,
 
七、实现单聊在SecondViewController.m中添加如下代码:#import "SecondViewController.h"#import "ChatViewController.h"@interface SecondViewController (){
NSArray *arrSystem;
NSArray *arrFriends;
}
@property (retain, nonatomic) UITableView *tableView;
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
arrSystem = @[@"申请与通知",@"群聊",@"聊天室"];
_tableView = [[UITableView alloc] initWithFrame:self.view.frame];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
//获取好友列表
[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
if (!error) {
NSLog(@"获取成功 -- %@",buddyList);
arrFriends = [NSArray arrayWithArray:buddyList];
[_tableView reloadData];
}
} onQueue:nil];
}
#pragma mark - UITableViewDelegate & UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return arrSystem.count;
} else {
return arrFriends.count;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
switch (indexPath.section) {
case 0:
{
cell.textLabel.text = [arrSystem objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"groupPublicHeader"];
break;
}
case 1:
{
EMBuddy *eMBuddy = [arrFriends objectAtIndex:indexPath.row];
cell.textLabel.text = eMBuddy.username;
cell.imageView.image = [UIImage imageNamed:@"chatListCellHead"];
break;
}
default:
break;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
EMBuddy *buddy = [arrFriends objectAtIndex:indexPath.row];
ChatViewController *chatVC = [[ChatViewController alloc] initWithConversationChatter:buddy.username conversationType:eConversationTypeChat];
chatVC.title = buddy.username; //好友的名字
chatVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:chatVC animated:YES];
}编译,效果








真机运行一下,可能会报错,





解决方案:




把这个值设置成no

文章作者:环信热心用户樊呵呵 查看全部
一、准备工作
 
1、注册环信帐号注册一个环信账号之后,我们用注册的帐号登陆。然后创建一个应用,会得到一个对应的AppKey,这个AppKey在初始化环信SDK的时候需要用到。(这个去环信官网自己弄环信)
 
2、制作推送证书如果需要做离线推送的功能,需要制作一个推送证书。如果只是需要实现单聊、群聊等功能,可以跳过此步骤。个人建议刚开始接触环信的开发者可以忽略此步骤。制作证书
 
3、下载环信sdk.下的是2.0
2267403-9029e76fb6048493.jpg


二、集成环信的SDK

1、把环信SDK添加到工程中

从环信官网下载下来的是一个压缩包,解压之后,把我们需要的环信SDK,即EaseMobSDK这个文件夹,整个的拖入到我们的工程中。如下图:
2267403-2b2574629722ab00.jpg

在lib文件夹下面有两个静态库,只需要用到一个,根据你的需求选择。
libEaseMobClientSDKLite.a不包含实时语音功能,libEaseMobClientSDK.a包含所有功能。
2、添加对应的依赖库

向Build Phases → Link Binary With Libraries 中添加依赖库
  1. MobileCoreServices.framework
  2. CFNetwork.frame
  3. libsqlite3.tbd
  4. libstdc++.6.0.9.tbd
  5. libz.tbd
  6. libiconv.tbd
  7. libresolv.tbd
  8. libxml2.tbd

温馨提示:注意不要添加错了,也不能添加少了,添加完毕之后,不要着急,先编译一下。编译成功,则说明没有问题;如果编译报错,则仔细对照上面例举的静态库进行添加,直到编译成功,再进行下一步。
 
3、配置工程
 
3.1 不包含语音静态库的配置方法
(1) 删掉libEaseMobClientSDK.a,保留libEaseMobClientSDKLite.a;
(2) 在Build Settings -> Other Linker Flags 添加”fore_load”和”libEaseMobClientSDKLite.a”的相对路径。
如下图所示:
2267403-18e5a986d5358977.jpg

3.2 包含语音静态库的配置方法

(1) 删掉libEaseMobClientSDKLite.a,保留libEaseMobClientSDK.a;

(2) 在Build Settings -> Other Linker Flags 添加”-ObjC”。

如下图所示:
2267403-9aa919e2913c9de1.jpg

4、验证SDK是否添加成功
在AppDelegate.m文件中添加环信SDK初始化的方法,记得添加头文件”EaseMob.h”。下面提供了我用的测试AppKey,你可以替换成你自己申请的AppKey。编译成功,则说明你已经正确集成了环信的SDK了。
 
如果编译有问题,可能存在的原因:
(1) 静态库没有添加正确;
(2) 静态库工程配置不正确
#define APPKEY      @"1101#testrongyun"     //环信APPKEY
#define APNSCert @"TestHuanXin" //环信推送证书名称
#import "AppDelegate.h"
#import "EaseMob.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化环信SDK
[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];
return YES;
}






三、添加UI文件到你的工程

集成环信2.0UI文件,需要添加的文件,如下图所示:
2267403-8f645439e0dface8.jpg

添加完成之后,如下图所示:
2267403-b2667ca172b29da9.jpg

四、设置pch文件的路径
 
文件添加成功之后,编译会报错,因为你没有添加pch文件。自己手动添加pch文件(EaseUI-Prefix.pch),设置一下pch文件的加载路径即可。如下图所示:
2267403-da9cd01f79acf31a.jpg

在EaseUI-Prefix.pch中添加头文件”EaseUI.h”,如下图:
2267403-0280af41aced006c.jpg

最后,编译一下,编译成功则说明添加集成UI文件成功。
 
五,搭建基本框架
 
1、新建三个UIViewController
 
新建三个ViewController,继承UIViewController,分别命名为:FirstViewController,SecondViewController,ThirdViewController。如下图所示

2267403-ad785fff16328185.jpg

2、添加登陆方法

在AppDelegate.m中添加如下代码:
#define APPKEY      @"1101#testrongyun"     //环信APPKEY
#define APNSCert @"TestHuanXin" //环信推送证书名称
#import "AppDelegate.h"
#import "EaseMob.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//初始化环信SDK
[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];
//异步登陆的方法(这里的账号密码要去环信后台自己注册)
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"账号" password:@"密码" completion:^(NSDictionary *loginInfo, EMError *error) {
if (!error && loginInfo) {
NSLog(@"登陆成功");
[self setUpNav];
}
} onQueue:nil];
return YES;
}
- (void)setUpNav
{
FirstViewController *firstVC = [[FirstViewController alloc] init];
SecondViewController *secondVC = [[SecondViewController alloc] init];
ThirdViewController *thirdVC = [[ThirdViewController alloc] init];
firstVC.title = @"会话列表";
secondVC.title = @"通讯录";
thirdVC.title = @"设置";
UITabBarController *tabBar = [[UITabBarController alloc] init];
tabBar.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:firstVC],
[[UINavigationController alloc] initWithRootViewController:secondVC],
[[UINavigationController alloc] initWithRootViewController:thirdVC]];
self.window.rootViewController = tabBar;
self.window.backgroundColor = [UIColor whiteColor];
}
@end
编译一下,看下效果。
2267403-687ab41414eac944.png

六、添加与聊天有关的文件

1、添加GifImage文件2、添加chat文件
2267403-7543120b78599164.jpg

2267403-fc7cc6d2aac8ddb8.jpg

添加完成之后,编译一下,把报错的地方全部注释掉,有很多地方需要注释掉,这些地方是因为有些我们不需要的文件没有添加进来。(自己注释比较麻烦)
 
注释好的GifImage和chat文件,下载后无需注释无关代码,可直接使用注释好的文件,
 
七、实现单聊在SecondViewController.m中添加如下代码:
#import "SecondViewController.h"#import "ChatViewController.h"@interface SecondViewController (){
NSArray *arrSystem;
NSArray *arrFriends;
}
@property (retain, nonatomic) UITableView *tableView;
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
arrSystem = @[@"申请与通知",@"群聊",@"聊天室"];
_tableView = [[UITableView alloc] initWithFrame:self.view.frame];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
//获取好友列表
[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
if (!error) {
NSLog(@"获取成功 -- %@",buddyList);
arrFriends = [NSArray arrayWithArray:buddyList];
[_tableView reloadData];
}
} onQueue:nil];
}
#pragma mark - UITableViewDelegate & UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return arrSystem.count;
} else {
return arrFriends.count;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
switch (indexPath.section) {
case 0:
{
cell.textLabel.text = [arrSystem objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"groupPublicHeader"];
break;
}
case 1:
{
EMBuddy *eMBuddy = [arrFriends objectAtIndex:indexPath.row];
cell.textLabel.text = eMBuddy.username;
cell.imageView.image = [UIImage imageNamed:@"chatListCellHead"];
break;
}
default:
break;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
EMBuddy *buddy = [arrFriends objectAtIndex:indexPath.row];
ChatViewController *chatVC = [[ChatViewController alloc] initWithConversationChatter:buddy.username conversationType:eConversationTypeChat];
chatVC.title = buddy.username; //好友的名字
chatVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:chatVC animated:YES];
}
编译,效果
2267403-b19aab1a08432dfb.png

2267403-f96603327daee041.png

真机运行一下,可能会报错,

2267403-683387308562a7d6.jpg

解决方案:
2267403-4a01a8288cd4c024.jpg

把这个值设置成no

文章作者:环信热心用户樊呵呵
0
评论

【推荐】两大APP与云账户红包SDK集成详情及Demon分享 红包SDK iOS 云账户 Android

云账户 发表了文章 • 357 次浏览 • 2016-09-07 10:54 • 来自相关话题

云账户红包SDK3.0已经发布一段时间了!
就在本月,两家老牌重量级APP完成了云账户红包SDK的集成,经过双方严格的联合测试,现在正是发版了!他们就是“工作圈”&“超信”(IOS、安卓市场都可以下载哦,有兴趣的朋友们可以去市场里下载体验一下,绝对nice!)
可能有朋友不太了解这两个百万级用户的产品,这里我给大家正是介绍一下:
工作圈:
g工作圈是用友旗下畅捷通公司开发的一款企业移动办公平台,融合了企业经营管理所需的各项专业服务,是基于工作场景应用集成:公告、审批、任务、工作报告、签到、文件柜、电话会议、企业通讯录、圈子信息交流等组成的企业互联网应用,帮助企业提高沟通协作效率、简化工作流程、降低管理成本。让管理更简单,工作更轻松!
 
超信:
超信是一款基于手机通讯录的短信增强工具,安装超信既可以完美的取代系统短信功能,开机即用,更加简单便捷的与手机通讯录中的联系人互相手法短信。如果双方都安装超信,就能通过手机网络(WiFi、3G、GPRS)与您铜须路中的联系人发送(需小豪少量网络流量)信息、图片、语音和位置等多媒体文件。
以下是云账户在两个产品中的截图:
工作圈&云账户:
超信&云账户:
除了工作圈和超信之外,已经成功集成云账户红包SDK并发版上线的比较有代表性的APP有:拉拉公园、INVITE、全景图片、蜗牛睡眠、捷库工作、领公报等,正在集成中的APP有上百家,其中还有几位神秘大咖在享受我们的云服务和私有化部署服务,这里暂时先保持下神秘!
我们的原则是,先上线、再PR,少吹牛,多干实事!
另外,云账户红包SDK已经满足完美集成在市场上主流的IM,客服SaaS提供商环信、容联云通讯、融云、leancloud、亲加的产品中,开发者如果用了以上IM或客服产品,可以更加快速安全的接入!
云账户红包SDK,更详细的信息各位开发者可以访问云账户官网:www.yunzhanghu.com去了解,官网上提供Demo下载,帮助开发者们更好地体验我们的产品,毕竟“先尝后买,价格公道,童叟无欺” 查看全部
云账户红包SDK3.0已经发布一段时间了!
就在本月,两家老牌重量级APP完成了云账户红包SDK的集成,经过双方严格的联合测试,现在正是发版了!他们就是“工作圈”&“超信”(IOS、安卓市场都可以下载哦,有兴趣的朋友们可以去市场里下载体验一下,绝对nice!)
可能有朋友不太了解这两个百万级用户的产品,这里我给大家正是介绍一下:
工作圈:
g工作圈是用友旗下畅捷通公司开发的一款企业移动办公平台,融合了企业经营管理所需的各项专业服务,是基于工作场景应用集成:公告、审批、任务、工作报告、签到、文件柜、电话会议、企业通讯录、圈子信息交流等组成的企业互联网应用,帮助企业提高沟通协作效率、简化工作流程、降低管理成本。让管理更简单,工作更轻松!
 
超信:
超信是一款基于手机通讯录的短信增强工具,安装超信既可以完美的取代系统短信功能,开机即用,更加简单便捷的与手机通讯录中的联系人互相手法短信。如果双方都安装超信,就能通过手机网络(WiFi、3G、GPRS)与您铜须路中的联系人发送(需小豪少量网络流量)信息、图片、语音和位置等多媒体文件。
以下是云账户在两个产品中的截图:
工作圈&云账户:
超信&云账户:
除了工作圈和超信之外,已经成功集成云账户红包SDK并发版上线的比较有代表性的APP有:拉拉公园、INVITE、全景图片、蜗牛睡眠、捷库工作、领公报等,正在集成中的APP有上百家,其中还有几位神秘大咖在享受我们的云服务和私有化部署服务,这里暂时先保持下神秘!
我们的原则是,先上线、再PR,少吹牛,多干实事!
另外,云账户红包SDK已经满足完美集成在市场上主流的IM,客服SaaS提供商环信、容联云通讯、融云、leancloud、亲加的产品中,开发者如果用了以上IM或客服产品,可以更加快速安全的接入!
云账户红包SDK,更详细的信息各位开发者可以访问云账户官网:www.yunzhanghu.com去了解,官网上提供Demo下载,帮助开发者们更好地体验我们的产品,毕竟“先尝后买,价格公道,童叟无欺”
1
评论

Duplicate interface definition for class 'EaseUI'解决办法 iOS EaseUI swift

※樂※ 发表了文章 • 454 次浏览 • 2016-09-05 12:44 • 来自相关话题

今天项目迁移时发现报 Duplicate interface definition for class 'EaseUI' 错误,然后重新修改了EaseUI-Prefix的指定路径就好了!
今天项目迁移时发现报 Duplicate interface definition for class 'EaseUI' 错误,然后重新修改了EaseUI-Prefix的指定路径就好了!
1
评论

报错: _OBJC_CLASS_$_CMMotionManager 和 报错:ChatDemoHelper中TTAlertNoTitle is invalid in C99解决方法 ChatDemoHelper 环信 iOS集成 iOS

Shawnre6 发表了文章 • 685 次浏览 • 2016-09-03 04:48 • 来自相关话题

(1)报错  _OBJC_CLASS_$_CMMotionManager  :




解决方法:直接去Linked Frameworks and Libraries 导入 CoreMotion.framework文件即可:





  
 
(2)报错:ChatDemoHelper.m文件中 TTAlertNoTitle is invalid in C99
解决方法:直接在ChatDemoHelper.m文件中导入两个文件即可:
 
#include <sys/types.h>
#include <sys/sysctl.h>
 
 
真的是很蛋疼的两个报错。。。 查看全部
(1)报错  _OBJC_CLASS_$_CMMotionManager  :
1.pic_.jpg

解决方法:直接去Linked Frameworks and Libraries 导入 CoreMotion.framework文件即可:

2.pic_.jpg

  
 
(2)报错:ChatDemoHelper.m文件中 TTAlertNoTitle is invalid in C99
解决方法:直接在ChatDemoHelper.m文件中导入两个文件即可:
 
#include <sys/types.h>
#include <sys/sysctl.h>
 
 
真的是很蛋疼的两个报错。。。
5
评论

基于环信SDK开发,开源的高仿ios微信项目--酷信 iOS 微信 iOS环信SDK高仿微信MVVM架构求STAR

nacker 发表了文章 • 21793 次浏览 • 2016-07-20 16:27 • 来自相关话题

写在前面的话(大伙在使用过程中遇到BUG请@我一下,我会去认真迭代这款高仿APP)
 项目简介:
 1.此版本是有史以来Github上最牛逼的高仿微信项目没有之一,采用MVVM和MVC两种开发架构思想,纯代码开发,这是你们在培训机构学不到的.仅供大家学习使用,不得用于商业用途.最终解释权归作者二哥所有. 2.如果各位下客能帮我点STAR,半个月STAR500+,我会陆陆续续发布待实现功能,其实已经做完,一个月STAR1000+我会把微信主要功能全部实现发布出来,两个月STAR2000+我会发布纯Swift版,纯Swift版采用纯代码开发已经做的差不多了.就看大伙的手能不能点STAR了.希望大家不要下完就跑了.作为作者的二哥会很心痛的.
3.我之前接触过很多项目,就有一个项目中的朋友圈整个控制器4千行,尼玛4千行了这项目怎么迭代,二哥现在300行解决了朋友圈的问题,还在优化中...

高仿微信计划:测试账号:

nacker 123456
h18 123456
 1.采用技术点

* pod用于第三方库的管理

* 环信SDK(V3.1.4 2016-07-08)作为此APP DEMO的IM功能

* Masonry用于界面布局

* FMDB用于数据存储

* MJRefresh用于上拉下拉刷新

* MJExtension用于字典转模型

* SDWebImage用于图片展示下载

* ReactiveCocoa用作响应式编程提高代码可读性

* MLLabel用于Label的图文混排

* IM部分采用MVC架构,朋友圈采用MVVM架构

2.已经实现功能

* 微信首页(列表数据展示、cell侧滑编辑、点击进入聊天详情界面、发送文字图片和语音)

* 通讯录(联系人字母排序、添加联系人)

* 发现(朋友圈、下拉刷新)

* 我(界面、退出功能)

3.待实现功能

* 搜索好友

* 朋友圈细节完善

* 扫一扫

* 相册、钱包

* 其他细节实现

* 摇一摇

* 发送朋友圈信息

* 其他

部分截图





整体架构图






聊天界面

 





通讯录

 





发现






登录

 
感恩感谢那些开源作者们,我在这里就不一一点名感谢了.有了你们在整个项目的开发进度上提升了不少.也让我学会了很多




关于我
QQ群  : 527885963  






期待

* 如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的框架代码看看BUG修复没有)
* 如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢
* 如果你想为LZEasemob3输出代码,请拼命Pull Requests我
 
项目git源码地址 喜欢请star:https://github.com/nacker/LZEasemob3
  查看全部
写在前面的话
(大伙在使用过程中遇到BUG请@我一下,我会去认真迭代这款高仿APP)

 项目简介:
  •  1.此版本是有史以来Github上最牛逼的高仿微信项目没有之一,采用MVVM和MVC两种开发架构思想,纯代码开发,这是你们在培训机构学不到的.仅供大家学习使用,不得用于商业用途.最终解释权归作者二哥所有.
  •  2.如果各位下客能帮我点STAR,半个月STAR500+,我会陆陆续续发布待实现功能,其实已经做完,一个月STAR1000+我会把微信主要功能全部实现发布出来,两个月STAR2000+我会发布纯Swift版,纯Swift版采用纯代码开发已经做的差不多了.就看大伙的手能不能点STAR了.希望大家不要下完就跑了.作为作者的二哥会很心痛的.

  • 3.我之前接触过很多项目,就有一个项目中的朋友圈整个控制器4千行,尼玛4千行了这项目怎么迭代,二哥现在300行解决了朋友圈的问题,还在优化中...


高仿微信计划:
测试账号:

nacker 123456
h18 123456

 1.采用技术点

* pod用于第三方库的管理

* 环信SDK(V3.1.4 2016-07-08)作为此APP DEMO的IM功能

* Masonry用于界面布局

* FMDB用于数据存储

* MJRefresh用于上拉下拉刷新

* MJExtension用于字典转模型

* SDWebImage用于图片展示下载

* ReactiveCocoa用作响应式编程提高代码可读性

* MLLabel用于Label的图文混排

* IM部分采用MVC架构,朋友圈采用MVVM架构

2.已经实现功能

* 微信首页(列表数据展示、cell侧滑编辑、点击进入聊天详情界面、发送文字图片和语音)

* 通讯录(联系人字母排序、添加联系人)

* 发现(朋友圈、下拉刷新)

* 我(界面、退出功能)

3.待实现功能

* 搜索好友

* 朋友圈细节完善

* 扫一扫

* 相册、钱包

* 其他细节实现

* 摇一摇

* 发送朋友圈信息

* 其他

部分截图


LZEasemob3.png

整体架构图



LZ1.gif

聊天界面


 


LZ2.gif

通讯录


 


LZ3.gif

发现



LZ4.gif

登录


 
感恩
感谢那些开源作者们,我在这里就不一一点名感谢了.有了你们在整个项目的开发进度上提升了不少.也让我学会了很多




关于我
  • QQ群  : 527885963  


me.png


期待

* 如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的框架代码看看BUG修复没有)
* 如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢
* 如果你想为LZEasemob3输出代码,请拼命Pull Requests我
 
项目git源码地址 喜欢请star:https://github.com/nacker/LZEasemob3
 
4
评论

分享 iOS 使用消息扩展集成头像和昵称的方法 iOS 头像 昵称 扩展

ghysrc 发表了文章 • 1896 次浏览 • 2016-07-13 17:51 • 来自相关话题

虽然文档里有提到,但没说具体怎么实现,demo 看着很绕也不知道有没有...社区里关于这个提问也很多,回答也都不明确,刚上手完全是各种不明白。所以分享一个简单粗暴的办法...
1、找到 EaseUI 里的 EaseMessageViewController.m
2、给所有的 sendXXXMessage 里添加消息扩展,如下图:

图中是图片消息和语音消息的示例,其他消息都是一样的。
3、在 modelForMessage 里将消息的扩展取出,给 model 的 avatarURLPath 和 nickname 赋值即可。

  查看全部
虽然文档里有提到,但没说具体怎么实现,demo 看着很绕也不知道有没有...社区里关于这个提问也很多,回答也都不明确,刚上手完全是各种不明白。所以分享一个简单粗暴的办法...
1、找到 EaseUI 里的 EaseMessageViewController.m
2、给所有的 sendXXXMessage 里添加消息扩展,如下图:

图中是图片消息和语音消息的示例,其他消息都是一样的。
3、在 modelForMessage 里将消息的扩展取出,给 model 的 avatarURLPath 和 nickname 赋值即可。

 
1
评论

求一份环信集成群聊的demo 437586324@qq.com 谢谢 群聊demo iOS

XDKnights 发表了文章 • 363 次浏览 • 2016-07-13 17:51 • 来自相关话题

如题
如题
3
评论

iOS 1分钟集成环信单聊 iOS 环信

beyond 发表了文章 • 2003 次浏览 • 2016-07-08 11:46 • 来自相关话题

Time:2017年7月7
上一篇:环信SDK思路
前言:

1.为了实现一分钟,我们只需要知道怎么做实现单聊功能就好。至于为何可以自己看源码。
2.这种集成方式适合在新建的工程中,或者是 你添加的工程的第三方与环信本身中的第三方没有冲突的工程中。
3.这是集成了一位我的好朋友的代码,因此我将时间缩短,并且会一直更新代码。
4.你需要原来已经在环信官网注册拥有了自己的账号,并且已经创建好了一个工程拥有至少一个Appkey。
5.功能并不完善,因此要是看完善功能,建议看官方demo或者其他的博客文章资源。
6.目前版本是最新环信V3.0.准确点是V3.1.3版本。

一.资源准备:

1.下载资源官方demo。ios官方demo
2.下载资源ChatDemo-UI3.00-Simple
3.下载360云盘内容网址(提取码:73a8)
 
二.集成过程:

1.新建工程“personChat”在桌面上。
2.解压ChatDemo-UI3.00-Simple会看到如下内容,并且将ChatSDK于ChatUI添加到自己的工程里面。




添加到工程.png
3.解压打开官方的demo,找到并将libHyphenateFullSDK.a 文件添加到目录【ChatSDK/HyphenateFullSDK/lib】下。(该目录是你刚刚拖进去工程中的目录)。

a.找到文件:




找到.a文件.png
b.添加到路径中:




添加到路径中.png
4.添加10个类库名字如下:CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib




添加类库
5.添加pch文件:将ChatDemo-UI3.00-Simple中的pch直接拖到自己的工程来。并且引用头文件。将pch中的红包功能注销掉。如下图:
a.引入pch文件:




pch添加
b.注销红包:




注销
6.把bitcode设置成NO,因为环信SDK不支持,如下:




bitcode设置为NO
7.comd+B编译运行。运行成功。
8.打开360云盘下载的demo。复制代码在AppDelegate.m 与 viewController里面。如下:
AppDelegate.m里面- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window =[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor=[UIColor whiteColor];
ViewController *VC = [[ViewController alloc]init];
UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:VC];
nav.navigationBar.backgroundColor =[UIColor whiteColor];
self.window.rootViewController = nav;
[self.window makeKeyWindow];
//为了实现单聊功能,我们可以先忽略推送证书
[[EaseSDKHelper shareHelper] easemobApplication:application
didFinishLaunchingWithOptions:launchOptions
appkey:appKey
apnsCertName:nil
otherConfig:nil];

EMError *error = [[EMClient sharedClient] registerWithUsername:@"1" password:@"1"];
if (error==nil) {
NSLog(@"注册成功");
}else{
NSLog(@"注册失败");//注册失败的原因往往是因为用户已经存在了,如果这样子就需要我们重新输入一个ID,重新注册
}

//此处是为了检查注册的账户能不能成功登陆成功。
error = [[EMClient sharedClient] loginWithUsername:@"1" password:@"1"];
if (!error) {
NSLog(@"登录成功");
}else {
NSLog(@"登录失败");
}

return YES;
}在viewcontroller.m 里面如下:(不要忘记引入头文件)#import "ViewController.h"

#import "UserCacheManager.h"
#import "ChatViewController.h"
#import "ChatUIHelper.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

UIButton *my =[UIButton buttonWithType:(UIButtonTypeCustom)];
my.frame = CGRectMake(100, 200, 200, 100);
my.backgroundColor =[UIColor greenColor];
[self.view addSubview:my];
[my addTarget:self action:@selector(myEvent) forControlEvents:UIControlEventTouchUpInside];

}

- (void)myEvent{
//注意此处的用户名与你的注册用户名应该一致,同时用户名就是ID
NSString *userName = @"1";
NSString *pwd = @"1";

[self showHudInView:self.view hint:@"Loading..."];

[[EMClient sharedClient] asyncLoginWithUsername:userName password:pwd success:^{

dispatch_async(dispatch_get_main_queue(), ^{
[self hideHud];
// 保存用户信息
[UserCacheManager saveInfo:userName imgUrl:@"http://img.yxbao.com/news_img/ ... ot%3B nickName:@"哈哈"];

//设置是否自动登录
[[EMClient sharedClient].options setIsAutoLogin:YES];

[[ChatUIHelper shareHelper] asyncGroupFromServer];
[[ChatUIHelper shareHelper] asyncConversationFromDB];
[[ChatUIHelper shareHelper] asyncPushOptions];

//发送自动登陆状态通知
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];

//在跳转的过程中需要写一个你已经注册好的用户ID,这样两个不同的用户ID才能实现单聊功能(我用了两个测试机测试,每一个测试机是一个ID)
ChatViewController *vc = [[ChatViewController alloc]initWithConversationChatter:@"werqwe" conversationType:EMConversationTypeChat];
[self.navigationController pushViewController:vc animated:YES];

});

} failure:^(EMError *aError) {

NSLog(@"%@",aError.description);

}];

}9.最后更改plist文件允许访问http与https:




更改pist文件.png
10搞定了。我去我算了算好像超过1分钟了。(ps:写了一个半小时我去!)

作者:环信热心用户 广州-ios-小草
环信IM互帮互助QQ群:340452063 查看全部
Time:2017年7月7
上一篇:环信SDK思路
前言:

1.为了实现一分钟,我们只需要知道怎么做实现单聊功能就好。至于为何可以自己看源码。
2.这种集成方式适合在新建的工程中,或者是 你添加的工程的第三方与环信本身中的第三方没有冲突的工程中。
3.这是集成了一位我的好朋友的代码,因此我将时间缩短,并且会一直更新代码。
4.你需要原来已经在环信官网注册拥有了自己的账号,并且已经创建好了一个工程拥有至少一个Appkey。
5.功能并不完善,因此要是看完善功能,建议看官方demo或者其他的博客文章资源。
6.目前版本是最新环信V3.0.准确点是V3.1.3版本。

一.资源准备:

1.下载资源官方demo。ios官方demo
2.下载资源ChatDemo-UI3.00-Simple
3.下载360云盘内容网址(提取码:73a8)
 
二.集成过程:

1.新建工程“personChat”在桌面上。
2.解压ChatDemo-UI3.00-Simple会看到如下内容,并且将ChatSDK于ChatUI添加到自己的工程里面。

1025776-f691e8aa2a5e8b2c.png

添加到工程.png


3.解压打开官方的demo,找到并将libHyphenateFullSDK.a 文件添加到目录【ChatSDK/HyphenateFullSDK/lib】下。(该目录是你刚刚拖进去工程中的目录)。

a.找到文件:

1025776-09725a9a74d839ba.png

找到.a文件.png


b.添加到路径中:

1025776-0f519407cad88479.png

添加到路径中.png


4.添加10个类库名字如下:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib

1025776-cdb782e9b464f38d.png

添加类库


5.添加pch文件:将ChatDemo-UI3.00-Simple中的pch直接拖到自己的工程来。并且引用头文件。将pch中的红包功能注销掉。如下图:
a.引入pch文件:

1025776-052d4d231dc2514a.png

pch添加


b.注销红包:

1025776-1d0569cab415e2ed.png

注销


6.把bitcode设置成NO,因为环信SDK不支持,如下:

1025776-1dd69d5dd8207447.png

bitcode设置为NO


7.comd+B编译运行。运行成功。
8.打开360云盘下载的demo。复制代码在AppDelegate.m 与 viewController里面。如下:
AppDelegate.m里面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window =[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor=[UIColor whiteColor];
ViewController *VC = [[ViewController alloc]init];
UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:VC];
nav.navigationBar.backgroundColor =[UIColor whiteColor];
self.window.rootViewController = nav;
[self.window makeKeyWindow];
//为了实现单聊功能,我们可以先忽略推送证书
[[EaseSDKHelper shareHelper] easemobApplication:application
didFinishLaunchingWithOptions:launchOptions
appkey:appKey
apnsCertName:nil
otherConfig:nil];

EMError *error = [[EMClient sharedClient] registerWithUsername:@"1" password:@"1"];
if (error==nil) {
NSLog(@"注册成功");
}else{
NSLog(@"注册失败");//注册失败的原因往往是因为用户已经存在了,如果这样子就需要我们重新输入一个ID,重新注册
}

//此处是为了检查注册的账户能不能成功登陆成功。
error = [[EMClient sharedClient] loginWithUsername:@"1" password:@"1"];
if (!error) {
NSLog(@"登录成功");
}else {
NSLog(@"登录失败");
}

return YES;
}
在viewcontroller.m 里面如下:(不要忘记引入头文件)
#import "ViewController.h"

#import "UserCacheManager.h"
#import "ChatViewController.h"
#import "ChatUIHelper.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

UIButton *my =[UIButton buttonWithType:(UIButtonTypeCustom)];
my.frame = CGRectMake(100, 200, 200, 100);
my.backgroundColor =[UIColor greenColor];
[self.view addSubview:my];
[my addTarget:self action:@selector(myEvent) forControlEvents:UIControlEventTouchUpInside];

}

- (void)myEvent{
//注意此处的用户名与你的注册用户名应该一致,同时用户名就是ID
NSString *userName = @"1";
NSString *pwd = @"1";

[self showHudInView:self.view hint:@"Loading..."];

[[EMClient sharedClient] asyncLoginWithUsername:userName password:pwd success:^{

dispatch_async(dispatch_get_main_queue(), ^{
[self hideHud];
// 保存用户信息
[UserCacheManager saveInfo:userName imgUrl:@"http://img.yxbao.com/news_img/ ... ot%3B nickName:@"哈哈"];

//设置是否自动登录
[[EMClient sharedClient].options setIsAutoLogin:YES];

[[ChatUIHelper shareHelper] asyncGroupFromServer];
[[ChatUIHelper shareHelper] asyncConversationFromDB];
[[ChatUIHelper shareHelper] asyncPushOptions];

//发送自动登陆状态通知
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];

//在跳转的过程中需要写一个你已经注册好的用户ID,这样两个不同的用户ID才能实现单聊功能(我用了两个测试机测试,每一个测试机是一个ID)
ChatViewController *vc = [[ChatViewController alloc]initWithConversationChatter:@"werqwe" conversationType:EMConversationTypeChat];
[self.navigationController pushViewController:vc animated:YES];

});

} failure:^(EMError *aError) {

NSLog(@"%@",aError.description);

}];

}
9.最后更改plist文件允许访问http与https:

1025776-a6bdf468d08edaae.png

更改pist文件.png


10搞定了。我去我算了算好像超过1分钟了。(ps:写了一个半小时我去!)

作者:环信热心用户 广州-ios-小草
环信IM互帮互助QQ群:340452063
0
评论

环信集成SDK的思路 iOS

beyond 发表了文章 • 1097 次浏览 • 2016-07-08 11:37 • 来自相关话题

Time: 2016年7月7
思路总结:

1.官方下载demo。
2.拿到环信的HyphenateFullSDK(包括实时语音、视频功能)与HyphenateSDK,任选其一。
3.新建一个工程或者是拿到要植入的工程。
4.把环信sdk拖到工程中(HyphenateFullSDK或者HyphenateSDK)。
5.添加类库,如下:CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib如果使用的是 xcode7,后缀为 tbd。一共10个类库。
6.SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。
7.更改网址设置为http与htpps全部允许。
8.comd+B 编译要是没有错误,证明导入没有问题。
9.添加EaseUI导入到工程中。
10.comd+B编译报错。

注意:此处是关键的部分,也是最浪费时间的部分,因此一定要有耐心,把所有编译爆红的都要一一解决掉。错误类型:一般是三方类库冲突。(重复引入)
更改原则:仅仅保留环信的MJ刷新类库不变,其他有冲突的 三方库全部注释掉(仅仅指环信里面跟你工程有冲突的类库)。11.comd+B编译,运行成功。
12.单独的将环信demo中ChatViewController搞出来,直接添加到文件里面,把编译报错的地方注释掉。再次运行直到不再报错。
13.随便写一个点击方法,并且实现跳转到ChatViewController里面。
14.跳转过去基本上就能实现单聊功能了。

写这篇文章是为了下一篇详细的环信集成总结做概括。

下一篇:1分钟集成环信单聊

本文作者:环信热心用户广州-ios-小草,联系方式:环信IM互帮互助群QQ群340452063
  查看全部
Time: 2016年7月7
思路总结:

1.官方下载demo。
2.拿到环信的HyphenateFullSDK(包括实时语音、视频功能)与HyphenateSDK,任选其一。
3.新建一个工程或者是拿到要植入的工程。
4.把环信sdk拖到工程中(HyphenateFullSDK或者HyphenateSDK)。
5.添加类库,如下:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib
如果使用的是 xcode7,后缀为 tbd。一共10个类库。
6.SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。
7.更改网址设置为http与htpps全部允许。
8.comd+B 编译要是没有错误,证明导入没有问题。
9.添加EaseUI导入到工程中。
10.comd+B编译报错。

注意:此处是关键的部分,也是最浪费时间的部分,因此一定要有耐心,把所有编译爆红的都要一一解决掉。
错误类型:一般是三方类库冲突。(重复引入)
更改原则:仅仅保留环信的MJ刷新类库不变,其他有冲突的 三方库全部注释掉(仅仅指环信里面跟你工程有冲突的类库)。
11.comd+B编译,运行成功。
12.单独的将环信demo中ChatViewController搞出来,直接添加到文件里面,把编译报错的地方注释掉。再次运行直到不再报错。
13.随便写一个点击方法,并且实现跳转到ChatViewController里面。
14.跳转过去基本上就能实现单聊功能了。

写这篇文章是为了下一篇详细的环信集成总结做概括。

下一篇:1分钟集成环信单聊

本文作者:环信热心用户广州-ios-小草,联系方式:环信IM互帮互助群QQ群340452063
 
0
评论

IOS V2.2.6 Android V2.3.0 release ,环信红包大升级:支持支付宝,支持群内专属红包! 红包 iOS Android 产品快递

beyond 发表了文章 • 1057 次浏览 • 2016-06-29 14:54 • 来自相关话题

 




环信红包支持支付宝支付、支持群内专属红包

Android​ V2.3.0 2016-6-28 更新日志:
修复NetUtils::hasDataConnection()方法在有线网下判断不准确的问题;

红包若干优化和修改:

1、支持群内的专属红包,只有指定用户才能抢红包;

2、支持支付宝;

3、支持系统发的群红包,用户只能看到自己的领取情况;

4、支持绑定多张银行卡,支持解绑银行卡;

5、零钱页支持充值;

6、改版零钱页;

7、支持上传身份证照片做第三通道验证;

8、红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;

9、错误信息梳理,关键错误基于对话框引导;

10、服务端性能数倍的提升;

11、红包数据平台完善统计项;

12、其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。
iOS V2.2.6 2016-06-28 更新日志:
红包功能优化和修改:

1. 支持群内的专属红包,只有指定用户才能抢红包;


2. 支持支付宝;


3. 支持系统发的群红包,用户只能看到自己的领取情况;


4. 支持绑定多张银行卡,支持解绑银行卡;


5. 零钱页支持充值;


6. 改版零钱页;


7. 支持上传身份证照片做第三通道验证;


8. 红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;


9. 错误信息梳理,关键错误基于对话框引导;


10. 服务端性能数倍的提升;


11. 红包数据平台完善统计项;


12. 其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。
版本历史:Android sdk更新日志  ios sdk 更新日志
 
下载地址:sdk下载
 
关于新版sdk使用有任何问题或建议欢迎在下方评论留言。 查看全部
 

XI~~5X2PBYXXP~P~W7@VU2N.png

环信红包支持支付宝支付、支持群内专属红包



Android​ V2.3.0 2016-6-28 更新日志:

修复NetUtils::hasDataConnection()方法在有线网下判断不准确的问题; 

红包若干优化和修改:

1、支持群内的专属红包,只有指定用户才能抢红包;

2、支持支付宝;

3、支持系统发的群红包,用户只能看到自己的领取情况;

4、支持绑定多张银行卡,支持解绑银行卡;

5、零钱页支持充值;

6、改版零钱页;

7、支持上传身份证照片做第三通道验证;

8、红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;

9、错误信息梳理,关键错误基于对话框引导;

10、服务端性能数倍的提升;

11、红包数据平台完善统计项;

12、其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。


iOS V2.2.6 2016-06-28 更新日志:

红包功能优化和修改: 

1. 支持群内的专属红包,只有指定用户才能抢红包;


2. 支持支付宝;


3. 支持系统发的群红包,用户只能看到自己的领取情况;


4. 支持绑定多张银行卡,支持解绑银行卡;


5. 零钱页支持充值;


6. 改版零钱页;


7. 支持上传身份证照片做第三通道验证;


8. 红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;


9. 错误信息梳理,关键错误基于对话框引导;


10. 服务端性能数倍的提升;


11. 红包数据平台完善统计项;


12. 其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。


版本历史:Android sdk更新日志  ios sdk 更新日志
 
下载地址:sdk下载
 
关于新版sdk使用有任何问题或建议欢迎在下方评论留言。
0
评论

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

beyond 发表了文章 • 1720 次浏览 • 2016-06-21 23:39 • 来自相关话题

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

1、sdk和静态库的导入

首先是导入环信的sdk,编译,这个过程的困难不是很多,简单提一下,首先下载好EaseMobSDK,这里注意一点的是,lib静态库中包括EaseMobClientSDKLite和EaseMobClientSDK这两种,如果你需要实时语音的话选择EaseMobClientSDK,否则选择EaseMobClientSDKLite,两者只能导入一个。
添加静态库CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib

SDK包含实时语音依赖库有CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib

(注意:SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。)
然后编译工程,不出意外就成功啦。啊哈哈,开瓶啤酒庆祝一下自己的智商。如果,有些小猴子不成功,例如我





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

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

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

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




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




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




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




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

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

常见问题:
1.当你导入FixFopen.c的时候会出现





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




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




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

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

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




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




消息cell和自定义消息
4.自定义消息的发送直接调用就好了,这个很方便,消息拓展Ext的字段和类型需要提前商定[EaseSDKHelper sendTextMessage:@"自定义消息"
to:self.easeGroupId
messageType:eMessageTypeGroupChat
requireEncryption:NO
messageExt:tmpDict];暂时完结

暂时分享这么多,希望大家都能成功集成,顺利拿下项目。用第三方的demo集成,一定要知其所以然,一点一滴做起。有什么问题可以随时留言交流,希望我写的能让你们少走点弯路。谢谢大家支持。
 
作者:环信热心用户睡不着的叶 查看全部
刚做完一个拥有即时聊天模块的项目,项目中用的是环信3.0,虽然感觉中间有点小坑,但是总体感觉还是棒棒哒,比我两年前纯用XMPP+openfire便捷多了,而且环信的开发文档感觉好对我的胃口,写的很用心,所以喽,今天分享一下环信的集成和UI页面的摘取。
一、准备工作

1、sdk和静态库的导入

首先是导入环信的sdk,编译,这个过程的困难不是很多,简单提一下,首先下载好EaseMobSDK,这里注意一点的是,lib静态库中包括EaseMobClientSDKLite和EaseMobClientSDK这两种,如果你需要实时语音的话选择EaseMobClientSDK,否则选择EaseMobClientSDKLite,两者只能导入一个。
添加静态库
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib

SDK包含实时语音依赖库有
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib

(注意:SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。)
然后编译工程,不出意外就成功啦。啊哈哈,开瓶啤酒庆祝一下自己的智商。如果,有些小猴子不成功,例如我

1749914-70edd6763efa88d5.png

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

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

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

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

1749914-5458dd68d14de923.png

消息列表


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

1749914-4f9c4d2b55b1e72e.png

聊天页面


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

1749914-1721afb021ce978d.png

相关


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

1749914-172401b50f5ecdda.png

环信相关


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

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

常见问题:
1.当你导入FixFopen.c的时候会出现

1749914-528d1ec0fee416d4.png

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

1749914-d3c130f9a9efc202.png

依赖库


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

1749914-ff74359772cc057d.png

pch问题


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

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

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

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

1749914-ae4a25aa3fd43542.png

消息cell和自定义消息


4.自定义消息的发送直接调用就好了,这个很方便,消息拓展Ext的字段和类型需要提前商定
[EaseSDKHelper sendTextMessage:@"自定义消息"
to:self.easeGroupId
messageType:eMessageTypeGroupChat
requireEncryption:NO
messageExt:tmpDict];
暂时完结

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

ios V3.1.3 release 支持ipv6 产品快递 iOS

beyond 发表了文章 • 2972 次浏览 • 2016-05-30 12:18 • 来自相关话题

 
IOS V3.1.3 2016-5-27 更新日志 
 
新功能:
SDK增加实时视频通话切换摄像头功能。
SDK支持ipv6。
消息支持按照本地时间或者服务器时间排序。
Demo支持单聊发送红包和群聊发送红包。

bug fix:
修复自动同意好友请求有延迟的问题。

SDK细节调整:
SDK将第三方依赖从SDK静态库分离出来(libssl.a,libcrypto.a,libcurl.a)
版本历史:ios更新日志ios更新日志
下载地址:sdk下载
 
关于新版sdk使用有任何问题或建议请在下方评论留言 查看全部
24958PICwjQ_1024.jpg

 
IOS V3.1.3 2016-5-27 更新日志 
 
新功能:

SDK增加实时视频通话切换摄像头功能。
SDK支持ipv6。
消息支持按照本地时间或者服务器时间排序。
Demo支持单聊发送红包和群聊发送红包。



bug fix:

修复自动同意好友请求有延迟的问题。



SDK细节调整:

SDK将第三方依赖从SDK静态库分离出来(libssl.a,libcrypto.a,libcurl.a)


版本历史:ios更新日志ios更新日志
下载地址:sdk下载
 
关于新版sdk使用有任何问题或建议请在下方评论留言
0
评论

检测一下大家的OC基础,最新ios面试题,你能回答上哪些? iOS

beyond 发表了文章 • 1017 次浏览 • 2016-05-19 16:29 • 来自相关话题

哈哈,没有地址,此时我的内心的meng 比的!
 1.说说内存管理

2、ASIRequest是什么;

3、怎么输出json字符串;

4、说说http头部有哪些内容;

5、说说OC生命周期;

6、运用第三方框架,到时候出了问题,谁来负责

7、自己写一个strcpy函数

8、字母统计(如,输入字符串“aabbbccddddaaaaa”,输出“2a3b2c4d5a”)

9、你用过哪些框架

10、进程与线程的区别

11、开辟线程的方式有哪些

12、实现进程同步的方式有哪些,或者说你怎么实现进程同步

13、请你谈谈同步和异步,用操作系统知识解释一下。

14、请你谈谈多态

15、怎么将数据写入文件(归档,解当)

16、写一个set方法(retain和copy权限)

17


Int* fun()

{

Int a=5;

Int * p=&a;

Return p;

}

请问:在主函数里面调用fun函数,这样可以吗?如果不可以,请说明为什么,并给出一种解决方案。

18、在颜色中,有GB8888和 GB565标准,前者32位,其中R占8位,G占8位,B占8位,透明度占8位,后者16位,其中,R占5位,G占6位,B占5位。现在要将一个GB8888类型颜色转换成GB565类型,怎么转

19、判断一个数是否为素数

20、优化代码

1、int a=b*4;

2、int a=b/8;

3、int a=b%1;

4、int a=b;

5、int a=(b*3)/8;

21、什么是内联函数?

22、assign,retain,copy的区别

23、面向对象的特性

24、实现一个view从顶部移到底部的动画

25、#ff3344转换成uicolor

26、判断一个链表是否有循环

27、写一个代理类

28、进程之间是怎么通信的

29、oc有哪些优点和缺点

30、什么时候用delegate,什么时候用Notification?

31、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。当你写下面的代码时会发生什么事?

least = MIN(*p++, b);

32、MVC模式的理解

33、堆和栈的区别

34、自动释放池是什么,如何工作

35、写一个委托的interface

36、objective-c的内存管理

37、什么是Notification?

38、下面的声明都是什么意思?

constint a;

intconst a;

constint *a;

int* const a;

intconst * a const;

  查看全部

2100853-64f1f043f15325bc.jpg

哈哈,没有地址,此时我的内心的meng 比的!


 1.说说内存管理

2、ASIRequest是什么;

3、怎么输出json字符串;

4、说说http头部有哪些内容;

5、说说OC生命周期;

6、运用第三方框架,到时候出了问题,谁来负责

7、自己写一个strcpy函数

8、字母统计(如,输入字符串“aabbbccddddaaaaa”,输出“2a3b2c4d5a”)

9、你用过哪些框架

10、进程与线程的区别

11、开辟线程的方式有哪些

12、实现进程同步的方式有哪些,或者说你怎么实现进程同步

13、请你谈谈同步和异步,用操作系统知识解释一下。

14、请你谈谈多态

15、怎么将数据写入文件(归档,解当)

16、写一个set方法(retain和copy权限)

17


Int* fun()

{

Int a=5;

Int * p=&a;

Return p;

}

请问:在主函数里面调用fun函数,这样可以吗?如果不可以,请说明为什么,并给出一种解决方案。

18、在颜色中,有GB8888和 GB565标准,前者32位,其中R占8位,G占8位,B占8位,透明度占8位,后者16位,其中,R占5位,G占6位,B占5位。现在要将一个GB8888类型颜色转换成GB565类型,怎么转

19、判断一个数是否为素数

20、优化代码

1、int a=b*4;

2、int a=b/8;

3、int a=b%1;

4、int a=b;

5、int a=(b*3)/8;

21、什么是内联函数?

22、assign,retain,copy的区别

23、面向对象的特性

24、实现一个view从顶部移到底部的动画

25、#ff3344转换成uicolor

26、判断一个链表是否有循环

27、写一个代理类

28、进程之间是怎么通信的

29、oc有哪些优点和缺点

30、什么时候用delegate,什么时候用Notification?

31、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。当你写下面的代码时会发生什么事?

least = MIN(*p++, b);

32、MVC模式的理解

33、堆和栈的区别

34、自动释放池是什么,如何工作

35、写一个委托的interface

36、objective-c的内存管理

37、什么是Notification?

38、下面的声明都是什么意思?

constint a;

intconst a;

constint *a;

int* const a;

intconst * a const;

 
0
评论

iOS项目更新之升级Xcode7 & iOS9 libz.tdb Xcode iOS

beyond 发表了文章 • 4815 次浏览 • 2016-05-12 13:12 • 来自相关话题

前言

Apple 的WWDC所发布内容在给大家带来惊喜之际,给各位iOS开发的同仁却也带来了不同程度的麻烦。首先不讲新功能,就单指原来老版本的项目升级、代码升级,就是一堆问题,而且是不得不面临的问题。下面就跟着笔者一起来回顾下,此次在项目升级过程中,所遇到的各个问题点,以及解决方案,与各位已经做过和正在做iOS代码升级的同仁共勉,也给各位将要做Xcode 7和iOS9兼容的同仁以参考。

开发环境安装
 
原本运行得好好的项目,要升级Xcode7,首先就得安装Xcode7,具体的可以从开发者官网下载(目前最新版本是Xcode_7_GM_seed).下载好后,就双击下载好的dmg包,当然,前提还是需要我们的Mac环境升级到Mac OS 10.10.4+(图1.1),就可以打开Xcode安装镜像,如图1.2:




图1.1 Mac OS 更新示意图
 




图1.2 Xcode 7 GM安装
 接下来,我们只要将图1.1所示的Xcode拖动到指定文件夹,即可完成安装,接下来,我们只要双击运行即可。

开发环境运行

各位可能会觉得,笔者在此还要讲开发环境的运行,是不是多此一举。其实并非如此,综合笔者这几年iOS开发经验的总结,运行新版本,特别是测试版本的Xcode是一个需要格外小心的事情,讲起来都是血泪史。

在运行Beta 版本Xcode时,我们需要特别注意以下几个方面:

- 在运行Beta版本Xcode前,务必要退出原来正式版本Xcode(如Xcode 6.4)

- 在运行Beta版本Xcode时,务必要避免双击打开工程文件(也是为了避免新旧版本同时运行)。

- 如果要切换回原来版本时,一定要先退出Beta版本,而且尽可能将Xcode的缓存数据清除。

当然,可能在实际的过程中,还是会有不少朋友就这么干了,当然,如果我们App后续只需要使用新版本Xcode,自然是没有太大关系,只是对于还需要用旧版本来开发或者发布App的朋友,可能就会有点麻烦,可能在用旧版本编译App在运行的时候,就会出现各种诡异的现象(如打印信息明明是正常,App运行逻辑却不正常等)。这时,可能大家要考虑的就是把Xcode删除掉,重新来过,甚至是重装操作系统。当然,不知道是否有朋友有更好的方案。不过笔者是不再想经历这种事情了。

App 项目运行

待项目运行,首先会碰到的问题就是配置兼容,会出现如下错误




图2.1 BitCode 错误
 当我们看到App编译报错的时候,首先想项目不兼容Xcode7,再仔细一看ld: ‘/Volumes/MacintoshHD/…/AnimationDesk Universal/Sources/AnimaitonDesk Universal/Classes/Supporting Files/GoogleLibrary/libGoogleAnalyticsServices.a(TAGDataProvider.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
 其中 ENABLE_BITCODE 吸引了我们的注意,看结合其它的描述信息,基本可以确定是我们使用的第三方静态库(.a)不支持BitCode,当然,我们对应就有如下两种方案来解决:

方法一:更新对应的第三方静态库(现在更新的静态库,基本都能支持BitCode)

方法二:可以将Xcode7默认开启的BitCode功能关闭,如图2.2所示




图2.2 关闭BitCode 操作示意图
 当然,除了上面的问题外,当我们在添加Framework的时候,会发现此前导入的动态链接库(dylib)他部变成了红色,如图2.3所示,所幸的是,就算不替换成Xcode 7新的动态库文件(.tbd),仍然可以正常运行.




图2.3 动态链接库丢失示意图
 最后,部分App在编译的时候,可能还会收到如下报错,小编也遇到过一次All interface orientations must be supported unless the app requires full screen. 看到这句提示,就是说App默认是有开启了多任务功能,而多任务功能是需要App支持所有方向,如果我们App是有需要支持多任务,则需要开启App对各个方向(上、下、左、右)的支持;如果App不需要开启多任务,则只需要将如下示意图的 requires full screen 勾选上就ok(如图2.4)。




图2.4 勾选 Requires full screen示意图
 不出意外,接下来,App应该是能正常编译运行(小编的AnimationDesk Cloud接下来是可以正常运行),但紧接着,发生了更诡异的事情,以前的的网络访问,现在完全访问不通;大家也许会觉得这可能是服务器挂了,或是外网被墙了,小编最初也是这么想的,但事实上,服务器(从Safari)还是能照常被访问,只是App访问不了,于是后来联想到iOS9 WWDC讲到的网络数据传输安全部分,经过一翻折腾,最终,网络访问的部分也恢复了正常。

其实只要在App的Info.plist里面加入如下信息就可以<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict> 添加成功后的示意图如下图(图2.4)




图2.4 添加Transport Security 示意图
 其它事项

可能还有部分朋友跟小编一样,有碰到另外一个现象,就是UITextView,无论怎么设置它的textColor显示的总会是黑色,小编已找到具体的原理,准确地讲,应该是Xcode的一个Bug。

当小编在App开发时,在Xib上面设置过UITextView的背景色(BackgroundColor)为非默认颜色(WhiteColor)时,UITextView的文字颜色(textColor)无论怎么设置,都将会是黑色,如果想要颜色值正常,可以在设置好文本后,再重设一次颜色即可正常。
 
本篇笔记由CocoonJin发表在个人博客,原文地址:http://www.cnblogs.com/CocoonJin/p/4798081.html 查看全部
前言

Apple 的WWDC所发布内容在给大家带来惊喜之际,给各位iOS开发的同仁却也带来了不同程度的麻烦。首先不讲新功能,就单指原来老版本的项目升级、代码升级,就是一堆问题,而且是不得不面临的问题。下面就跟着笔者一起来回顾下,此次在项目升级过程中,所遇到的各个问题点,以及解决方案,与各位已经做过和正在做iOS代码升级的同仁共勉,也给各位将要做Xcode 7和iOS9兼容的同仁以参考。

开发环境安装
 
原本运行得好好的项目,要升级Xcode7,首先就得安装Xcode7,具体的可以从开发者官网下载(目前最新版本是Xcode_7_GM_seed).下载好后,就双击下载好的dmg包,当然,前提还是需要我们的Mac环境升级到Mac OS 10.10.4+(图1.1),就可以打开Xcode安装镜像,如图1.2:

vYjia2.png

图1.1 Mac OS 更新示意图


 

BRviYf7.png

图1.2 Xcode 7 GM安装


 接下来,我们只要将图1.1所示的Xcode拖动到指定文件夹,即可完成安装,接下来,我们只要双击运行即可。

开发环境运行

各位可能会觉得,笔者在此还要讲开发环境的运行,是不是多此一举。其实并非如此,综合笔者这几年iOS开发经验的总结,运行新版本,特别是测试版本的Xcode是一个需要格外小心的事情,讲起来都是血泪史。

在运行Beta 版本Xcode时,我们需要特别注意以下几个方面:

- 在运行Beta版本Xcode前,务必要退出原来正式版本Xcode(如Xcode 6.4)

- 在运行Beta版本Xcode时,务必要避免双击打开工程文件(也是为了避免新旧版本同时运行)。

- 如果要切换回原来版本时,一定要先退出Beta版本,而且尽可能将Xcode的缓存数据清除。

当然,可能在实际的过程中,还是会有不少朋友就这么干了,当然,如果我们App后续只需要使用新版本Xcode,自然是没有太大关系,只是对于还需要用旧版本来开发或者发布App的朋友,可能就会有点麻烦,可能在用旧版本编译App在运行的时候,就会出现各种诡异的现象(如打印信息明明是正常,App运行逻辑却不正常等)。这时,可能大家要考虑的就是把Xcode删除掉,重新来过,甚至是重装操作系统。当然,不知道是否有朋友有更好的方案。不过笔者是不再想经历这种事情了。

App 项目运行

待项目运行,首先会碰到的问题就是配置兼容,会出现如下错误

bUZNJz.png

图2.1 BitCode 错误


 当我们看到App编译报错的时候,首先想项目不兼容Xcode7,再仔细一看
ld: ‘/Volumes/MacintoshHD/…/AnimationDesk Universal/Sources/AnimaitonDesk Universal/Classes/Supporting Files/GoogleLibrary/libGoogleAnalyticsServices.a(TAGDataProvider.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

 其中 ENABLE_BITCODE 吸引了我们的注意,看结合其它的描述信息,基本可以确定是我们使用的第三方静态库(.a)不支持BitCode,当然,我们对应就有如下两种方案来解决:

方法一:更新对应的第三方静态库(现在更新的静态库,基本都能支持BitCode)

方法二:可以将Xcode7默认开启的BitCode功能关闭,如图2.2所示

nUJFJr.png

图2.2 关闭BitCode 操作示意图


 当然,除了上面的问题外,当我们在添加Framework的时候,会发现此前导入的动态链接库(dylib)他部变成了红色,如图2.3所示,所幸的是,就算不替换成Xcode 7新的动态库文件(.tbd),仍然可以正常运行.

7RrAbaF.png

图2.3 动态链接库丢失示意图


 最后,部分App在编译的时候,可能还会收到如下报错,小编也遇到过一次
All interface orientations must be supported unless the app requires full screen.
 看到这句提示,就是说App默认是有开启了多任务功能,而多任务功能是需要App支持所有方向,如果我们App是有需要支持多任务,则需要开启App对各个方向(上、下、左、右)的支持;如果App不需要开启多任务,则只需要将如下示意图的 requires full screen 勾选上就ok(如图2.4)。

vu2MB3.png

图2.4 勾选 Requires full screen示意图


 不出意外,接下来,App应该是能正常编译运行(小编的AnimationDesk Cloud接下来是可以正常运行),但紧接着,发生了更诡异的事情,以前的的网络访问,现在完全访问不通;大家也许会觉得这可能是服务器挂了,或是外网被墙了,小编最初也是这么想的,但事实上,服务器(从Safari)还是能照常被访问,只是App访问不了,于是后来联想到iOS9 WWDC讲到的网络数据传输安全部分,经过一翻折腾,最终,网络访问的部分也恢复了正常。

其实只要在App的Info.plist里面加入如下信息就可以
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
 添加成功后的示意图如下图(图2.4)

QfyIjy.png

图2.4 添加Transport Security 示意图


 其它事项

可能还有部分朋友跟小编一样,有碰到另外一个现象,就是UITextView,无论怎么设置它的textColor显示的总会是黑色,小编已找到具体的原理,准确地讲,应该是Xcode的一个Bug。

当小编在App开发时,在Xib上面设置过UITextView的背景色(BackgroundColor)为非默认颜色(WhiteColor)时,UITextView的文字颜色(textColor)无论怎么设置,都将会是黑色,如果想要颜色值正常,可以在设置好文本后,再重设一次颜色即可正常。
 
本篇笔记由CocoonJin发表在个人博客,原文地址:http://www.cnblogs.com/CocoonJin/p/4798081.html