实战:快速实现iOS应用中集成即时通讯IM和UI

news/2024/4/25 0:02:33/

准备

熟练objective-c语言

有一台mac电脑,并安装了xcode 和 cocoapods

目标

手把手教大家在iOS应用中集成即时通讯IM 功能

内容篇幅较长,需要内心平和耐心看下去,务必戒躁.阅读本文并按照本文进行对接预计时长2小时

注册Appkey和username

本教程以集成环信IM为例

注册环信账号并登录到console后台:

环信即时通讯云

第一步 点击添加应用:

 第二步 创建应用

示例:

第三步,找到刚创建的appkey,并点击查看详情

第四步 创建两个user,并相互加好友

加好友:

至此,在console部分操作完成,并得到了一个appkey和两个user

appkey:1168171101115760#abc ,

username1: user1 ,

password1:1 ,

username2: user2 ,

password2: 1

创建一个简单项目simple,整合IM和UI

创建一个简单项目


 

工程创建成功之后,使用cocoapods进行环信IM集成

示例:

最终效果

第一部分 环信UI库集成方式

环信官方提供了UI库

那么我们有几种方式进行集成呢?

1.利用pod远端拉取集成

2.利用pod集成本地库

3.直接拖入项目

实际上这套UI库并不是最理想的UI库,因为在真正做项目的过程中,我们需要进行大量的改造,以达到符合产品设计的样式.所以这里推荐第二种方式和第三种方式.

第一种方式

参考:https://www.imgeek.net/video/76

第二种方式

参考:https://www.imgeek.org/video/91

我们将会在这里演示第三种方式

第二部分 集成前需要了解

问:集成UI库是否可以直接使用?

答:这里需要注意,实际上UI库仅仅提供了UI功能,并没有提供逻辑部分,所以无法直接拿来使用.

问:那我应该怎么使用?关于逻辑部分在哪里?还需要我自己进行实现吗?

答:不需要,我们可以从官方demo中取出我们需要的UI部分.

问:那么我需要以最快速度集成UI,都需要做什么工作?

答:

1.下载Demo:https://www.easemob.com/download/im

跑通Demo:https://www.imgeek.net/video/76

2.根据产品设计的情况,从第一部分提到的三种方式中选择合适的集成方式.

3.从demo中取出相关界面逻辑并放入在自己的项目中.

第三部分 上手干

这里将会演示第三种集成方

1.首先我们已经跑通了demo,所以我们当前demo的路径如下:

其中:

EaseIM是可运行的项目

EaseUI是官方提供的UI库

2.首先将UI部分拖入项目

把其中多出的plist删除

在podfile中加入

pod 'EMVoiceConvert', '0.1.0'

效果如下:

此时UI部分集成完成.

下一步集成逻辑部分,需要从Demo中提取

并在podfile中加入

创建pch文件(如果项目中有则不用创建)

最后配置项目权限(这里没有进行配置推送)

到这里,我们完成了将IM整合进项目中。

完善代码及IM的UI使用方式

第一步,我们在项目中创建一个负责做配置项的helper 和一个音视频做回调处理的类

类名分别为

EMAppConfig如下所示

EMAppCallHelper如下所示

第二步 在appdelegate中完善

宏定义appkey(定义已经存在,需要修改定义的值)

(另,声网id添加或修改位置在这里)

使用示例如下

实现收发消息

第一部分 参考现有Demo写法

1.发消息的逻辑参考

2.收消息的回调

第二部分,主动实现

如何主动发消息(这里发消息是直接调用SDK发消息)

//构建一个消息体EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"你好,环信"];//构建一条消息EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:"user2" body:body ext:@{}];//设置消息的聊天类型为单聊消息message.chatType = EMChatTypeChat;//将消息发送出去[EMClient.sharedClient.chatManager sendMessage:message progress:^(int progress) {} completion:^(EMChatMessage * _Nullable message, EMError * _Nullable error) {if(error){NSLog(@"发送失败(%d):%@",error.code,error.errorDescription);}else{NSLog(@"发送成功");}}];

如何收到消息

另:代理可以添加多份,不过如果在不需要代理的情况下一定要移除,否则会被强引用,无法释放

至此,我们已将IM和UI整合至项目中。大功告成!

阅读推荐:深度改造聊天界面的cell:https://www.imgeek.org/video/121


http://www.ppmy.cn/news/48447.html

相关文章

Rhodamine-PEG-NH2,罗丹明-聚乙二醇-氨基的结构式,一文了解RB-PEG-NH2的使用

RB-PEG-NH2,罗丹明-聚乙二醇-氨基 中文名称:罗丹明-聚乙二醇-氨基 英文名称:RB-PEG-NH2 性状:粉红色/红色固体或者粘稠液体,取决于分子量大小。 溶剂:溶于水和常规性有机溶剂 激发/发射波长:570nm/590…

NetSuite Sublist解释

今朝汇编一下Sublist主题的知识点以备忘。 2个数据源类型 Related Record - 以Saved Search建立的关联记录;Child Record - 父子表; 1. Related Record Saved Search关键点 这种形式的Sublist是利用Saved Search作为Sublist的数据源,将某…

10万字智慧政务大数据治理平台解决方案(word)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1 项目整体建设规划方案 按照《省人民政府关于推进数字政府建设的指导意见》(鄂政发(2019) 4号)的规则要求,结合XX市“互联网政府服务”建设现状&am…

SQL97 返回顾客名称和相关订单号以及每个订单的总价

描述 Customers 表有字段,顾客名称:cust_name、顾客id:cust_id cust_idcust_namecust10andycust1bencust2tonycust22tomcust221ancust2217hex Orders订单信息表,含有字段,订单号:order_num、顾客id&…

核心业务9:还款业务实现和首页信息展示的完善

核心业务9:还款业务实现 1.还款业务前端 2.还款业务流程图 3.汇付宝接口调用 4.尚融宝接口调用 5.首页信息展示的完善 6.资金记录展示 核心业务9:还款业务实现 1.还款业务前端 按钮 pages/lend/_id.vue

探索Qt图像处理的奥秘:从入门到精通

探索Qt图像处理的奥秘:从入门到精通(Exploring the Secrets of Qt Image Processing: From Beginner to Expert) 引言:Qt图像处理的概述和应用(Introduction: Overview and Applications of Qt Image Processing&#…

C++游戏分析与破解方法介绍

1、C游戏简介 目前手机游戏直接用C开发的已经不多,使用C开发的多是早期的基于cocos2dx的游戏,因此我们这里就以cocos2d-x为例讲解C游戏的分析与破解方法。 Cocos2d-x是一个移动端游戏开发框架,可以使用C或者lua进行开发,也可以混…

机器学习 day06(向量化应用于多元线性回归的梯度下降算法,正规方程)

1. 向量化多元线性回归,及梯度下降算法 将W₁,…,Wn写成向量W,将X₁,…,Xn写成向量X,而b还是之前的b注意:在多元线性回归的梯度下降算法中,Wj是指从W₁到Wn中的某一项&…

通识哈夫曼树及其应用,一起来构造属于自己的哈夫曼树

1.哈夫曼树的背景 哈夫曼(霍夫曼、赫夫曼)David Albert Huffman(August9,1925-October7,1999)。计算机科学的先驱,以他的哈夫曼编码闻名,在他的一生中,对于有限状态自动机,开关电路,异步过程和信…

死磕“增长”:火山引擎的实用主义

作者 | 曾响铃 文 | 响铃说 在刘慈欣的科幻小说《三体》中,地外文明为了封锁地球科技,在天文台向地球科学家展现了「宇宙闪烁」这一奇观,试图颠覆人类的认知,从而影响科技进步,促使地球科技发展陷入停滞。 如今&…

playwright实战篇(tx、ali225)

人人都笑金角,人人都是金角推荐文章: 1、https://playwright.dev/python/docs/api/class-playwright //官方文档 2、https://cuiqingcai.com/36045.html //崔庆才教程 3、https://github.com/qqq732004709/ //实战参考 4、https://www.cnblogs.com/ca…

4.17~4.18学习总结

网络编程 概述 1.什么是网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输,计算机跟计算机之间可以通过网络进行数据传输。 2.常见的软件架构: B/S,C/S 3.通信的软件架构CS BS各有什么区别和优点…

java 快排算法详解,java 快排代码

快排是一种高效的数据结构,它使用一个关键字(Key)来表示数据元素的一个集合。也就是说,快排是一个有序数组,而这个有序数组由两个元素组成。 快排的基本思想是:如果数组元素的值比它前面的两个元素都大&…

一文搞懂Java中的异常问题

思考几个问题 1:JavaWeb系统中,我的代码未做任何处理,报错了还会往下执行吗? 2:JavaWeb系统中,我的代码做了 try catch finally, 报错了还会往下执行吗? 3:JavaWeb系统中&#xff0c…

制造业数字化转型评价指标体系构建与应用

数字化转型的过程不是机械简单性的线性组合,而是由一系列分叉、突变、自组织等复杂行为组成,是一个复杂性系统演变的过程。 本文从架构的理念出发,构建制造业数字化转型架构,并基于参考架构给出评估制造业数字化转型发展过程的评估…

mulesoft MCIA破釜沉舟备考 2023.04.19.19

mulesoft MCIA破釜沉舟备考 2023.04.19.19 1. A Kubernetes controller automatically adds another pod replica to the resource pool in response to increased application load.2. According to MuleSoft, what is a major distinguishing characteristic of an applicati…

Spring中最常用的11个扩展点

一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。 它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。 除此之外,我们在使…

采用自底向上的方法构造大根堆

文章目录 采用自底向上的方法构造大根堆程序设计程序分析采用自底向上的方法构造大根堆 【问题描述】用自底向上算法为一组整数构造一个大根堆。 【输入形式】第一行输入一个不为0的整数n,第二行输入需要构造堆的n个整数; 【输出形式】创建好的大根堆; 【样例输入】 6 2 9 7…

哪些买家接受Sedex报告?都有什么不同条件?

【哪些买家接受Sedex报告?都有什么不同条件?】 Sedex--全球性的供应商社会责任信息交换平台,是供货商商业道德信息交流的缩写形式(Supplier Ethical Data Exchange)。 用于帮助各公司储存其业务范围内的劳动准则信息&a…

C++ 引用

什么是引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。(语法层面来讲) 但在底层实际上引用是开辟空间的,类似于指针 …