XuqmGroup-HarmonySDK/xuqm-sdk/src/main/ets/core/HttpClient.ets
XuqmGroup d7f156f160 feat(chat): 添加聊天界面和文件更新SDK功能
- 实现完整的聊天界面UI组件,支持文本、图片、视频、音频、文件等多种消息类型
- 集成IM消息收发功能,实现消息气泡显示和用户头像占位符
- 添加媒体文件选择和拍摄功能,支持相册图片、视频及相机拍照录像
- 实现语音录制和播放功能,包含按住说话交互和权限处理
- 添加群组提及功能,支持@用户和提及候选列表显示
- 实现消息回复和引用功能,支持消息长按回复操作
- 添加本地消息搜索功能,支持搜索当前会话的历史消息
- 实现文件上传下载功能,集成FileSDK进行文件传输管理
- 添加应用更新检查功能,集成UpdateSDK支持版本更新
- 实现消息状态显示,包括发送、送达、已读等状态标识
- 添加群组已读人数统计,显示消息在群聊中的阅读情况
- 实现草稿保存和恢复功能,支持断点续聊体验
- 添加连接状态横幅,实时显示IM服务连接状态
- 实现滚动加载更多历史消息,优化大量消息的性能表现
- 添加多媒体文件下载保存功能,支持保存到应用专属目录
2026-04-28 20:11:37 +08:00

57 行
1.7 KiB
Plaintext

import http from '@ohos.net.http'
import type { ApiResponse, HttpHeaders } from './Types'
import { SDKContext } from './SDKContext'
export class HttpClient {
static async request<T>(
method: http.RequestMethod,
path: string,
body?: Object,
query?: string,
): Promise<T> {
const config = SDKContext.getConfig()
const token = SDKContext.getToken()
const url = config.apiBaseUrl.replace(/\/$/, '') + path + (query ? '?' + query : '')
const client = http.createHttp()
try {
const header: HttpHeaders = {
'Content-Type': 'application/json',
}
if (token) {
header.Authorization = 'Bearer ' + token
}
const options: http.HttpRequestOptions = {
method,
header,
extraData: body ? JSON.stringify(body) : '',
connectTimeout: 15000,
readTimeout: 15000,
}
const res = await client.request(url, options)
const json: ApiResponse<T> = JSON.parse(res.result as string) as ApiResponse<T>
if (json.code !== 200) throw new Error(json.message)
return json.data
} finally {
client.destroy()
}
}
static get<T>(path: string, query?: string): Promise<T> {
return HttpClient.request<T>(http.RequestMethod.GET, path, undefined, query)
}
static post<T>(path: string, body?: Object, query?: string): Promise<T> {
return HttpClient.request<T>(http.RequestMethod.POST, path, body, query)
}
static put<T>(path: string, body?: Object, query?: string): Promise<T> {
return HttpClient.request<T>(http.RequestMethod.PUT, path, body, query)
}
static delete<T>(path: string, query?: string): Promise<T> {
return HttpClient.request<T>(http.RequestMethod.DELETE, path, undefined, query)
}
}