HarmonyOS实战:腾讯IM之聊天列表搭建(一)

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,1000CU*H 3个月
简介: 本文详细介绍了在鸿蒙系统中实现腾讯IM聊天列表页面的过程。由于腾讯仅提供了接口而无现成UI,需自行开发。文章涵盖需求分析(如删除功能、时间排序、消息更新)、技术实现(展示会话列表、新增会话、删除会话)等内容,并附代码示例。最终实现了类似微信的聊天列表功能,建议点赞收藏以便后续参考。

前言

因日常工作需要使用鸿蒙版腾讯 IM 聊天功能,但是腾讯 IM 只提供了相关接口,并没有像安卓和 iOS 一样提供配套的 UI 页面。这点不得不吐槽一下腾讯,作为互联网巨头鸿蒙开发进度怎么就这么慢,没办法只能对比着微信自己一点点去实现相关功能,本篇文章将详细介绍聊天列表页面的搭建过程,建议点赞收藏!

实现效果

先看本文的最终实现效果如下:

需求分析

  • 支持删除功能。
  • 支持按照收到消息的时间排序。
  • 支持消息更新及插入新消息。

技术实现

展示会话列表

  1. 首先获取默认会话列表,这里根据 IM 的 SDK 提供的方法,调用 V2TIMManager.getConversationManager获取默认会话列表数据。
V2TIMManager.getConversationManager()
      .getConversationListByFilter(this.page, this.pageSize)
      .then((result: V2TIMConversationResult) => {
        
      })
  1. 得到默认会话列表数据后,需要将实现一个 List 列表展示会话列表,这里需要注意 keyGenerator 的定义。
List() {
      LazyForEach(this.dateSource, (item: V2TIMConversation, index: number) => {
        ListItem() {
          this.ItemLayout(item)
        }.swipeAction({
          end: {
            builder: () => {
              this.DeleteView(index, () => {
                this.deleteDialog.open()
              })
            }
          }
        })
      }, (item: V2TIMConversation, index: number) => index + ""+ (item!=undefined&& item.lastMessage!=undefined &&item.lastMessage.timestamp !=undefined?item.lastMessage.timestamp:""))
    }

lazyForEach 中的 keyGenerator 必须使用消息里面的时间戳作为唯一的键值,否则会报错。swipeAction 是侧滑删除功能。

新增会话

当收新联系人发来的信息或已经在列表中的联系人发来的信息时,需要将联系人插入到消息列表头部。

  1. 首先增加实时会话监听,使用ConversationTestInterfaces.addConversationListener 监听实时会话。
/**
   * 会话监听
   */
  conversationListener: V2TIMConversationListener = {
    onConversationChanged: (conversationList: V2TIMConversation[]) => {
       //实时会话
    
    },
  };
ConversationTestInterfaces.addConversationListener(this.conversationListener)
  1. 首先需要对实时收到的会话进行过滤,判断新收到的会话是否已经存在在列表中,如果存在则将会话插入到列表头部,如果已经存在则需要将会话移动到列表头部。
let newList = this.dateSource.getDataAll().filter((item, index) => {
        return conversationList[0].conversationID == item.conversationID
      })
  1. 对得到的实时会话列表进行筛选,以conversationID 作为匹配条件。如果新收到的会话不存在,则将会话插入列表中。
this.dateSource.pushData(conversationList[0])
  1. 如果新收到的会话已经存在,则需要将新的会话插入到列表头部,这里先删除旧的会话数据,然后将新的会话数据插入列表中。
let index = this.dateSource.getDataAll().indexOf(newList[0])
  this.dateSource.deleteData(index)
  this.dateSource.pushData(conversationList[0])
  1. 新的会话数据插入列表后,数据并没有位于列表头部,最后需要对数据进行排序即可,这里以会话时间作为比较。
if (this.dateSource.getDataAll().length > 1) {
        this.dateSource.getDataAll().sort((a, b) => (b!=undefined&& b.lastMessage!=undefined && b.lastMessage.timestamp!=undefined?b.lastMessage.timestamp:0 ) - (a!=undefined&& a.lastMessage!=undefined && a.lastMessage.timestamp!=undefined?a.lastMessage.timestamp:0 ))
      }

删除会话

会话删除就比较简单了,直接根据会话 ID 进行删除即可。

V2TIMManager.getConversationManager()
            .deleteConversation(conversation.conversationID)
            .then(() => {
               //更新列表
            })
            .catch((error: Error) => {
            });

总结

腾讯 IM 功能十分复杂,本篇文章仅仅实现了会话列表功能,所有代码逻辑都需要自己动手处理,鸿蒙版的 IM SDK 只提供了接口,所以在实际实现过程中肯定会遇到很多问题需要自己克服,最终实现和微信相同的功能。下篇文章开始搭建聊天详情功能,需要接入鸿蒙 IM 的小伙伴赶紧收藏起来吧 !

目录
相关文章
|
1月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
379 37
|
2月前
|
开发者 容器
鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Column和Row组件的使用以及线性布局的方法。
274 12
|
2月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解滑块Slider和进度条Progress组件的使用。
165 1
|
1月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
238 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
204 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
520 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
122 0
|
2月前
鸿蒙应用开发从入门到实战(十六):线性布局案例
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文通过简单案例演示如何使用Column和Row组件实现线性布局。
148 1
|
2月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供滑块Slider与进度条Progress组件,用于鸿蒙原生APP开发。Slider支持拖动调节音量、亮度等,可设步长、方向及提示气泡;Progress支持线性、环形等多种样式,可自定义颜色、宽度与刻度,实时显示任务进度。
232 2
|
2月前
|
开发者
鸿蒙应用开发从入门到实战(十二):ArkUI组件Button&Toggle
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解按钮组件Button和Toggle的使用。
290 2
下一篇
oss云网关配置