环信鸿蒙版 UIKit 快速上手指南

news2025/7/16 11:45:02

环信鸿蒙版 UIKit 是专为 HarmonyOS 开发者设计的 IM UI 组件库,基于环信 IM SDK 开发,可帮助开发者快速集成即时通讯功能。

环信UIKit 的特点

  • ArkUI 声明式开发范式:采用高效简洁的声明式开发方式
  • 状态管理 V2:支持深度观测和精准更新
  • 组件导航:使用系统推荐的 Navigation 方式进行页面跳转

1. 使用 ArkUI 的声明式开发范式。

ArkUI 提供了两种开发范式:基于ArkTS的声明式开发范式和兼容JS的类Web开发范式。声明式开发范式具有高效简洁,内存占用少,性能更佳以及会作为鸿蒙主推的开发范式持续演进的特点。而类Web开发范式则是为了让Web前端开发者快速将已有的Web应用改造成方舟UI框架应用。基于以上原因,环信Chat UIKit 采用 ArkUI 的声明式开发范式。

2. 采用状态管理 V2 版本。

ArkUI 提供了两个版本的状态管理:状态管理V1和V2。状态管理 V1 版本是目前 ArkUI 的稳定版本,但是在使用上有如下限制:

  • 状态变量不能独立于UI存在,同一个数据被多个视图代理时,在其中一个视图的更改不会通知其他视图更新。
  • 只能感知对象属性第一层的变化,无法做到深度观测和深度监听。
  • 在更改对象中属性以及更改数组中元素的场景下存在冗余更新的问题。
  • 装饰器间配合使用限制多,不易用。组件中没有明确状态变量的输入与输出,不利于组件化。

而状态管理 V2 则增强了状态管理 V1 的能力,解决了状态管理 V1 版本的一些问题。状态管理 V2 版本的特点如下:

  • 状态变量独立于UI,更改数据会触发相应视图的更新。
  • 支持对象的深度观测和深度监听,且深度观测机制不影响观测性能。
  • 支持对象中属性级精准更新及数组中元素的最小化更新。
  • 装饰器易用性高、拓展性强,在组件中明确输入与输出,有利于组件化。

基于 V1 和 V2 版本的对比,结合 UIKit 聊天页面的复杂性,环信UIKit 采用了 V2 版本的状态管理。

3. 页面采用组件导航(Navigation)的方式。

组件导航(Navigation)是鸿蒙推荐的页面导航方式。UIKit 采用系统路由表的方式进行动态路由。应用只需要通过NavPathStack提供的路由方法,传入需要路由的页面配置名称,系统会完成路由跳转。

快速使用环信鸿蒙版 UIKit

前提条件

开始前,你需要满足以下的开发环境:

  • DevEco Studio NEXT Release(5.0.3.900)及以上;
  • HarmonyOS SDK API 12 及以上;
  • HarmonyOS NEXT.0.0.71 或以上版本的模拟器或者真机;
  • 有效的环信即时通讯 IM 开发者账号和 App Key,请跳转到 环信即时通讯云控制台

项目准备

下面介绍将单群聊 UIKit 引入项目中的必要环境配置。

  1. 打开 DevEco Studio,点击 Create Project

  2. Choose Your Ability Template 界面,选择 Application > Empty Ability,然后点击 Next

  3. Configure Your Project 界面,依次填入以下内容:

    • Project name:你的 HarmonyOS 项目名称,如 HelloWorld。
    • Bundle name:你的项目包的名称,如 com.hyphenate.helloworld。
    • Save location:项目的存储路径。
    • Compatible SDK:项目的支持的最低 API 等级,选择 5.0.0(12) 及以上。
    • Module name:module的名称,默认为 entry
  4. 点击 Finish。根据屏幕提示,安装所需插件。

注意:上述步骤使用的是 DevEco Studio 5.0.1 Release(5.0.5.315)版本。

  1. 在项目中引入 SDK 。

远程依赖

在项目根目录下执行如下命令:

ohpm install @easemob/chatuikit

说明一下:
上面的命令在根目录执行,会将 SDK 依赖添加到项目级别;在 Module 目录下,会将 SDK 依赖添加到对应的 Module 上。

源码依赖

从 环信官网 或从 GitHub 获取鸿蒙单群聊UIKit源码源码,按照下面的方式集成:

  • 点击 Import,选择 Import Module,导入 chatuikit 模块。
  • 在项目 Module 中引入 chatuikit 模块。

修改模块目录的 oh-package.json5 文件,在 dependencies 节点增加依赖声明。

"dependencies": {
    "@easemob/chatuikit": "file:./../chatuikit"
}

然后点击同步按钮,同步完成后,就可以在模块中使用 chatuikit

  1. 添加项目权限。

在模块的 module.json5 ,例如:HelloWorldentry 模块的 module.json5 中,配置示例如下:

{
  module: {
    requestPermissions: [
      {
        name: "ohos.permission.GET_NETWORK_INFO",
      },
      {
        name: "ohos.permission.INTERNET",
      },
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "$string:record_permission_reason",
        'usedScene': {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      }
    ],
  },
}

需要在对应模块的 string.json 文件中增加如下:

{
    "name": "record_permission_reason",
    "value": "录制语音需要"
}

实现发送第一条单聊消息

下面我们一起来看看 UIKit 是如何发送第一条消息的。

创建快速开始页面及实现代码逻辑
  1. 打开 entry/src/main/ets/pages/Index.ets 文件,并替换为如下内容:
import { ChatPageParams, ChatUIKitClient, ChatClient, ChatError, ChatOptions, ConversationType } from '@easemob/chatuikit';
import { promptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  pathStack: NavPathStack = new NavPathStack();
  private appKey: string = [项目的AppKey]; // 将[项目的AppKey]替换为项目的AppKey字符串
  private userId: string = '';
  private password: string = '';
  private peerId: string = '';

  private initSDK() {
    let options = new ChatOptions({
      appKey: this.appKey
    });
    options.setAutoLogin(false);
    let client = ChatClient.getInstance();
    client.init(getContext(), options);
    ChatUIKitClient.init(client);
  }

  private login() {
    if (!this.userId || !this.password) {
      promptAction.showToast({message: "UserId or password cannot be empty!"});
      return;
    }
    ChatUIKitClient.loginWithPassword(this.userId, this.password)
      .then(() => {
        promptAction.showToast({message: "Login successful!"});
      })
      .catch((e: ChatError) => {
        promptAction.showToast({message: "Login failed: "+e.description});
      })
  }

  private logout() {
    ChatUIKitClient.logout(false)
      .then(() => {
        promptAction.showToast({message: "Logout successful!"});
      })
  }

  private startChat() {
    if (!this.peerId) {
      promptAction.showToast({message: "Peer id cannot be empty!"});
      return;
    }
    this.pathStack.pushPath({name: 'ChatPage', param: {
      conversationId: this.peerId,
      conversationType: ConversationType.Chat
    } as ChatPageParams})
  }

  aboutToAppear(): void {
    this.initSDK();
  }

  build() {
    Navigation(this.pathStack) {
      Column() {
        TextInput({placeholder: 'UserId'})
          .commonStyle()
          .onChange(value => this.userId = value)

        TextInput({ placeholder: 'Password' })
          .commonStyle()
          .type(InputType.Password)
          .onChange(value => this.password = value)

        Button('Login')
          .commonStyle()
          .onClick(()=> {
            this.login();
          })

        Button('Logout')
          .commonStyle()
          .onClick(()=> {
            this.logout();
          })

        TextInput({placeholder: 'PeerId'})
          .commonStyle()
          .onChange(value => this.peerId = value)

        Button('Start Chat')
          .commonStyle()
          .onClick(()=> {
            this.startChat();
          })
      }
      .width('100%')
      .height('100%')
    }
  }

  @Styles
  commonStyle() {
    .width('80%')
    .margin({
      top: 20
    })
  }
}

重要:请将代码中的appKey值([项目的AppKey])替换为您项目的实际AppKey字符串。

  1. 现在可以测试你的应用了。

测试应用

  1. DevEco Studio 中,点击 Run ‘entry’ 按钮,将应用运行到你的设备或者模拟器上。

  2. 输入用户 ID 和密码,点击 Login 按钮进行登录,登录成功或者失败有提示,或者通过 Log 查看。

  3. 在另一台设备或者模拟器上登录另一个账号。

  4. 在两台设备或模拟器上分别登录不同账号,输入对方的账号ID,点击Start Chat按钮即可开始聊天。

总结一下

环信鸿蒙版UIKit是环信开发的一个鸿蒙版的 UI 组件库,采用 ArkUI 的声明式开发范式,采用状态管理 V2 版本,采用组件导航的方式。环信鸿蒙版UIKit可以让开发者更加方便地使用环信的 IM SDK,同时也可以让大家更加方便地进行 UI 组件的开发。

相关文档:

  • 注册环信即时通讯IM:https://console.easemob.com/user/register

  • 环信IM集成文档:https://docs-im-beta.easemob.com/document/ios/quickstart.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解

1前言 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用…

Go:入门

文章目录 Hello, World命令行参数找出重复行GIF动画获取一个URL并发获取多个URL一个 Web 服务器其他 Hello, World Hello world package main import "fmt" func main() {fmt.Println("Hello, 世界") }package main表明这是一个可独立执行的程序包&#…

Cloudflare教程:免费优化CDN加速配置,提升网站访问速度 | 域名访问缓存压缩视频图片媒体文件优化配置

1、启用 Tiered Cache 缓存开关:通过选择缓存拓扑,可以控制源服务器与 Cloudflare 数据中心的连接方式,以确保缓存命中率更高、源服务器连接数更少,并且 Internet 延迟更短。 2、增加浏览器缓存时间TTL:在此期间&#…

C/C++共有的类型转换与c++特有的四种强制类型转换

前言 C 语言和 C 共有的类型转换: 自动类型转换(隐式类型转换): 编译器在某些情况下会自动进行的类型转换。强制类型转换(显示类型转换): 使用 (type)expression 或 type(expression) 语法进行…

【蓝桥杯】贪心算法

1. 区间调度 1.1. 题目 给定个区间,每个区间由开始时间start和结束时间end表示。请选择最多的互不重叠的区间,返回可以选择的区间的最大数量。 输入格式: 第一行包含一个整数n,表示区间的数量 接下来n行,每行包含两个整数,分别表示区间的开始时间和结束时间 输出格式:…

OSPF接口的网络类型和不规则区域

网络类型(数据链路层所使用的协议所构建的二层网络类型) 1、MA --- 多点接入网络 BMA --- 支持广播的多点接入网络 NBMA --- 不支持广播的多点接入网络 2、P2P --- 点到点网络 以太网 --- 以太网最主要的特点是需要基于MAC地址进行物理寻址,主要是因为以太网接口所连…

idea 创建 maven-scala项目

文章目录 idea 创建 maven-scala项目1、创建普通maven项目并且配置pom.xml文件2、修改项目结构1)创建scala目录并标记成【源目录】2)导入scala环境3)测试环境 idea 创建 maven-scala项目 1、创建普通maven项目并且配置pom.xml文件 maven依赖…

ansible+docker+docker-compose快速部署4节点高可用minio集群

目录 github项目地址 示例服务器列表 安装前 修改变量文件group_vars/all.yml 修改ansible主机清单 修改setup.sh安装脚本 用法演示 安装后验证 github项目地址 https://github.com/sulibao/ansible_minio_cluster.git 示例服务器列表 安装前 修改变量文件group_var…

使用libcurl编写爬虫程序指南

用户想知道用Curl库编写的爬虫程序是什么样的。首先,我需要明确Curl本身是一个命令行工具和库,用于传输数据,支持多种协议。而用户提到的“Curl库”可能指的是libcurl,这是一个客户端URL传输库,可以用在C、C等编程语言…

K8S学习之基础七十五:istio实现灰度发布

istio实现灰度发布 上传镜像到harbor 创建两个版本的pod vi deployment-v1.yaml apiVersion: apps/v1 kind: Deployment metadata:name: appv1labels:app: v1 spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec…

【设备连接涂鸦阿里云】

设备连接涂鸦阿里云 ■ Tuya IoT on Alibaba Cloud■ 控制台操作步骤■ 1. 创建产品■ 2. 添加设备■ 3. 添加设备■ 4. 获取设备MQTT连接参数 ■ MQTTX使用教程■ 1,先在 Tuya IoT on Alibaba Cloud 新建产品和设备■ 2,MQTTX 设置■ 3,MQTT…

c语言学习16——内存函数

内存函数 一、memcpy使用和模拟实现1.1参数1.2 使用1.3 模拟实现 二、memmove使用和模拟实现2.1 参数2.2 使用2.3 模拟实现 三、memset使用3.1 参数3.2 使用 四、memcmp使用4.1 参数4.2 使用 一、memcpy使用和模拟实现 1.1参数 因为内存中不知道存的是什么类型的地址&#xff…

渗透测试实战:使用Hydra破解MySQL弱口令(附合法授权流程+防御方案)

渗透测试实战:使用Hydra破解MySQL弱口令(附合法授权流程防御方案) 郑重声明:本文仅供安全学习研究,任何未经授权的网络攻击行为均属违法。实操需获得目标系统书面授权,请遵守《网络安全法》相关规定。 一、…

一文了解亿级数据检索:RedisSearch

文章目录 1.什么是Redis Search2.为什么要使用Redis Search3.RedisSearch 的核心特性4.RedisSearch 的原理4.1 倒排索引4.2 索引创建与数据存储4.3 数据模型4.4 搜索查询处理4.5 高性能与可扩展性: 5.有了ES为什么还需要RedisSearch5.RedisSearch的安装6.RedisSearc…

uniApp开发微信小程序-连接蓝牙连接打印机上岸!

历经波折三次成功上岸! 三次经历简单絮叨一下:使用uniAppvue开发的微信小程序,使用蓝牙连接打印机,蓝牙所有的接口都是插件中封装的,用的插件市场中的这个: dothan-lpapi-ble ;所以&#xff0c…

【特权FPGA】之按键消抖

完整代码如下所示: timescale 1ns / 1ps// Company: // Engineer: 特权 // // Create Date: // Design Name: // Module Name: // Project Name: // Target Device: // Tool versions: // Description: // // Dependencies: // // Revision: // …

P1331 洛谷 海战

题目描述 思路 这个题需要读懂题意,即“什么样的形式表示两只船相撞?” ----> 上下相邻或左右相邻 如果图是不和法的,一定存在如下结构: # # . # 或 # # # . 或 # . # # 或 . # # #即四个格子里有三个#,一个"…

网络安全·第二天·ARP协议安全分析

今天我们来考虑考虑计算机网络中的一类很重要的协议-------ARP协议,介绍他用途的同时,分析分析ARP协议存在的一些漏洞及其相关的协议问题。 一、物理地址与IP地址 1、举例 在计算机网络中,有两类地址十分关键,一类称为物理地址&a…

华为手机或平板与电脑实现文件共享

1.手机或平板与电脑在同一个网络 2.打开手机或平板端,设置---更多连接----快分享或华为分享打开此功能-----开启共享至电脑 3.打开电脑,网络中就可看到手机端分享的用户名称 4. 登陆就可访问手机 5.常见问题 5.1 电脑未发现本机 5.2 修改了访问密码后再…

幻兽帕鲁(Palworld)在线工具集:让游戏体验更轻松!

幻兽帕鲁(Palworld)在线工具集:让游戏体验更轻松! 🎮 工具介绍 为了帮助广大幻兽帕鲁玩家更好地享受游戏,我开发了这个全面的在线工具集。无需下载安装,打开网页即可使用,完全免费! &#x1…