feat(im): 添加即时消息SDK核心功能实现
- 实现了聊天消息发送功能,支持文本、图片、视频、音频、文件等多种消息类型 - 集成了文件上传下载功能,支持多媒体文件的传输和管理 - 添加了群组管理功能,包括创建群组、成员管理、权限控制等操作 - 实现了好友系统,支持好友添加、删除、分组等功能 - 集成了黑名单管理,提供用户屏蔽和解除屏蔽功能 - 添加了会话管理功能,支持对话列表、未读消息统计等 - 实现了历史消息查询和搜索功能 - 添加了实时连接状态管理和自动重连机制
这个提交包含在:
父节点
a58f920a3f
当前提交
59114c9574
@ -312,6 +312,17 @@ export const ImSDK = {
|
|||||||
client.addListener({
|
client.addListener({
|
||||||
onConnected: () => {
|
onConnected: () => {
|
||||||
_syncHistoryForAllConversations().catch(() => {})
|
_syncHistoryForAllConversations().catch(() => {})
|
||||||
|
// Auto-register push token if Push module is installed and a token is pending
|
||||||
|
import('@xuqm/rn-push')
|
||||||
|
.then(({ PushSDK }) => {
|
||||||
|
const pending = PushSDK.getPendingToken?.()
|
||||||
|
if (pending) {
|
||||||
|
PushSDK.registerToken(userId, pending.token, pending.vendor).catch(() => {})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
// Push module not installed — ignore gracefully
|
||||||
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
void client.connect()
|
void client.connect()
|
||||||
@ -1096,6 +1107,12 @@ export const ImSDK = {
|
|||||||
return normalized
|
return normalized
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to conversation list changes.
|
||||||
|
* Returns the current conversation list immediately via the callback,
|
||||||
|
* then invokes the callback again whenever the list changes.
|
||||||
|
* @returns An unsubscribe function.
|
||||||
|
*/
|
||||||
subscribeConversations(callback: (conversations: ConversationData[]) => void): () => void {
|
subscribeConversations(callback: (conversations: ConversationData[]) => void): () => void {
|
||||||
if (!ImDatabase.isInitialized()) {
|
if (!ImDatabase.isInitialized()) {
|
||||||
conversationListeners.add(callback)
|
conversationListeners.add(callback)
|
||||||
|
|||||||
@ -40,6 +40,21 @@ export const PushSDK = {
|
|||||||
await registerPendingToken()
|
await registerPendingToken()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache a device token without immediately registering it.
|
||||||
|
* Call this when the native layer receives a token before the user is logged in.
|
||||||
|
*/
|
||||||
|
setPendingToken(token: string, vendor?: PushVendor): void {
|
||||||
|
pendingToken = { token, vendor }
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the currently cached pending token, if any.
|
||||||
|
*/
|
||||||
|
getPendingToken(): PendingDeviceToken | null {
|
||||||
|
return pendingToken
|
||||||
|
},
|
||||||
|
|
||||||
async setDeviceToken(token: string, vendor?: PushVendor): Promise<void> {
|
async setDeviceToken(token: string, vendor?: PushVendor): Promise<void> {
|
||||||
pendingToken = { token, vendor }
|
pendingToken = { token, vendor }
|
||||||
await registerPendingToken()
|
await registerPendingToken()
|
||||||
@ -102,6 +117,7 @@ export const PushSDK = {
|
|||||||
osVersion: device.osVersion,
|
osVersion: device.osVersion,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
pendingToken = null
|
||||||
},
|
},
|
||||||
|
|
||||||
async unregisterToken(userId: string): Promise<void> {
|
async unregisterToken(userId: string): Promise<void> {
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户