环信iOS端3.0版本集成记录--聊天界面篇

环信离线推送证书。。。

1,环信处在后台的时候,消息的接收与推送

离线发推送

配置属性

  1. EMCallOptions *options = [[EMClient sharedClient].callManager getCallOptions];
  2. //当对方不在线时,是否给对方发送离线消息和推送,并等待对方回应
  3. options.isSendPushIfOffline = NO;
  4. [[EMClient sharedClient].callManager setCallOptions:options];

监听回调

  1. [[EMClient sharedClient].callManager setBuilderDelegate:self];

处理回调

  1. - (void)callRemoteOffline:(NSString *)aRemoteName
  2. {
  3. NSString *text = [[EMClient sharedClient].callManager getCallOptions].offlineMessageText;
  4. EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:text];
  5. NSString *fromStr = [EMClient sharedClient].currentUsername;
  6. EMMessage *message = [[EMMessage alloc] initWithConversationID:aRemoteName from:fromStr to:aRemoteName body:body ext:@{@"em_apns_ext":@{@"em_push_title":text}}];
  7. message.chatType = EMChatTypeChat;
  8. [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
  9. }

前提:

观看视屏,视频地址如下: 
环信SDK集成:http://www.imgeek.org/video/40 
环信EaseUI集成:http://www.imgeek.org/video/39

具体集成过程:

一: 添加依赖库

  1. CoreMedia.framework
  2. AudioToolbox.framework
  3. AVFoundation.framework
  4. 4.MobileCoreServices.framework
  5. ImageIO.framework
  6. libc++.tbd
  7. libz,tbd
  8. libsqlite3.tbd
  9. libstdc++.6.0.9.tbd
  10. Foundation.framework
  11. libiconv.tbd (Xcode7以上)

最终效果如图: 

二:一些设置

1.修改info.plist文件,适配iOS9以上系统,在info.plist中添加

  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSAllowsArbitraryLoads</key>
  4. <true/>
  5. </dict>

2.修改info.plist文件,适配iOS10.0,在info.plist中添加

为了调用相册,地理位置,话筒,照相机,通讯录

  1. <key>NSPhotoLibraryUsageDescription</key>
  2. <string>中华人需要使用相册服务获取照片</string>
  3. <key>NSCameraUsageDescription</key>
  4. <string>中华人需要使用照相机服务进行拍照获取照片</string>
  5. <key>NSContactsUsageDescription</key>
  6. <string>中华人需要使用通讯录服务进行好友邀请</string>
  7. <key>NSMicrophoneUsageDescription</key>
  8. <string>中华人需要使用话筒进行吐槽反馈信息</string>
  9. <key>NSLocationUsageDescription</key>
  10. <string>中华人需要使用定位服务来发送位置信息</string>

3.Bulid Setting 设置bitcode 为NO,如图:


4.新建pch文件,如图: 

进行设置,如图: 

三:Appdelegate

  1. #import "AppDelegate.h"
  2. #import "ChatViewController.h"
  3. @interface AppDelegate ()
  4. @end
  5. @implementation AppDelegate
  6. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  7. // Override point for customization after application launch.
  8. // SDK的初始化
  9. /**
  10. * EMOptions类是SDK的配置信息
  11. * 可以加入推送证书的名称
  12. */
  13. EMOptions *options = [EMOptions optionsWithAppkey:@"luoxiaoyong#mingxin"];
  14. options.apnsCertName = @"Push_dev";
  15. // 初始化SDK
  16. EMError *error = [[EMClient sharedClient] initializeSDKWithOptions:options];
  17. if (!error) {
  18. NSLog(@"初始化成功");
  19. }
  20. // 登录
  21. error = [[EMClient sharedClient] loginWithUsername:@"xrdaly001" password:@"123456"];
  22. if (!error) {
  23. NSLog(@"登录成功");
  24. }
  25. else {
  26. NSLog(@"登录失败");
  27. }
  28. self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  29. ChatViewController *vc = [[ChatViewController alloc] initWithConversationChatter:@"xrdaly002" conversationType:EMConversationTypeChat];
  30. UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
  31. self.window.rootViewController = nav;
  32. [self.window makeKeyAndVisible];
  33. return YES;
  34. }

四:添加键盘表情(说明)

在EaseMessageViewController.m的viewDidLoad方法结尾处加上

  1. EaseEmotionManager * manager = [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:[EaseEmoji allEmoji]];
  2. [self.faceView setEmotionManagers:@[manager]];

五:国际化文件乱码问题

下载demo,直接把demo中的国际化文件拷贝到现在项目中,ok

一、解析环信

对环信的使用:

1.聊天列表 信息来往判断 (根据最后一次聊天记录,是否有订单记录,订单号、信息)

2.聊天界面 计时关闭会话功能,用户可以手动关闭会话,病例查看,不同医务专家 看到简历目录不同;处于后台消息的推送;消息的点击事件,透传,消息扩展;

3.病例是由订单记录中的身份证获得的,在接收语音视频时,获得身份证1uid+2uid 本地保存;发起的时候 通过通知获得

2.0—3.0变化

3.0 中的核心类为 EMClient 类,通过 EMClient 类可以获取到 chatManager、groupManager、contactManager、roomManager对象。原来 2.0 版本的 SDK 很多方法提供了同步、异步回调、异步(block)三种方法,3.0 版只提供同步方法(async开头的方法为异步方法)。

代码升级替换文档、环信 SDK 3.0 升级文档、使用升级替换脚本

1.如果需要离线推送,制作推送证书

2.环信主要框架 :SDK_Core:是核心的消息同步实现,完成于服务器之间的信息交换;SDK:基于核心协议实现完整的IM功能,实现了不同类型的消息的收发、会话管理、群组、好友、聊天室等

EaseUI:是IM相关的UI控件,可以快速的集成环信功能

3.SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块:

EMClient: 是 SDK 的入口,主要完成登录、退出、连接管理等功能。也是获取其他模块的入口。

EMChatManager: 管理消息的收发,完成会话管理等功能。

EMContactManager: 负责好友的添加删除,黑名单的管理。

EMGroupManager: 负责群组的管理,创建、删除群组,管理群组成员等功能。

EMChatroomManager: 负责聊天室的管理。

注意:如果您是从 SDK2.x 升级到 3.0,可以参考环信 SDK 2.x到3.0升级文档。

4.第三方库介绍

EaseUI 中用到的第三方库:

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

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

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

Demo 中用到的第三方库:

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

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

5.集成动态库上传AppStore

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

在SDK当前路径下执行以下命令删除i386 x86_64两个平台

实时音视频版本Hyphenate.framework

lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7

lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64

lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate

mv Hyphenate Hyphenate.framework/

不包含实时音视频版本HyphenateLite.framework

lipo HyphenateLite.framework/HyphenateLite -thin armv7 -output HyphenateLite_armv7

lipo HyphenateLite.framework/HyphenateLite -thin arm64 -output HyphenateLite_arm64

lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite

mv HyphenateLite HyphenateLite.framework/

6.SDK 同步/异步方法区分

SDK 中,大部分接口都提供了同步和异步方法(注:同步方法会阻塞主线程,需要用户自己创建异步线程执行;带有 block 的方法为异步方法。)

7.自动登录在以下几种情况下会被取消:

用户调用了 SDK 的登出动作;

用户在别的设备上更改了密码,导致此设备上自动登录失败;

用户的账号被从服务器端删除;

用户从另一个设备登录,把当前设备上登录的用户踢出。

所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。

8.初始化单聊、群聊、聊天室页面:文字、图片、语音、视频、位置

EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要发送的消息"];

NSString *from = [[EMClient sharedClient] currentUsername];

//生成Message

EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

message.chatType = EMChatTypeChat;// 设置为单聊消息

//message.chatType = EMChatTypeGroupChat;// 设置为群聊消息

//message.chatType = EMChatTypeChatRoom;// 设置为聊天室消息

构造透传消息

SDK 提供的一种特殊类型的消息,即 CMD,不会存 db,也不会走 APNS 推送,类似一种指令型的消息。比如您的服务器要通知客户端做某些操作,您可以服务器和客户端提前约定好某个字段,当客户端收到约定好的字段时,执行某种特殊操作。

EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action];

NSString *from = [[EMClient sharedClient] currentUsername];

// 生成message

EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

message.chatType = EMChatTypeChat;// 设置为单聊消息

//message.chatType = EMChatTypeGroupChat;// 设置为群聊消息

//message.chatType = EMChatTypeChatRoom;// 设置为聊天室消息

构造扩展消息

当 SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。

这里是扩展自文本消息,如果这个自定义的消息需要用到语音或者图片等,可以扩展自语音、图片消息,亦或是位置消息。

// 以单聊消息举例

EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要发送的消息"];

NSString *from = [[EMClient sharedClient] currentUsername];

//生成Message

EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

message.chatType = EMChatTypeChat;// 设置为单聊消息

//message.chatType = EMChatTypeGroupChat;// 设置为群聊消息

//message.chatType = EMChatTypeChatRoom;// 设置为聊天室消息

message.ext = @{@"key":@"value"}; // 扩展消息部分

iOS 环信集成项目应用的更多相关文章

  1. iOS 环信集成问题(连文档都不说明的坑。。)

    首先,关于环信SDK的下载和一些依赖库的添加,在此我就不做详细介绍,(http://www.easemob.com/download/im)附上环信官网文档,可以看一下,上面都可以下载,也有相关配置介 ...

  2. iOS 环信集成单聊界面,出现消息重复问题

    解决办法很简单,数据重复就是EaseMessageViewController和ChatViewController重复调用了这个吧?//通过会话管理者获取收发消息 [self tableViewDi ...

  3. 集成IOS 环信SDK

    集成IOS SDK 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. 下载SDK 通过Cocoapods下载地址 不包含实时语音版本SDK(EaseMobC ...

  4. 环信集成 2---基于环信Demo3.0,实现单聊功能

    这几天在做环信,所以把环信相关的东西拿过来,做个系统点的东西 注意: 这里Demo集成的是带有实时语音功能的(libEaseMobClientSDK.a). 环信库是直接拖拽EaseMobSDK文件夹 ...

  5. iOS 环信透传cmd消息多次重复接收,解决办法

    由于项目需求,需要在项目中接到消息的时候做不同界面的不同的操作,哪儿需要哪儿就要添加代理:引起代理事件重复执行:所以要在VC显示的时候添加代理,消失的时候删除代理 环信 透传 消息多次接收情况(由于代 ...

  6. 使用环信开发项目遇到错误提示 configure your build for VectorDrawableCompat

    问题描述:在使用AndroidStudio开发项目时,使用环信重写了聊天界面后,运行时app就崩掉了,查看日志报告,提示报错如下: java.lang.RuntimeException: Unable ...

  7. iOS: 环信的推送

    原文:http://m.blog.csdn.net/article/details?id=38824551 1.先创建一个apns证书,链接如下 http://developer.easemob.co ...

  8. iOS 环信消息撤回

    这两天在做环信的消息回撤,在网上找了许久没有这种案例,之后官方的一些方法,但是自己做,还是需要花点时间去整理,所以我决定等我把这个做好之后,分享给大家,如果做的不好多多指教,谢谢- 首先要实现消息撤回 ...

  9. iOS - EaseMob 环信的使用

    1.环信 环信使用的是 XMPP 协议,它是在 XMPP 的基础上进行的二次开发,对服务器 Openfire 和客户端进行功能模型的添加和客户端 SDK 的封装.环信的本质还是使用 XMPP,基于 S ...

随机推荐

  1. alex python of day2

      模块 sys模块:sys模块是用c语言写的,所以在lib下是不会有sys.py这个文件存在 1 import sys 2 print(sys.path) #打印环境变量 3 print(sys.a ...

  2. 使用Gulp构建前端自动化方案

    前言 在刚入门前端的时候,我们并不清楚前端有工具可以帮我们自动化打包压缩文件,当时只关注能实现功能就可以了,也不太在意前端性能优化的问题,随着项目功能的复杂,项目也变得越来越大,页面的执行速度也开始变 ...

  3. 十、VueJs 填坑日记之在项目中使用Amaze UI

    上一篇博文,我们把jQuery集成到了项目中,今天我们来集成Amaze ui(妹子UI).先来介绍一下妹子UI.Amaze UI 含近 20 个 CSS 组件.20 余 JS 组件,更有多个包含不同主 ...

  4. 多服务器操作利器 - Polysh

    多台服务器下的痛苦人生 分布式架构下的系统,可以说每个服务都是分别部署在多台服务器上的,有的甚至还需要多机房,在这种架构下可以说可以很好的做到了易扩展.容灾等功能.推荐的服务部署为一服务多机器.一机器 ...

  5. linux文件、目录

    user用户 group用户组 others其他人用户信息保存在/etc/passwd [root@iZ25het8xn8Z ~]# ls -altotal 56dr-xr-x---. 3 root ...

  6. 【Mysql知识补充】

    一.子查询 1.定义 子查询是将一个查询语句嵌套在另一个查询语句中.内层查询语句的查询结果,可以为外层查询语句提供查询条件.子查询中可以包含:IN.NOT IN.ANY.ALL.EXISTS 和 NO ...

  7. .NET作品集:linux下的博客程序

    博客程序架构 本博客程序是博主11年的时候参考loachs小泥鳅博客内核开发的.net跨平台博客cms,距今已有6年多了,个人博客网站一直在用,虽然没有wordpress那么强大,但是当时在深究.ne ...

  8. Linux中nginx手动安装

    本分类下有一个环境一键安装.那这背后发生了什么呢?咱们手动使用源码进行安装. 1.首先保证有一个能联网的centos. 2.百度 ningx 官网   点download  http://nginx. ...

  9. esp8266 SDK开发之编译流程

    最近刚完成自己8266的小项目,已经发布在github上,有兴趣的朋友可以看一下 github地址:esp-ujn 1. 通过MQTT协议与服务器交互 2. 内置HTTP服务器,支持通过浏览器进行参数 ...

  10. Python操作 Memcache、Redis、RabbitMQ

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...