说明:目前swift环信集成 通过pod方式集成后打开聊天界面会一直报如下的错,目前还没找到解决方式,但是同手动集成 sdk以及EaseUI就可以正常使用,本片博客,介绍的就是通过手动方式集成,如果哪个同僚解决了通过 pod方式集成报的错误,请联系我:我的微信:13022861472

第一步,从环信官网下载环信 SDK

2.将 ‘HyphenateFullSDK’导入项目

HyphenateFullSDK:是包含音视频的
HyphenateSDK:是不包含音视频的

3.向General → Embedded Binaries 中添加依赖库

添加动态库:需要在TARGETS -> General -> Embedded Binaries 中添加动态库,

如果 Linked Frameworks and Libraries 中有两个 ‘Hyphenate.framework’库,就删掉一个

4. 添加其它第三方的依赖库

在 Build Phases ->Linked Frameworks and Libraries处添加

这些是要添加的库(11个)
Pods_EMTest除外

5.配置一些信息

在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据。此处设置为暂时退回到http协议。

6.导入EaseUI库

bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上;第三方SDK没有支持Bitcode包就选no

7.创建桥接文件


8.创建 pch文件


9.继承 EaseMessageViewController 实现聊天界面

//
//  ChatViewController.swift
//  HuanXinDome
//
//import UIKitclass ChatViewController: EaseMessageViewController {//跟对方聊天时,调用的初始化方法,第一个参数为对方的环信注册的id ,第二个参数为聊天的类型 EMConversationTypeChat:单聊override init!(conversationChatter: String!, conversationType: EMConversationType) {super.init(conversationChatter: conversationChatter, conversationType: conversationType)}override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {super.init(nibName: nil, bundle: nil)}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}/*// MARK: - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigationoverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {// Get the new view controller using segue.destinationViewController.// Pass the selected object to the new view controller.}*/}

9.初始化,登录,进行聊天

//
//  AppDelegate.swift
//  HuanXinDome
//
//  Created by 陕西帮你电子科技有限公司 on 2018/6/15.
//  Copyright © 2018年 陕西帮你电子科技有限公司. All rights reserved.
//import UIKit@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {// Override point for customization after application launch.//环信配置let options:EMOptions = EMOptions.init(appkey: "申请的appkey")options.apnsCertName = "创建的推送证书名字"let error = EMClient.shared().initializeSDK(with: options)if error == nil{print("环信初始化成功")let emId = "13233253173"//登录的环信idlet emPwd = "pd13233253173"//密码let error = EMClient.shared().login(withUsername: emId, password: emPwd)if error == nil{self.window = UIWindow.init(frame: UIScreen.main.bounds)print("登录成功")let dui_emId = "15991788992" //要聊的对方的环信id//打开聊天界面与对方聊天(第一个参数为聊天对方的id,第二个参数为聊天的类型(此处为单聊))let vc = ChatViewController.init(conversationChatter: dui_emId, conversationType: EMConversationTypeChat)vc?.title = "你正在和15991788992聊天"let nav = UINavigationController.init(rootViewController: vc!)self.window?.rootViewController = navself.window?.makeKeyAndVisible()}}return true}func applicationWillResignActive(_ application: UIApplication) {// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.}func applicationDidEnterBackground(_ application: UIApplication) {// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.}func applicationWillEnterForeground(_ application: UIApplication) {// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.}func applicationDidBecomeActive(_ application: UIApplication) {// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.}func applicationWillTerminate(_ application: UIApplication) {// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.}}

完成
Dome地址

ios-swift-环信集成相关推荐

  1. 03-即时通讯 环信集成

    环信 环信是在XMPP的基础上进行的二次开发 环信在网络上传输的数据是XML 环信 是否使用过环信,简单说一下环信的实现原理 环信是一个即时通讯的服务提供商 环信使用的是XMPP协议,它是在XMPP的 ...

  2. iOS - EaseMob 环信的使用

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

  3. 环信集成全过程有demo

    写在前面:普通的应用中一般只用到传输文件,发送文字图片信息,所以此处不做语音视频通讯的集成,够用就行,红色字体基本是都是坑,大家注意了 由于easeui bug太多,集成繁琐,不符合项目要求,所以自己 ...

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

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

  5. android环信集成单聊,环信即时通讯单聊集成

    [实例简介] 环信即时通讯单聊集成,添加好友,实现单聊,可以学习下 [实例截图] [核心代码] IM └── IM ├── AndroidManifest.xml ├── bin │   ├── An ...

  6. android 环信集成,Android Studio下的环信即时通讯简单集成

    环信即时通讯云是全球最大的即时通讯云 PaaS 平台,可以快速实现APP的即时通讯的功能,官方的DEMO是基于Eclipse开发的,对于新版本的Android Studio支持不太好,下面就简单说一下 ...

  7. iOS 基于环信SDK实现即时通讯-文字聊天

    这里介绍集成环信SDK3.0自定义聊天页面,后面有练习项目地址 首先到环信官网下载环信SDK.由于后续会实现语音.视频,我这里使用的是带有语音的SDK 下载完成后把HyphenateFullSDK文件 ...

  8. 【环信IM集成指南】Android 端常见问题整理

    1.如何修改系统通知中的头像和用户名 系统通知是在主module中自己写的,demo中是AgreeMsgDelegate,InviteMsgDelegate,OtherMsgDelegate中去修改头 ...

  9. 环信IM客户端集成(整理)

    1. 环信IM功能介绍 1. 平台架构 2. 发送消息                 1. 为开发者提供基于移动互联网的即时通讯能力,如单聊.群聊.发语音.发图片.发位置.实时音频.实时视频等.   ...

  10. 即时通信---环信SDK(IOS)使用教程

    一. 提前准备 注册环信即时通讯云账号 下载iOS的环信SDK 登陆到管理后台 在我的应用中创建一个应用 在苹果的个人开发中心创建一个推送证书(当然不创建也没用关系,只是不能推送消息而已) 创建完证书 ...

最新文章

  1. go环境变量配置 (GOROOT和GOPATH)
  2. 基于jquery的serializeArray
  3. ubuntu系统声音_今日热闻 | 小米11有望首发骁龙875、折叠iPhone测试、新规禁止网购忽悠打折、印度真米粉、M1 Mac运行Ubuntu...
  4. PAT_A1106#Lowest Price in Supply Chain
  5. 电话之父贝尔的传奇一生
  6. Android开发之百度地图定位以及简单覆盖物的实现
  7. 多维度创新打造领先阿里云技术生态
  8. 数字0-9的数量(51Nod-1042)
  9. TurboMail邮件服务器帮你应付电子邮件归档危机
  10. IBatisNet初步体验
  11. 4.3 CMMI4级——定量项目管理(Quatitative Project Management)
  12. QT界面窗口的显示和隐藏,关闭
  13. Sicar标准柜架模板 3.0 版 西门子S7-1500PLC PN总线程序
  14. 2017 暑期实习校园招聘(Java后台开发方向)面经分享
  15. 鹿晗关晓彤公开恋情,是如何把微博服务器搞炸的
  16. 经济基础知识(中级)【4】
  17. python语义分割数据标签,将数字标签转彩色标签
  18. 数据结构PTA案例7-1.3 寻找大富翁
  19. (Modern Family S01E01) Part 9 PhilClair 射Luke、Haley和Dylan躺床上看电影
  20. lsdyna如何设置set中的node_list_Redis 系列教程(二)Redis中的五种数据类型

热门文章

  1. 迅雷离线下载怎么使用?迅雷离线下载使用方法
  2. YY 数据库平台化建设实践
  3. 碰到斑马打印机下载字体问题
  4. 28 | 机器学习:如何教会机器识别黑灰产?
  5. stm32 火灾自动报警及联动控制源码_火灾自动报警系统和消防联动系统的区别
  6. csv格式导出,身份证号码显示不全
  7. 2019西安邀请赛游记
  8. 美赛常用数据库网站大全
  9. [休闲]GDC China 2007上海中国游戏开发者大会
  10. 浅谈feature-based 和 fine-tune