Native (C ABI) IMKit 快速开始

本页在 5 个步骤内完成 Native (C ABI) 端 IMKit 接入:先接入 IMLib,再初始化门面,最后挂载会话列表与会话页。IMKit 只消费 IMLib 的公开数据,不重复实现通信能力。

  1. 接入 IMLib

    按 IMLib 快速开始 完成初始化与连接;IMKit 不重复建立连接。

  2. 导入 IMKit

    按「导入 SDK」安装依赖;IMKit 只依赖 IMLib 公开接口。

  3. 初始化门面

    初始化 IMLib 客户端并连接,然后创建 IMKit 门面(或调用静态 init);门面持有主题、语言与组件实例。

  4. 挂载会话列表

    传入 conversations 与交互回调;会话数据来自 IMLib 的 getConversationList 与 CONVERSATION 事件。

  5. 挂载会话页与输入区

    传入 messages / currentUserId / hasMore;发送与已读回调转调 IMLib 对应接口。

1. 接入 IMLib​

IMKit 的所有数据都来自 IMLib 公开接口:连接、会话列表、历史消息、发送、已读回执与未读清零。先完成 IMLib 接入再使用 IMKit。

2. 导入 IMKit​

C / Rust
// 链接 im-kit(include/im_kit.h + libim_kit),并链接 im-sdk
cc app.c -Iinclude -Llib -lim_sdk -lim_kit -o app

3. 初始化门面​

C(view-model 层)
#include "im_sdk.h"
#include "im_kit.h"

im_kit_theme_t* theme = NULL;
im_kit_theme_default(0 /* light */, &theme);

im_kit_conversation_model_t* list = im_kit_conversation_model_new(client);

门面:IMKit;Native 没有 UI 门面:按组件组合模型(conversation_model / message_model)与格式化函数(avatar / badge / time / status / theme)。

4. 挂载会话列表​

C(view-model 层)
im_kit_conversation_model_t* list = im_kit_conversation_model_new(client);
im_kit_conversation_model_set_json(list, conversations_json);
im_kit_conversation_model_set_options(
    list, "{\"showPinned\":true,\"showUnread\":true,\"showDraft\":true,\"showMention\":true}");

char* view_json = NULL;
if (im_kit_conversation_model_refresh(list, &view_json) == 0) {
    /* 渲染 view_json:排序、角标、草稿预览、空态 */
}
im_kit_string_free(view_json);
im_kit_conversation_model_free(list);

5. 挂载会话页与输入区​

C(view-model 层)
im_kit_message_model_t* chat = im_kit_message_model_new(client, 1, "user2");
im_kit_message_model_set_json(chat, messages_json, 1 /* has_more */);

char* view_json = NULL;
im_kit_message_model_view(chat, now_ms, "alice", &view_json);
/* view_json.items:separator / message(含时间分隔与状态文案) */
im_kit_string_free(view_json);

im_kit_message_model_load_more(chat, &view_json); /* 返回 beforeSeq,宿主据此拉历史后 prepend */
im_kit_string_free(view_json);
im_kit_message_model_free(chat);

下一步​