跳到主要内容

用户资料、文件分片上传与推送角标

本模块包含个人资料查询与更新、陌生人公开资料拉取、大文件分片断点上传、APNs 推送 Token 绑定、服务端未读角标同步与客户端日志上报。


1. 个人资料与用户公开资料​

let client = QXJIMClient.shared

// 1. 获取当前登录用户的完整个人资料
let me: IMUserProfile = try await client.getSelfUserInfo()

// 2. 修改当前登录用户的昵称、头像、扩展字段或全局免打扰状态
try await client.setSelfInfo(
request: IMSelfInfoUpdateRequest(
nickname: "新昵称",
faceURL: "https://cdn.qxj.com/avatar/new.png",
globalRecvMsgOpt: .receive
)
)

// 3. 批量获取任意用户的公开资料(Go 内核自带缓存并自动同步更新单聊会话头像/昵称)
let publicUsers: [IMPublicUser] = try await client.getUsersInfo(userIDs: ["u_1002", "u_1003"])

2. 独立文件分片上传 (uploadFile)​

当您需要上传头像、朋友圈图片或自定义业务附件到 OpenIM 对象存储(MinIO / OSS / S3)时,可直接调用 uploadFile:

let resp = try await QXJIMClient.shared.uploadFile(
request: IMUploadFileRequest(
filepath: "/path/to/avatar.png",
name: "avatar.png",
contentType: "image/png",
cause: "avatar"
)
) { event in
switch event {
case .open(let size):
print("打开文件,总大小: \(size) bytes")
case .uploadComplete(let fileSize, let streamSize, _):
let percent = Double(streamSize) / Double(max(fileSize, 1)) * 100
print(String(format: "上传进度: %.1f%%", percent))
case .complete(_, let url, _):
print("分片合并完成: \(url)")
default:
break
}
}

print("最终文件访问 URL: \(resp.url)")

3. APNs 推送 Token、角标同步与日志上传​

// 1. 在 AppDelegate didRegisterForRemoteNotificationsWithDeviceToken 中上报推送 Token
try await QXJIMClient.shared.updatePushToken(token: hexDeviceToken)

// 2. App 退到后台时,将当前未读总数同步给服务端推送角标计算器
let unread = try await QXJIMClient.shared.getTotalUnreadMsgCount()
try await QXJIMClient.shared.setAppBadge(unreadCount: unread)

// 3. 用户反馈问题时,一键将本地最近 5000 行 IM 日志上传至服务端后台排查
try await QXJIMClient.shared.uploadLogs(line: 5000, ex: "用户反馈消息延迟") { current, total in
print("日志上传进度: \(current) / \(total)")
}