Skip to content

Windows 从零接入晞晗IM

本页面向 .NET 8 WPF 应用。完成后,你可以连接账号、监听事件并发送第一条文字消息。

1. 准备接入信息

向服务端负责人领取 Server URL、App ID、当前用户 ID 和一个对端测试用户 ID。 正式环境还需要应用自己的后台提供短期 XHIM 凭证。

2. 新建工程并安装 NuGet

Visual Studio 新建 .NET 8 WPF Application,并选择与 XHIM Native Runtime 一致 的架构,例如 x64。

powershell
dotnet add package XHIM.SDK --version <团队锁定的版本>
dotnet add package XHIM.UI.Wpf --version <同一版本>

XHIM.UI.Wpf 是可选 UI 包。完全自定义 WPF 页面时只安装 XHIM.SDK

3. 连接当前账号

Development Server 已开启测试登录时:

csharp
using XHIM;

var client = await XHIMClient.ConnectAsync(
    "https://im-test.example.com",
    currentUserId);

正式环境增加业务凭证提供器:

csharp
var client = await XHIMClient.ConnectAsync(
    "https://im.example.com",
    currentUserId,
    appId: "your-app",
    authentication: XHIMAuthentication.Business(
        cancellationToken => accountApi.GetXHIMCredentialAsync(
            currentUserId,
            cancellationToken)));

把 Client 放在账号级 Service 中。Window 关闭重开时不要重复创建同一账号 Client。

4. 监听变化并发送消息

csharp
var eventTask = Task.Run(async () =>
{
    await foreach (var eventValue in client.Events(cancellationToken))
        messageStore.HandleXHIMEvent(eventValue);
}, cancellationToken);

var direct = await client.GetOrCreateDirectConversationAsync(
    "bob",
    cancellationToken);

await client.SendTextAsync(
    direct.ConversationId,
    "你好,晞晗IM",
    cancellationToken: cancellationToken);

收到事件后重新查询当前会话或消息。不要在 WPF 页面里手工维护另一份消息数据库。

5. 登出和换号

csharp
await client.LogoutAsync(cancellationToken);
await client.DisposeAsync();

普通 Window 关闭时只取消该页面的订阅。真正登出或切换账号时才释放账号 Client。

6. 常用功能入口

任务方法
查询会话ListConversationsAsync(...)
查询消息ListMessagesAsync(...)
标记已读MarkConversationReadAsync(...)
查询用户资料GetCurrentUserProfileAsync(...)
查询好友和群组ListFriendshipsAsync(...) / ListGroupsAsync(...)
创建群CreateGroupAsync(...)
取消请求传入 CancellationToken

完整参数、返回值和错误见 SDK API Reference

7. 二次开发建议

text
AccountSession
└── XHIMService        持有 Client 与事件任务
    ├── Repositories   查询会话、消息、好友和群组
    └── ViewModels     把不可变结果交给 WPF 页面

这种结构可以直接用于已有 MVVM 或 MVP 工程。页面不接触凭证、Native Handle 或 本地数据库。

8. 常见问题

启动时提示找不到 xhim_core_v1.dll

NuGet 缺少当前 RID 的 Native Runtime,或应用架构与 DLL 不一致。更换完整发行包, 不要手工复制其他版本 DLL。

能发送但页面不刷新

确认账号 Service 正在消费 client.Events(...),并在事件后重新查询消息。

应用退出时进程不结束

确认真正登出时已经调用 DisposeAsync(),并取消页面自己的事件任务。

XHIM 客户端 SDK 与服务端文档