HarmonyOS实战:腾讯IM之消息删除、撤回和重发(三)

前言

经过前面几篇文章的介绍,基本实现了鸿蒙 IM 聊天的功能,但是完整的腾讯 IM 不仅拥有发送文本的功能,还支持消息的失败重发,删除和撤回等相关功能,本篇文章将详细介绍如何实现这些功能,建议点赞收藏!

实现效果

需求分析

  • 支持消息撤回
  • 支持消息删除
  • 支持消息重发

技术实现

消息撤回

当用户发出 IM 消息后,需要支持在固定时间段内允许用户撤回已经发出的消息,这里默认为 120 秒,而且只允许自己发送的消息撤回。使用消息撤回功能需要调用revokeMessage 方法。

javascript 复制代码
V2TIMManager.getMessageManager()
.revokeMessage(msg)
.then(() => {
      let index = this.messageData.getDataAll().indexOf(msg)
      this.messageData.deleteData(index)
      msg.status = V2TIMMessageStatus.V2TIM_MSG_STATUS_LOCAL_REVOKED
     this.messageData.addData(index, msg)
})
.catch((error: Error) => {
       });

通过调用接口传入被撤回的消息,撤回成功后,将该消息状态修改成撤回状态,列表根据消息状态显示提示语"您撤回了一条消息"。

消息删除

消息删除指删除用户已经发出过的消息记录,包括本地与云端消息,deleteMessage 方法可以实现消息删除,当消息删除接口回调成功后,再将消息从列表中删除即可。

javascript 复制代码
let deleteMsg: Array<V2TIMMessage> = [msg]
V2TIMManager.getMessageManager().deleteMessages(deleteMsg).then(() => {
 let index = this.messageData.getDataAll().indexOf(msg)
 this.messageData.deleteData(index)
    console.log("删除消息--成功")
   }).catch((error: Error) => {
console.log("删除消息--失败")
})

消息重发

当遇到网络不好或者网络异常时,用户发送的消息会出现失败的情况,这个时候就需要重新发送消息。实现消息的重新发送时,需要先将失败的消息删除,然后重新发送,并插入到原来位置。

javascript 复制代码
        V2TIMManager.getMessageManager().deleteMessages([msg]).then(() => {
        }).catch((error: Error) => {
        })

这里先调用 deleteMessages 将失败的消息删除,然后发送新的消息,值得注意的是需要处理当前用户被对方拉黑的情况, 当用户被拉黑时,鸿蒙版的 IM 会直接抛出异常,需要处理拉黑情况。

ini 复制代码
 V2TIMManager.getInstance().sendC2CTextMessage(msg.textElem?.text, 用户id)
.then((message: V2TIMMessage) => {
            this.messageData.pushData(message)
           
          }) .catch((error: TIMError) => {
            //用户被拉黑了
            if (error.code == 20007) {
              msg.status = V2TIMMessageStatus.V2TIM_MSG_STATUS_SEND_FAIL
              msg.msgID = "20007"
              this.messageData.pushData(msg)
            
            }
          });

总结

本篇文章详细的介绍里 鸿蒙版 IM 中实现消息时撤回,删除和重发等功能。特别是当重发时需要注意当前用户是否已经被拉黑,处理特定的 code 码。然后结合鸿蒙的状态管理很容易实现微信相同的功能,已经学会了的小伙伴,赶快动手试试吧!

相关推荐
狼哥168611 小时前
《新闻资讯》一、应用分层模块化整体实现指南
ui·harmonyos
木咺吟11 小时前
鸿蒙原生应用实战(一):项目搭建与首页开发 — 游戏收藏夹
华为·harmonyos
风华圆舞11 小时前
鸿蒙 + Flutter 如何把 AI 助手嵌进应用页面里——以食界探味为
人工智能·flutter·harmonyos
金启攻11 小时前
【鸿蒙原生应用实战】第五篇:活动记录页——数据筛选、统计与成就系统
harmonyos
金启攻11 小时前
【鸿蒙原生应用实战】第一篇:项目搭建与首页开发——从零构建户外助手App
华为·harmonyos
Swift社区12 小时前
AI + 鸿蒙游戏:下一代游戏架构正在形成吗?
人工智能·游戏·harmonyos
风满城3312 小时前
【鸿蒙原生应用开发实战】第二篇:首页开发——宠物卡片+快捷入口+动态信息流
华为·harmonyos
枫叶丹412 小时前
【HarmonyOS 6.0】MDM Kit 深度解析:企业级 user_grant 权限集中管理策略
开发语言·华为·harmonyos
风华圆舞12 小时前
鸿蒙 + Flutter 下如何管理 AI 会话——AgentService 设计解析
人工智能·flutter·harmonyos
川石课堂软件测试12 小时前
UI自动化测试|下拉选择框&弹出框&滚动条操作实践
开发语言·python·jmeter·ui·docker·单元测试·harmonyos