纯血鸿蒙操作系统上线以来,已经吸引了超过 720 万开发者。随着越来越多开发者加入,娱乐社交、电子商务、交通出行、协同办公等原生鸿蒙应用纷纷上线,推动了鸿蒙生态系统的迅速成长。
融云第一时间上线了鸿蒙 IM SDK,快速响应所有应用必备的社交模块需求。
对于开发者来说,在鸿蒙生态上开发应用是一个站在全新出发点去获取增量的机会,对性能和高效的需求与日俱增。
在社交类 SDK 中,融云率先提供鸿蒙 IMKit,含开箱即用的 UI 组件和预设的交互模式,让开发者的业务实现快人一步;覆盖多类型单群聊消息发送,置顶、免打扰、输入状态、➕号区域扩展等会话页面和列表管理,撤回、删除、引用、已读回执等消息管理,以及消息撤回编辑、消息高亮颜色等丰富的自定义能力,助力开发者快速构建功能更全、体验更好的鸿蒙应用。
本文主要介绍如何快速集成融云鸿蒙 IMKit,高效实现鸿蒙原生应用的社交模块。
准备工作
在开始集成 IMKit 之前,请确保您已完成以下准备工作:
注册融云开发者账号:访问融云官网注册开发者账号。注册成功后,控制台会自动创建您的首个应用,并生成开发环境下的 App Key。
获取 App Key:登录融云开发者控制台,在“应用管理”中找到您的应用,即可获取开发环境的 App Key。请注意,每个应用具有两个不同的 App Key,分别对应开发环境和生产环境,两个环境之间数据隔离。在您的应用正式上线前,请切换到使用生产环境的 App Key。
安装开发工具:确保您已安装 DevEco Studio NEXT Release(5.0.3.900) 及以上版本,并已配置好 HarmonyOS SDK API 12 及以上版本。建议使用手机系统版本号 NEXT.0.0.31 的真机进行测试。
快速集成
融云支持在 DevEco Studio 中自动导入和手动导入 IMKit SDK。我们推荐使用自动导入方式,更加便捷。
自动导入 SDK
支持从 OpenHarmony 三方库中心仓获取 SDK。
☑ 在 entry 目录中的 oh-package.json5 文件中添加 IMKit 依赖。
// entry 目录中的 oh-package.json5{ "name": "entry", "version": "1.0.0", "description": "Please describe the basic information.", "main": "", "author": "", "license": "", "dependencies": { // x.y.z 为 IMKit 的版本号,请前往融云官网或 OpenHarmony 三方库中心仓查询最新版本号。 "@rongcloud/imkit" : "x.y.z", "@rongcloud/imlib" : "x.y.z", }}
复制代码
☑ 点击 DevEco Studio 中的“Sync Now”按钮,同步项目依赖。
安装 SDK 成功后,您可以在项目根目录的 oh_modules/.ohpm/ 中找到融云 IMKit SDK。您也可以打开 OpenHarmony 三方库中心仓,搜索关键字 rongcloud 查看更多其他融云 SDK。
手动导入 SDK
如果您无法使用自动导入,或者有特殊需求,可以选择手动导入 SDK。
☑ 将 SDK 放入 App 仓库:在项目根路径创建 libs 目录,将 RonglMLib.har 和 RonglMKit.har 放到 libs 目录。
☑ 重写 IMLib 依赖:在项目根路径 oh-package.json5 中重写 IMLib 的依赖,以确保 IMKit 能够正确依赖 IMLib。
// 项目根路径 oh-package.json5{ "modelVersion": "5.0.0", "description": "Please describe the basic information.", "dependencies": { }, "devDependencies": { "@ohos/hypium": "1.0.19", "@ohos/hamock": "1.0.0" }, // 重写 imlib 的位置,确保 IMKit 能够正确依赖 IMLib "overrides": { "@rongcloud/imlib" :"file:./libs/RongIMLib.har" }}
复制代码
☑ App 依赖 IMLib & IMKit:在 entry 目录下执行以下命令:
1. 进入 entry 目录cd entry
2. 依赖 IMLibohpm install ../libs/RongIMLib.har
3. 依赖 IMKitohpm install ../libs/RongIMKit.har
复制代码
☑ 配置项目:请参考融云开发者文档中的“配置说明”部分进行项目配置。
初始化连接
在使用 IMKit 之前,需要先初始化 SDK 并连接融云服务器。
获取用户 Token:用户 Token 是用户在融云的唯一身份标识。在实际应用中,您需要通过应用服务器调用融云 Server API 获取 Token。为了快速体验,您可以使用融云控制台「北极星」开发者工具箱的 API 调试页面调用“获取 Token”接口。
初始化 SDK:在您的应用代码中,使用以下代码初始化 SDK:
import { IMEngine, InitOption } from '@rongcloud/imlib';
let initOption = new InitOption();IMEngine.getInstance().init(getContext(), this.appKey, initOption); // this.appKey 为您在融云控制台获取的 App Key
复制代码
连接融云:使用获取到的 Token 连接融云服务器。
let token = "YOUR_TOKEN"; // 替换为您的 TokenIMEngine.getInstance().connect(token, 10).then(result => { // 10 为连接超时时间,单位为秒 if (EngineError.Success !== result.code) { // IM 连接失败,根据 result.code 进行相应处理 console.error("IM 连接失败: "result.code); return; } // IM 连接成功 let curUserId = result.userId as string;console.log("IM 连接成功,用户 ID: "curUserId);}).catch(error => { console.error("IM 连接出错:"error);});
复制代码
您还可以监听 IM 连接状态的变化,以便在 UI 上给用户以提示。
import { IMEngine, ConversationStatusListener, ConversationStatusInfo, List } from '@rongcloud/imlib';
let statusListener : ConversationStatusListener = {onConversationStatusChange: (items: List<ConversationStatusInfo>): void => { // 处理连接状态变化 items.forEach(item => { console.log("会话状态变化:", item.conversationId, item.status); }) }}IMEngine.getInstance().addConversationStatusListener(statusListener);//在不需要监听时移除监听器,避免内存泄漏IMEngine.getInstance().removeConversationStatusListener(statusListener);
复制代码
体验收发消息
IMKit 内置会话页面已实现了发送各类型消息的功能和 UI。当您在自定义页面需要发送消息时,可使用 IMKit 核心类 RongIM 下发送消息的方法。这些方法除了提供发送消息的功能外,还会触发 IMKit 内置页面的更新。
发送消息:发送消息前需要构造 Message 消息对象,参考构造消息。
调用 RongIM 的发送消息方法时,SDK 会触发内置会话列表和页面的更新。
import { RongIM, ConversationIdentifier, ConversationType, TextMessage, Message, EngineError } from '@rongcloud/imlib';
let conId = new ConversationIdentifier();conId.conversationType = ConversationType.Private; // 设置会话类型,例如单聊 (ConversationType.Private)conId.targetId = "targetId"; // 替换为目标用户 ID
let textMsg = new TextMessage();textMsg.content = "这是一条文本消息"; // 设置消息内容
RongIM.getInstance().messageService().sendMessage(new Message(conId, textMsg)) .then(result => { if (EngineError.Success !== result.code) { // 发送消息失败,根据 result.code 进行相应处理 console.error("发送消息失败: " + result.code); return; } if (!result.data) { // 消息数据为空 console.error("消息数据为空"); return; } let msg = result.data as Message; console.log("消息发送成功:", msg); }).catch(error => { console.error("发送消息出错:" + error);});
复制代码
通过 sendMessage 方法,融云服务器会通知您的消息是否已发送成功。当因任何问题导致发送失败时,可通过回调方法返回异常。
此外,融云鸿蒙 IMKit 还提供了更多高级功能,如自定义 UI、消息类型扩展、群组聊天等。点击融云开发者文档,了解详细信息和更多用法。
评论