diff --git a/app/sitemap.ts b/app/sitemap.ts
index 4a91cee6b3..6085065e80 100644
--- a/app/sitemap.ts
+++ b/app/sitemap.ts
@@ -3,7 +3,10 @@ import { getAllRoutes } from '@/src/lib/routes';
import { isSdkPlatformVisible } from '@/src/config/docs';
import { siteConfig } from '@/src/config/site';
import { toLocalizedPath } from '@/src/lib/i18n';
-import { getPublishedWasmLocales, isWasmRoute } from '@/src/lib/wasm-publication';
+import {
+ getPublishedClientSdkLocales,
+ isClientSdkRoute,
+} from '@/src/lib/client-sdk-publication';
import { getGuidePagePaths } from '@/src/components/docs/guides-page';
export default function sitemap(): MetadataRoute.Sitemap {
@@ -22,8 +25,8 @@ export default function sitemap(): MetadataRoute.Sitemap {
)
.flatMap((route) => {
const changeFrequency = 'monthly' as const;
- const locales = isWasmRoute(route.path)
- ? getPublishedWasmLocales(route.path)
+ const locales = isClientSdkRoute(route.path)
+ ? getPublishedClientSdkLocales(route.path)
: (['en', 'zh'] as const);
return locales.map((locale) => ({
url: new URL(toLocalizedPath(route.path, locale), siteConfig.siteUrl).toString(),
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx
new file mode 100644
index 0000000000..9b82fd69cb
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx
@@ -0,0 +1,35 @@
+---
+title: 'Accept a call'
+description: 'OpenIM uni-app / uni-app x SDK guide for Accept a call.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/accept-call'
+---
+
+```uts
+import { signalingAccept } from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingAccept({ invitation })
+```
+
+`signalingAccept()` is Commercial. Pass the original `OpenIMSignalingInvitationInfo` received from `onReceiveNewInvitation`; it must retain the room, inviter, invitees, and session type. Do not reconstruct it.
+
+Validate the active SDK session and request microphone or camera permission before accepting. If permission is denied, do not send an accept request; reject the call or explain the failure according to the product flow.
+
+## Result
+
+The Promise resolves to `OpenIMSignalingAcceptResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `roomID` | `string` or `null` | Media room identifier for this call. |
+| `token` | `string` or `null` | Short-lived credential used to join the room. |
+| `liveURL` | `string` or `null` | Media service connection address. |
+| `invitation` | `OpenIMSignalingInvitationInfo` or `null` | Invitation snapshot returned by the server. |
+
+Keep these values only in memory. Join the media engine only after obtaining a valid `roomID` and `token`. Promise completion, remote signaling events, and an established media connection are separate phases; continue merging state through [call events](/sdk/uniapp/calling/managing-calls/handle-call-events).
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx
new file mode 100644
index 0000000000..287c33233f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Cancel a call invitation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Cancel a call invitation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/cancel-call'
+---
+
+```uts
+import { signalingCancel } from '@/uni_modules/unix-openim-sdk'
+
+await signalingCancel({ invitation })
+```
+
+`signalingCancel()` is Commercial and is called by the inviter while the invitation is still unanswered. Pass the complete original `OpenIMSignalingInvitationInfo`; a newly constructed object containing only `roomID` is not sufficient.
+
+Cancellation and hangup have different meanings: cancel an unanswered invitation, and hang up an accepted or connecting session.
+
+Promise success means the cancel signaling request completed. The app must also leave its local waiting state and release media resources that were prepared but not used. The remote side updates through `onInvitationCancelled`. Prevent duplicate actions and resolve cancel/accept races from [call events](/sdk/uniapp/calling/managing-calls/handle-call-events).
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx
new file mode 100644
index 0000000000..5b7f1842f5
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx
@@ -0,0 +1,74 @@
+---
+title: 'Handle call events'
+description: 'OpenIM uni-app / uni-app x SDK guide for Handle call events.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/handle-call-events'
+---
+
+Keep Commercial call listeners in one call-state layer. Merge invitation lifecycle, participant connection, and stream changes into the same local state keyed by `roomID`. Every event delivers a raw JSON string; keep the callback short, validate JSON, and then map it to the application's call domain model.
+
+| Event | Purpose |
+| --- | --- |
+| `onReceiveNewInvitation` | A new call invitation arrived. |
+| `onInviteeAccepted`, `onInviteeRejected` | The current invitation was accepted or rejected. |
+| `onInvitationCancelled`, `onInvitationTimeout` | The invitation was cancelled or timed out. |
+| `onInviteeAcceptedByOtherDevice`, `onInviteeRejectedByOtherDevice` | Another device for the same account handled it. |
+| `onHangUp` | A participant ended the call. |
+| `onRoomParticipantConnected`, `onRoomParticipantDisconnected` | Room participant connection changed. |
+| `onStreamChange` | Participant media stream state changed. |
+
+```uts
+import {
+ off,
+ onHangUp,
+ onInvitationCancelled,
+ onInvitationTimeout,
+ onInviteeAccepted,
+ onInviteeAcceptedByOtherDevice,
+ onInviteeRejected,
+ onInviteeRejectedByOtherDevice,
+ onReceiveNewInvitation,
+ onRoomParticipantConnected,
+ onRoomParticipantDisconnected,
+ onStreamChange,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+function handleCallPayload(payload : string) {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) routeValidatedCallEvent(value)
+ } catch (_) {
+ console.error('Invalid call event payload')
+ }
+}
+
+const invitationSubscription = onReceiveNewInvitation(handleCallPayload)
+const subscriptions : Array = [
+ invitationSubscription,
+ onInviteeAccepted(handleCallPayload),
+ onInviteeAcceptedByOtherDevice(handleCallPayload),
+ onInviteeRejected(handleCallPayload),
+ onInviteeRejectedByOtherDevice(handleCallPayload),
+ onInvitationCancelled(handleCallPayload),
+ onInvitationTimeout(handleCallPayload),
+ onHangUp(handleCallPayload),
+ onRoomParticipantConnected(handleCallPayload),
+ onRoomParticipantDisconnected(handleCallPayload),
+ onStreamChange(handleCallPayload),
+]
+
+function removeCallListeners() {
+ subscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+This page is the sole complete listener owner for these 11 events. Merge participant state using both room and user IDs; do not rely on event order, display names, or array positions. Deduplicate with the room ID, local session ID, and runtime generation so stale events cannot reopen UI. Call `removeCallListeners()` when the call state layer is destroyed, the user logs out, or the account changes.
+
+HarmonyOS returns a `platform-unsupported` subscription for `onStreamChange` and does not fabricate a stream event. The other signaling events on this page are supported. Never log raw payloads or RTC tokens.
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx
new file mode 100644
index 0000000000..a3e22dd534
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx
@@ -0,0 +1,24 @@
+---
+title: 'End a call'
+description: 'OpenIM uni-app / uni-app x SDK guide for End a call.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/hang-up-call'
+---
+
+```uts
+import { signalingHungUp } from '@/uni_modules/unix-openim-sdk'
+
+await signalingHungUp({ invitation })
+```
+
+After a call has connected, a participant uses the Commercial `signalingHungUp()` operation. Pass the complete `OpenIMSignalingInvitationInfo` used by the current call; its `roomID` must match the active media room.
+
+Promise success only means the hangup signaling request completed. The application must also stop local capture, disconnect the media room, and release camera, microphone, and page resources.
+
+Lock the ending transition so local UI actions, remote hangup, timeout, and network errors cannot execute cleanup twice. Cancellation, rejection, timeout, and hangup should converge on one idempotent cleanup flow keyed by `roomID`. Continue handling `onHangUp` as documented in [call events](/sdk/uniapp/calling/managing-calls/handle-call-events).
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx
new file mode 100644
index 0000000000..d21116afde
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx
@@ -0,0 +1,22 @@
+---
+title: 'Reject a call'
+description: 'OpenIM uni-app / uni-app x SDK guide for Reject a call.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/reject-call'
+---
+
+```uts
+import { signalingReject } from '@/uni_modules/unix-openim-sdk'
+
+await signalingReject({ invitation })
+```
+
+When the user declines an incoming call, pass the complete received `OpenIMSignalingInvitationInfo` to the Commercial `signalingReject()` operation. Do not reconstruct the invitation or alter its `roomID`.
+
+Promise success only means OpenIMServer completed the reject request. The local incoming-call UI can then close, while the inviter updates through `onInviteeRejected`. Remote and multi-device events may race with the local action and must be handled idempotently. See [call events](/sdk/uniapp/calling/managing-calls/handle-call-events) for the complete lifecycle.
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx
new file mode 100644
index 0000000000..94ffdc68b1
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx
@@ -0,0 +1,63 @@
+---
+title: 'Start a group call'
+description: 'OpenIM uni-app / uni-app x SDK guide for Start a group call.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/start-group-call'
+---
+
+The Commercial `signalingInviteInGroup()` operation starts a group call. It invites only the users listed in `inviteeUserIDList`; setting `groupID` does not automatically invite every group member.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `invitation.inviterUserID` | `string` | Yes | Current user ID. |
+| `invitation.inviteeUserIDList` | `string[]` | Yes | Selected members; exclude the inviter. |
+| `invitation.groupID` | `string` | Yes | Target group ID. |
+| `invitation.roomID` | `string` | Yes | Shared unique room identifier. |
+| `invitation.timeout` | `number` | Yes | Invitation timeout in seconds. |
+| `invitation.mediaType` | `string` | Yes | `audio` or `video` by application convention. |
+| `invitation.sessionType` | `number` | Yes | Use the matching group session constant. |
+| `invitation.platformID` | `number` | Yes | Current native platform constant. |
+| `invitation.customData` | `string` | No | Application extension data. |
+| `invitation.initiateTime` | `number` | No | Invitation start time. The signaling flow normally maintains it, so new calls can omit it. |
+| `invitation.busyLineUserIDList` | `string[]` | No | Busy-user list returned by an existing flow. Omit it when starting a new invitation. |
+| `offlinePushInfo` | `OpenIMSignalingOfflinePushInfo` | No | Offline push content. |
+| `offlinePushInfo.title` | `string` | Conditional | Push title, required when `offlinePushInfo` is provided. |
+| `offlinePushInfo.desc` | `string` | Conditional | Push body, required when `offlinePushInfo` is provided. |
+| `offlinePushInfo.ex` | `string` | Conditional | Extension string, required when `offlinePushInfo` is provided. Pass an empty string if unused. |
+| `offlinePushInfo.iOSPushSound` | `string` | Conditional | iOS push sound, required when `offlinePushInfo` is provided. |
+| `offlinePushInfo.iOSBadgeCount` | `boolean` | Conditional | Whether the push updates the iOS badge, required when `offlinePushInfo` is provided. |
+
+```uts
+import {
+ OpenIMPlatformAndroid,
+ OpenIMSessionTypeWriteGroup,
+ signalingInviteInGroup,
+} from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingInviteInGroup({
+ invitation: {
+ inviterUserID: currentUserID,
+ inviteeUserIDList: selectedGroupMemberIDs,
+ customData: JSON.stringify({ source: 'group-call' }),
+ groupID,
+ roomID: groupID,
+ timeout: 30,
+ mediaType: 'video',
+ sessionType: OpenIMSessionTypeWriteGroup,
+ platformID: OpenIMPlatformAndroid,
+ },
+ offlinePushInfo,
+})
+```
+
+This example reuses the group ID as the room ID. If the application generates a different room ID, all participants must use that value. Use `OpenIMPlatformIOS` on iOS. Exclude the current user, blank IDs, and duplicates, and verify that selected users are still group members.
+
+The Promise resolves to `OpenIMSignalingInviteResult | null`; see [Start a one-to-one call](/sdk/uniapp/calling/managing-calls/start-single-call) for all fields. A busy-user list only identifies members who were busy at invite time. It must not cancel invitations for other users, and success does not mean anyone has accepted. Merge later acceptance, rejection, and timeout through [call events](/sdk/uniapp/calling/managing-calls/handle-call-events).
diff --git a/content/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx b/content/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx
new file mode 100644
index 0000000000..7683c0818f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx
@@ -0,0 +1,75 @@
+---
+title: 'Start a one-to-one call'
+description: 'OpenIM uni-app / uni-app x SDK guide for Start a one-to-one call.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/managing-calls/start-single-call'
+---
+
+The Commercial `signalingInvite()` operation starts a one-to-one audio or video call. `unix-openim-sdk` creates the signaling invitation; the application still joins its media engine with the returned room credentials.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `invitation` | `OpenIMSignalingInvitationInfo` | Yes | Invitation for this call. |
+| `invitation.inviterUserID` | `string` | Yes | Current logged-in user ID. |
+| `invitation.inviteeUserIDList` | `string[]` | Yes | Invitees; use one peer for a one-to-one call. |
+| `invitation.groupID` | `string` | Yes | Use an empty string for one-to-one calls. |
+| `invitation.roomID` | `string` | Yes | Unique room identifier shared by all call state. |
+| `invitation.timeout` | `number` | Yes | Invitation timeout in seconds. |
+| `invitation.mediaType` | `string` | Yes | Application convention such as `audio` or `video`. |
+| `invitation.sessionType` | `number` | Yes | Use `OpenIMSessionTypeSingle`. |
+| `invitation.platformID` | `number` | Yes | Current native platform constant. |
+| `invitation.customData` | `string` | No | Application extension data. |
+| `offlinePushInfo` | `OpenIMSignalingOfflinePushInfo` | No | Offline push title, description, and iOS settings. |
+
+```uts
+import {
+ OpenIMPlatformAndroid,
+ OpenIMSessionTypeSingle,
+ signalingInvite,
+} from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingInvite({
+ invitation: {
+ inviterUserID: currentUserID,
+ inviteeUserIDList: [peerUserID],
+ customData: JSON.stringify({ source: 'contact-card' }),
+ groupID: '',
+ roomID: createBusinessRoomID(),
+ timeout: 30,
+ mediaType: 'video',
+ sessionType: OpenIMSessionTypeSingle,
+ platformID: OpenIMPlatformAndroid,
+ },
+ offlinePushInfo: {
+ title: 'Video call',
+ desc: 'You have an incoming video call',
+ ex: '',
+ iOSPushSound: 'default',
+ iOSBadgeCount: true,
+ },
+})
+```
+
+Use `OpenIMPlatformIOS` on iOS. Generate a stable room ID for this call and keep it consistent across participants.
+
+## Result
+
+The Promise resolves to `OpenIMSignalingInviteResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `roomID` | `string` or `null` | Media room identifier. |
+| `token` | `string` or `null` | Short-lived room credential. |
+| `liveURL` | `string` or `null` | Media service connection address. |
+| `busyLineUserIDList` | `string[]` or `null` | Users who were busy when invited. |
+| `invitation` | `OpenIMSignalingInvitationInfo` or `null` | Server invitation snapshot. |
+
+Join the media engine only after obtaining a valid room ID and token. Promise success does not mean the peer accepted; merge later state through [call events](/sdk/uniapp/calling/managing-calls/handle-call-events). If the application cannot present outgoing call UI after the invite succeeds, actively cancel the invitation. Never log room credentials.
diff --git a/content/docs/chat/sdk/uniapp/calling/overview-calling.mdx b/content/docs/chat/sdk/uniapp/calling/overview-calling.mdx
new file mode 100644
index 0000000000..a768fe2e77
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/overview-calling.mdx
@@ -0,0 +1,57 @@
+---
+title: 'Audio and video calling overview'
+description: 'OpenIM uni-app / uni-app x SDK guide for Audio and video calling overview.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/overview-calling'
+---
+
+Every capability in this section is Commercial and requires OpenIMServer commercial signaling services. `unix-openim-sdk` provides the signaling APIs required to invite, accept, reject, cancel, hang up, query rooms, and synchronize call state. It coordinates participants, room information, and the signaling lifecycle; it does not capture camera frames, render remote media, or provide call UI.
+
+The application passes the returned `roomID`, `token`, and `liveURL` to its realtime media engine and remains responsible for device permissions, media tracks, weak-network behavior, and UI state. Signaling is not a complete WebRTC media SDK. For complete call and meeting UI, integrate `openim-av-runtime`; it reuses the login owned by this plugin and never initializes a second OpenIM Core.
+
+## Call flow
+
+1. Log in to IM and register signaling listeners. Call `signalingInvite()` for a one-to-one call or `signalingInviteInGroup()` for a group call.
+2. The invitee receives a raw JSON payload from `onReceiveNewInvitation`, validates it, maps it to `OpenIMSignalingInvitationInfo`, and presents incoming-call UI.
+3. The invitee requests media permission before calling `signalingAccept()`, or calls `signalingReject()` to decline.
+4. Both sides use the returned room ID, token, and live URL to join the media engine.
+5. Participant, stream, and custom-signal events update the local call state while the room is active.
+6. The inviter can cancel an unanswered invitation, and any participant can hang up an established call.
+
+## Core data
+
+| Type | Description |
+| --- | --- |
+| `OpenIMSignalingInvitationInfo` | Inviter, invitees, group, room, media type, timeout, and session type. |
+| `OpenIMSignalingInviteResult` | Room ID, token, live URL, and busy-user list returned by OpenIMServer. |
+| `OpenIMSignalingAcceptResult` | Room credentials returned when an invitation is accepted. |
+| `OpenIMSignalingGetTokenByRoomIDResult` | Refreshed token and live URL for a known room. |
+| `OpenIMSignalingGetRoomByGroupIDResult` | Room ID and invitation snapshot for a group call. |
+
+`customData` and custom signaling are suitable only for non-secret negotiation data. Never put long-lived credentials, administrator secrets, or private authorization state in them.
+
+## State and event ownership
+
+For invite, accept, reject, cancel, and hangup operations, handle the Promise result separately from signaling events. Promise success means OpenIMServer accepted or completed that request; events describe incremental state observed by the inviter, invitee, other devices, or room participants. They are not the same completion signal.
+
+Signaling events carry raw JSON strings and must be validated before they enter application state. The complete invitation and room event lifecycle belongs to [Handle call events](/sdk/uniapp/calling/managing-calls/handle-call-events). Custom signal events belong to [Send a custom signal](/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal). Room, token, and startup-invitation queries only return a snapshot from their Promise.
+
+Use `roomID` as the primary call key and combine it with user IDs for participant state. Re-login creates a new event scope; query a room only when a current snapshot is needed.
+
+## Find a task
+
+| Task | Page |
+| --- | --- |
+| Start a one-to-one or group call | [Start a one-to-one call](/sdk/uniapp/calling/managing-calls/start-single-call), [Start a group call](/sdk/uniapp/calling/managing-calls/start-group-call) |
+| Accept or reject an invitation | [Accept a call](/sdk/uniapp/calling/managing-calls/accept-call), [Reject a call](/sdk/uniapp/calling/managing-calls/reject-call) |
+| Cancel an invitation or end a call | [Cancel a call invitation](/sdk/uniapp/calling/managing-calls/cancel-call), [End a call](/sdk/uniapp/calling/managing-calls/hang-up-call) |
+| Restore a room or pending invitation | [Get a group call room](/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id), [Get a call room token](/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id), [Restore a pending invitation](/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation) |
+| Handle lifecycle and business negotiation | [Handle call events](/sdk/uniapp/calling/managing-calls/handle-call-events), [Send a custom signal](/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal) |
+
+Keep one active call or meeting per login/runtime. Never persist or log tokens, live URLs, or raw signaling payloads.
diff --git a/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx b/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx
new file mode 100644
index 0000000000..6051649bac
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx
@@ -0,0 +1,33 @@
+---
+title: 'Get a group call room'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get a group call room.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id'
+---
+
+```uts
+import { signalingGetRoomByGroupID } from '@/uni_modules/unix-openim-sdk'
+
+const room = await signalingGetRoomByGroupID({ groupID })
+```
+
+The Commercial `signalingGetRoomByGroupID()` operation takes a group ID, not a custom room ID.
+
+## Result
+
+The Promise resolves to `OpenIMSignalingGetRoomByGroupIDResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `roomID` | `string` or `null` | Room identifier for the current group call. |
+| `invitation` | `OpenIMSignalingInvitationInfo` or `null` | Original invitation associated with the room. |
+
+Unlike the Wasm result, the uni-app / uni-app x contract does not include participant records. Obtain participant state from the media engine or application state; do not invent a `participant` field.
+
+A null result or empty `roomID` means there is no joinable call. Treat the snapshot as short-lived, continue handling signaling events, and obtain a valid token immediately before joining. Even when the application uses custom room IDs for group calls, query with `groupID` and merge the returned `roomID` into the active call state.
diff --git a/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx b/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx
new file mode 100644
index 0000000000..dab26093aa
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Get a call room token'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get a call room token.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id'
+---
+
+```uts
+import { signalingGetTokenByRoomID } from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingGetTokenByRoomID({ roomID })
+```
+
+Use the Commercial `signalingGetTokenByRoomID()` operation when the application already knows a room ID but needs fresh join credentials.
+
+The Promise resolves to `OpenIMSignalingGetTokenByRoomIDResult | null`, with optional `token` and `liveURL` fields. It does not return `roomID` again. Join the media engine with the room ID supplied to this request only after obtaining a valid token.
+
+Room tokens are short-lived secrets. Keep them only in memory and never write them to logs, URLs, analytics events, files, or persistent storage. Stop the join flow when fields are absent or expired; do not reuse old credentials.
diff --git a/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx b/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx
new file mode 100644
index 0000000000..13408a7478
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx
@@ -0,0 +1,29 @@
+---
+title: 'Restore a pending call invitation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Restore a pending call invitation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation'
+---
+
+Call the Commercial `signalingGetInvitationInfoStartApp()` operation once after event listeners are armed. It returns the invitation snapshot that may need recovery when the app starts or returns to the foreground:
+
+```uts
+import { signalingGetInvitationInfoStartApp } from '@/uni_modules/unix-openim-sdk'
+
+const result = await signalingGetInvitationInfoStartApp()
+if (result?.invitation != null) recoverInvitation(result.invitation)
+```
+
+An optional `{ userID }` parameter can explicitly identify the queried user, but the current login session normally supplies it.
+
+## Result
+
+The Promise resolves to `OpenIMSignalingGetInvitationInfoStartAppResult | null`. Its `invitation` field is `OpenIMSignalingInvitationInfo | null`. A null result or `invitation: null` is the valid “no pending invitation” state, not an error.
+
+This query only reads a snapshot and does not emit call events. Restore the incoming-call UI only when the invitation and its `roomID` are valid. The recovered snapshot may duplicate a realtime event, so deduplicate by room and local session identifiers. Perform only one startup request per runtime initialization, then continue listening for cancellation, timeout, acceptance, and hangup through [call events](/sdk/uniapp/calling/managing-calls/handle-call-events).
diff --git a/content/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx b/content/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx
new file mode 100644
index 0000000000..dd597c688a
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx
@@ -0,0 +1,77 @@
+---
+title: 'Send a custom signal'
+description: 'OpenIM uni-app / uni-app x SDK guide for Send a custom signal.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal'
+---
+
+The Commercial `signalingSendCustomSignaling()` operation sends lightweight application negotiation data to a call room, such as a raised-hand state or layout hint. It is not a chat message API and does not replace a media-engine data channel.
+
+## Send a signal
+
+`customInfo` is a string. Define and version a stable format before serializing structured data.
+
+```uts
+import {
+ off,
+ onReceiveCustomSignal,
+ onReceiveCustomSignaling,
+ signalingSendCustomSignaling,
+} from '@/uni_modules/unix-openim-sdk'
+
+const signal = {
+ version: 1,
+ eventID: createBusinessEventID(),
+ type: 'hand-raised',
+ userID: currentUserID,
+ sentAt: Date.now(),
+}
+
+await signalingSendCustomSignaling({
+ roomID,
+ customInfo: JSON.stringify(signal),
+})
+```
+
+Promise success means OpenIMServer accepted the send request, not that every participant processed it. Keep the payload small and include a protocol version and idempotency ID. Do not put files, chat history, durable state, or credentials in `customInfo`.
+
+## Receive a signal
+
+`onReceiveCustomSignal` and `onReceiveCustomSignaling` are raw JSON compatibility events for different commercial Core/service versions. Subscribe only to the event produced by the actual deployment. If both are needed for compatibility, deduplicate by `roomID:eventID`.
+
+```uts
+function handleValidatedSignal(payload : string) {
+ try {
+ const event = JSON.parseObject(payload)
+ if (event == null) return
+
+ const eventRoomID = event.getString('roomID')
+ const customInfo = event.getString('customInfo')
+ if (eventRoomID != activeRoomID || customInfo == null) return
+
+ const signal = JSON.parseObject(customInfo)
+ if (signal == null) return
+ applyValidatedCallSignal(eventRoomID, signal)
+ } catch (_) {
+ console.warn('Invalid custom call signal')
+ }
+}
+
+const signalSubscription = onReceiveCustomSignal(handleValidatedSignal)
+const signalingSubscription = onReceiveCustomSignaling(handleValidatedSignal)
+
+function removeCustomSignalListeners() {
+ off(signalSubscription)
+ off(signalingSubscription)
+}
+```
+
+Validate the outer room, then validate the custom JSON protocol version, event ID, type, and business fields before returning an application object. This page owns the complete listener examples for both compatibility events. Call `removeCustomSignalListeners()` when leaving the call, logging out, or switching accounts.
+
+Custom client signals are not authorization. Never grant host, payment, or privacy permissions from them. Store authoritative state in a trusted backend, and refresh durable state from the room query or backend after reconnecting instead of treating transient custom signals as replayable records.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx
new file mode 100644
index 0000000000..fe93edd08d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx
@@ -0,0 +1,36 @@
+---
+title: 'Add conversations to groups'
+description: 'OpenIM uni-app / uni-app x SDK guide for Add conversations to groups.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups'
+---
+
+`addConversationsToGroups()` Commercial updates membership using explicit sets of conversation IDs and group IDs.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationIDs` | `string[]` | Yes | Conversations to add. |
+| `conversationGroupIDs` | `string[]` | Yes | Target groups. Every conversation is added to every target group. |
+
+```uts
+import { addConversationsToGroups } from '@/uni_modules/unix-openim-sdk'
+
+await addConversationsToGroups({
+ conversationIDs: [conversationID],
+ conversationGroupIDs: ['group_a'],
+})
+```
+
+Both arrays must be non-empty. Remove blank values and duplicates before calling. One conversation can belong to several groups; this operation does not alter its messages or remove its other group memberships.
+
+## Return result
+
+The Promise resolves directly to Core's string result, meaning the membership request completed. It does not mean that the local group-member event has arrived. Confirm final membership through `onConversationGroupMemberAdded` or a new query, and never retain a local-only membership after failure. See [Conversation groups overview](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups) for the complete raw-event handling.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx
new file mode 100644
index 0000000000..ccdb68239a
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx
@@ -0,0 +1,44 @@
+---
+title: 'Create a conversation group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a conversation group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group'
+---
+
+`createConversationGroup()` Commercial creates a custom group and can add one initial conversation.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `name` | `string` | Yes | Group name. Validate blank values and length according to product rules. |
+| `order` | `number` | Yes | Sort value. Use one consistent direction throughout the product. |
+| `conversationGroupType` | `OpenIMConversationGroupType` | Yes | Group type allowed by the plugin contract. |
+| `conversationID` | `string` or `null` | No | Initial conversation added during creation. |
+| `ex` | `string` or `null` | No | Extension string. It is a complete value and is not merged as JSON. |
+
+```uts
+import { createConversationGroup } from '@/uni_modules/unix-openim-sdk'
+
+const result = await createConversationGroup({
+ name: 'Priority',
+ order: 100,
+ conversationGroupType: 0,
+ conversationID,
+ ex: '',
+})
+
+const group = result?.conversationGroup
+```
+
+## Return result
+
+The Promise resolves directly to `OpenIMCreateConversationGroupResult` or `null`. Its `conversationGroup` is the new snapshot and can itself be `null`; add it to the local index only after validating a non-empty `conversationGroupID`.
+
+Promise completion and `onConversationGroupAdded` are separate stages. Requery after the raw event to reconcile the final list. If `conversationID` was provided, reconcile that membership from the query as well.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx
new file mode 100644
index 0000000000..32beca1a6e
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Delete a conversation group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete a conversation group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group'
+---
+
+`deleteConversationGroup()` Commercial deletes one conversation group. The required `conversationGroupID` must come from the current account's group snapshot, not a name or array index.
+
+```uts
+import { deleteConversationGroup } from '@/uni_modules/unix-openim-sdk'
+
+await deleteConversationGroup({ conversationGroupID: groupID })
+```
+
+## Return result
+
+The Promise resolves directly to a string result, meaning the deletion request completed. Deleting a group does not delete its conversations, messages, or the underlying conversation records.
+
+Ask for confirmation in the UI. After success, use `onConversationGroupDeleted` or a new query to remove the local group and membership indexes by `conversationGroupID`. Do not hide the group before a failed Promise, and prefer a new snapshot when event and local state disagree.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx
new file mode 100644
index 0000000000..4f21e2d2bb
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx
@@ -0,0 +1,21 @@
+---
+title: 'getConversationGroupByConversationID'
+description: 'OpenIM uni-app / uni-app x SDK guide for getConversationGroupByConversationID.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id'
+---
+
+```uts
+import { getConversationGroupByConversationID } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationGroupByConversationID({ conversationID })
+const groups = result?.conversationGroups ?? []
+```
+
+This Commercial operation returns every group containing one conversation. A conversation can belong to several groups, so do not read only the first item. Deduplicate by `conversationGroupID`; an empty array means that the conversation currently belongs to no group, not that the query failed.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx
new file mode 100644
index 0000000000..b429e528fc
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx
@@ -0,0 +1,43 @@
+---
+title: 'Get conversations in a group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get conversations in a group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations'
+---
+
+`getConversationGroupInfoWithConversations()` Commercial returns group metadata, the total conversation count, and one page of conversations.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationGroupID` | `string` | Yes | Group to query. |
+| `pagination.pageNumber` | `number` | Yes | Page number; this contract example starts at `1`. |
+| `pagination.showNumber` | `number` | Yes | Conversations requested per page. |
+
+```uts
+import { getConversationGroupInfoWithConversations } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationGroupInfoWithConversations({
+ conversationGroupID: groupID,
+ pagination: { pageNumber: 1, showNumber: 100 },
+})
+```
+
+## Return result
+
+The Promise resolves directly to `OpenIMGetConversationGroupInfoWithConversationsResult` or `null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `conversationGroup` | `OpenIMConversationGroupItem` or `null` | Group metadata. Do not continue paging if it is `null`. |
+| `ConversationTotal` | `number` or `null` (optional) | Total conversations. The initial uppercase `C` is part of the contract. |
+| `conversations` | `OpenIMConversationItem[]` | Current page. |
+
+Membership can change while pages load. Deduplicate by `conversationID`, and rebuild pagination on the first page or after a membership event. Do not replace `ConversationTotal` with the current array length.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx
new file mode 100644
index 0000000000..483386e8bd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx
@@ -0,0 +1,46 @@
+---
+title: 'Get conversation groups'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get conversation groups.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups'
+---
+
+`getConversationGroups()` Commercial queries groups by `conversationGroupType`.
+
+`conversationGroupType` is a required `OpenIMConversationGroupQueryType`. Use the contract value for normal custom groups when rendering the normal grouping UI, or the contract value that queries all types when the product needs a complete snapshot. Do not mix a creation type, UI tab index, or local enum with the query type.
+
+```uts
+import { getConversationGroups } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationGroups({ conversationGroupType: 0 })
+const groups = result?.conversationGroups ?? []
+```
+
+## Return result
+
+The Promise resolves directly to `OpenIMGetConversationGroupsResult` or `null`. Read the snapshot from `conversationGroups`, deduplicate valid IDs, and sort by `order`.
+
+### Conversation-group fields
+
+Every `OpenIMConversationGroupItem` field can be absent:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `conversationGroupID` | `string` or `null` | Stable group ID and merge key for group events. Validate it before caching. |
+| `name` | `string` or `null` | Display name. |
+| `order` | `number` or `null` | Server/Core sort value. |
+| `conversationGroupType` | `number` or `null` | Group type. |
+| `conversationIDs` | `string[]` or `null` | Conversation IDs included in this snapshot, not complete conversation objects. |
+| `hidden` | `boolean` or `null` | Whether the group is hidden. |
+| `unreadCount` | `number` or `null` | Aggregate unread-count snapshot. |
+| `ex` | `string` or `null` | Application extension string; parse only a confirmed format. |
+
+The item stores conversation IDs rather than complete conversation details. Use [Get a group with its conversations](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations) when member conversation objects, pages, and the total count are needed.
+
+This operation only establishes a snapshot and does not trigger a group event. Merge later incremental events and query again to reconcile after reconnect, account change, or an event gap. See [Conversation groups overview](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups) for the event list.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx
new file mode 100644
index 0000000000..7b0a348b46
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx
@@ -0,0 +1,90 @@
+---
+title: 'Conversation group overview'
+description: 'OpenIM uni-app / uni-app x SDK guide for Conversation group overview.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups'
+---
+
+Conversation groups are Commercial. They organize conversations into custom groups with a name, order, hidden state, unread snapshot, and member conversation IDs.
+
+## Group types
+
+Creation uses `OpenIMConversationGroupType`; queries use `OpenIMConversationGroupQueryType`. They belong to different operation contracts. Do not pass a UI tab index directly as either SDK type.
+
+One conversation can belong to several groups. Groups organize conversation entry points; they do not copy or move message data. Deleting a group or removing membership does not delete the underlying conversation.
+
+## Group data
+
+Every `OpenIMConversationGroupItem` field is optional:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `conversationGroupID` | `string` or `null` | Stable group identifier. Cache only after validating it. |
+| `name` | `string` or `null` | Group name. |
+| `order` | `number` or `null` | Sort value. |
+| `ex` | `string` or `null` | Application extension; parse only a confirmed format. |
+| `conversationGroupType` | `number` or `null` | Group type. |
+| `hidden` | `boolean` or `null` | Whether the group is hidden. |
+| `unreadCount` | `number` or `null` | Group-level unread snapshot. |
+| `conversationIDs` | `string[]` or `null` | Member IDs included in this response; it might not be a complete paginated set. |
+
+Use a non-empty `conversationGroupID` as the index key. Names, order, and hidden state can change. Query [group information with conversations](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations) when complete membership, conversation objects, and total count are needed.
+
+## Available operations
+
+| Task | Page |
+| --- | --- |
+| Create a group and optionally add one initial conversation | [Create a conversation group](/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group) |
+| Query groups | [Get conversation groups](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups) |
+| Query group metadata, members, and total count | [Get a group with its conversations](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations) |
+| Query all groups containing one conversation | [Get groups for a conversation](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id) |
+| Add or remove membership | [Add conversations to groups](/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups), [Remove conversations from groups](/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups) |
+| Update name, extension, or hidden state | [Update a conversation group](/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group) |
+| Change group ordering | [Set conversation-group order](/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order) |
+| Delete a group | [Delete a conversation group](/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group) |
+
+Query a snapshot when the page opens. After a mutation Promise succeeds, continue to wait for an event or requery. When raw event fields are not frozen, never replace a query result with guessed local state.
+
+## Listen for group changes
+
+The five group events return opaque JSON strings rather than typed objects:
+
+```uts
+import {
+ off,
+ onConversationGroupAdded,
+ onConversationGroupChanged,
+ onConversationGroupDeleted,
+ onConversationGroupMemberAdded,
+ onConversationGroupMemberDeleted,
+} from '@/uni_modules/unix-openim-sdk'
+
+function refreshFromRawGroupEvent(payload : string) {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) refreshConversationGroups()
+ } catch (_) {
+ console.error('Invalid conversation group event payload')
+ }
+}
+
+const addedSubscription = onConversationGroupAdded(refreshFromRawGroupEvent)
+const subscriptions : Array = [
+ addedSubscription,
+ onConversationGroupChanged(refreshFromRawGroupEvent),
+ onConversationGroupDeleted(refreshFromRawGroupEvent),
+ onConversationGroupMemberAdded(refreshFromRawGroupEvent),
+ onConversationGroupMemberDeleted(refreshFromRawGroupEvent),
+]
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+The added, changed, and deleted events describe group objects; the member-added and member-deleted events describe membership. Because the raw payload has no frozen DTO, validate only that it is valid JSON and then requery the related snapshot.
+
+Do not depend on unfrozen fields after JSON validation. Handlers should return quickly and isolate refresh tasks by the current logged-in user. Stop old-account writes before releasing each handle on account switch or dispose. Never log a complete payload because `ex` and other fields can contain application data.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx
new file mode 100644
index 0000000000..717f836388
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx
@@ -0,0 +1,36 @@
+---
+title: 'Remove conversations from groups'
+description: 'OpenIM uni-app / uni-app x SDK guide for Remove conversations from groups.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups'
+---
+
+`removeConversationsFromGroups()` Commercial uses the same membership parameters as the add operation.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationIDs` | `string[]` | Yes | Conversations to remove. |
+| `conversationGroupIDs` | `string[]` | Yes | Groups from which to remove them. |
+
+```uts
+import { removeConversationsFromGroups } from '@/uni_modules/unix-openim-sdk'
+
+await removeConversationsFromGroups({
+ conversationIDs: [conversationID],
+ conversationGroupIDs: ['group_a'],
+})
+```
+
+Both arrays must be non-empty and deduplicated. Removing membership does not delete a conversation or its messages and does not affect that conversation's membership in other groups.
+
+## Return result
+
+The Promise resolves directly to a string result, meaning the request completed rather than proving that the local snapshot is updated. Process `onConversationGroupMemberDeleted` or requery the group. Let the server's final state handle a repeated removal; do not retry forever or fabricate local success after failure.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx
new file mode 100644
index 0000000000..c39d326482
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx
@@ -0,0 +1,40 @@
+---
+title: 'Reorder conversation groups'
+description: 'OpenIM uni-app / uni-app x SDK guide for Reorder conversation groups.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order'
+---
+
+`setConversationGroupOrder()` Commercial submits group IDs with their new sort values in one batch.
+
+## Parameters
+
+`conversationGroupOrders` is a non-empty array. Every item contains:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationGroupID` | `string` | Yes | Group to reorder. |
+| `order` | `number` | Yes | New sort value. Avoid duplicate values or unstable ordering rules in one batch. |
+
+```uts
+import { setConversationGroupOrder } from '@/uni_modules/unix-openim-sdk'
+
+await setConversationGroupOrder({
+ conversationGroupOrders: [
+ { conversationGroupID: 'group_a', order: 100 },
+ { conversationGroupID: 'group_b', order: 200 },
+ ],
+})
+```
+
+Submit the complete affected set once when dragging ends rather than issuing one request per movement. Deduplicate by `conversationGroupID` and calculate all affected values with a stable algorithm.
+
+## Return result
+
+The Promise resolves directly to a string result, meaning the reorder request completed. Requery groups or await the group-change event to confirm final ordering. If several clients edit concurrently, use the final server `order` rather than retaining only the local drag order.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx
new file mode 100644
index 0000000000..ad6bac9d62
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx
@@ -0,0 +1,39 @@
+---
+title: 'Update a conversation group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Update a conversation group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group'
+---
+
+`updateConversationGroup()` Commercial updates only the supplied fields.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationGroupID` | `string` | Yes | Group to update. |
+| `name` | `string` or `null` | No | New name. |
+| `ex` | `string` or `null` | No | New extension string; completely replaces the old value. |
+| `hidden` | `boolean` or `null` | No | Whether the application UI hides the group. |
+
+```uts
+import { updateConversationGroup } from '@/uni_modules/unix-openim-sdk'
+
+const result = await updateConversationGroup({
+ conversationGroupID: groupID,
+ name: 'Important',
+ hidden: false,
+})
+```
+
+Provide at least one real update field in addition to `conversationGroupID`. `ex` is a complete replacement; if several modules share it, read and merge their application namespaces first.
+
+## Return result
+
+The Promise resolves directly to `OpenIMUpdateConversationGroupResult` or `null`. `conversationGroup` is the updated snapshot or `null`. Merge it immediately only when it has a valid ID, then reconcile through `onConversationGroupChanged` or a new query.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx
new file mode 100644
index 0000000000..1125161760
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Clear messages in a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Clear messages in a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages'
+---
+
+`clearConversationAndDeleteAllMsg()` clears every message from one conversation while keeping the conversation entry.
+
+```uts
+import { clearConversationAndDeleteAllMsg } from '@/uni_modules/unix-openim-sdk'
+
+await clearConversationAndDeleteAllMsg(conversationID)
+```
+
+Ask for confirmation first and stop in-flight history pagination. Promise success means that Core completed the clear request; then clear the message store and requery the conversation so latest-message, sequence, and unread state come from Core.
+
+This operation is different from deleting the conversation together with its messages. Use [Delete a conversation and all messages](/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages) when the conversation entry must also be removed.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx
new file mode 100644
index 0000000000..9174d99806
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Reset group mention status'
+description: 'OpenIM uni-app / uni-app x SDK guide for Reset group mention status.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/clear-group-mentions'
+---
+
+Use `setConversation()` to clear the group-mention indicator on one group conversation.
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, groupAtType: 0 })
+```
+
+Use the contract-defined “no mention” value for `groupAtType`; do not invent another numeric meaning. Promise success means that the conversation update request completed. Merge the later `onConversationChanged` snapshot or query the conversation again.
+
+This only changes the conversation's mention prompt. It does not delete @ messages and does not clear unread count. To clear unread state, call [Mark a conversation as read](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read) separately.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx
new file mode 100644
index 0000000000..ec5dee3503
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Delete a conversation and its messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete a conversation and its messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages'
+---
+
+`deleteConversationAndDeleteAllMsg()` removes a conversation entry and all of its messages according to Core/server policy.
+
+```uts
+import { deleteConversationAndDeleteAllMsg } from '@/uni_modules/unix-openim-sdk'
+
+await deleteConversationAndDeleteAllMsg(conversationID)
+```
+
+This operation is difficult to recover. Ask for confirmation, stop pagination and writes for the conversation, and do not confuse it with hiding a conversation or clearing messages while keeping the entry.
+
+Promise success means that the deletion request completed. Clear the corresponding message store and rebuild the conversation list. If another device or a later event creates state again, reconcile by `conversationID` rather than retaining a tombstone based only on the old array index.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx
new file mode 100644
index 0000000000..05fcee0b6d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Delete a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/delete-conversation'
+---
+
+`deleteConversation()` removes one conversation entry without promising to delete its message history.
+
+```uts
+import { deleteConversation } from '@/uni_modules/unix-openim-sdk'
+
+await deleteConversation(conversationID)
+```
+
+This is distinct from [deleting a conversation and all messages](/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages). Use this operation when local history is intended to remain. A later incoming message can cause the conversation to appear again.
+
+Promise success means that the delete request completed. Requery the conversation list or merge the later event by `conversationID`; do not delete cached message state unless the selected product action explicitly includes it.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx
new file mode 100644
index 0000000000..197201f17c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx
@@ -0,0 +1,29 @@
+---
+title: 'Track the total unread count'
+description: 'OpenIM uni-app / uni-app x SDK guide for Track the total unread count.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/get-total-unread-count'
+---
+
+`getTotalUnreadMsgCount()` returns the current account's aggregate conversation unread count. The value is an account snapshot, not a sum that the UI should maintain independently.
+
+Register the event before querying to reduce the synchronization gap:
+
+```uts
+import { getTotalUnreadMsgCount, off, onTotalUnreadMessageCountChanged } from '@/uni_modules/unix-openim-sdk'
+
+const unreadSubscription = onTotalUnreadMessageCountChanged((count) => renderBadge(count))
+const count = await getTotalUnreadMsgCount()
+renderBadge(count ?? 0)
+off(unreadSubscription)
+```
+
+Both the query and `onTotalUnreadMessageCountChanged` provide replacement totals. Do not apply local `+1` and `-1` deltas, which drift when messages are read on another device or during synchronization.
+
+This page is the complete owner for the total-unread event. Call `off(unreadSubscription)` on logout, account switch, or destruction of the badge state layer. Requery after login and synchronization. When using the value for the TabBar or [application badge](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state), also account for notification permission and operating-system badge behavior.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx
new file mode 100644
index 0000000000..fabda6f5f4
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Hide a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Hide a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/hide-a-conversation'
+---
+
+`hideConversation()` removes one conversation from the current account's visible list without deleting its messages.
+
+```uts
+import { hideConversation } from '@/uni_modules/unix-openim-sdk'
+
+await hideConversation(conversationID)
+```
+
+This affects only the signed-in user's conversation entry. It does not remove a one-to-one relationship, leave a group, or change another user's state. A later incoming message or synchronization can make the conversation visible again. Use the explicit deletion API when messages should also be cleared, and explain the distinction in the UI.
+
+## State after the call
+
+Promise success means that the hide request completed. The caller can remove the item from the current list by `conversationID`, but must still merge `onConversationChanged` or requery to reconcile. Do not update only a page array while leaving the conversation store unchanged; restore or update the original key if the conversation reappears.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx
new file mode 100644
index 0000000000..082210f99d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Hide all conversations'
+description: 'OpenIM uni-app / uni-app x SDK guide for Hide all conversations.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/hide-all-conversations'
+---
+
+`hideAllConversations()` hides every current conversation for the signed-in account without deleting message history.
+
+```uts
+import { hideAllConversations } from '@/uni_modules/unix-openim-sdk'
+
+await hideAllConversations()
+```
+
+This is a wide-scope list operation; ask for confirmation. Promise success means that Core completed the current local reset. It does not delete local or server messages, groups, friend relationships, or another client's conversation state.
+
+A later new message or valid resynchronization can make a conversation appear again. After completion, requery both [the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) and [the total unread count](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count). Do not interpret Promise success as a remote event or permanent deletion.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx
new file mode 100644
index 0000000000..47c8b39ba3
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Mark all conversations as read'
+description: 'OpenIM uni-app / uni-app x SDK guide for Mark all conversations as read.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read'
+---
+
+`markAllConversationMessageAsRead()` clears the unread state of all conversations currently found for the signed-in account.
+
+```uts
+import { markAllConversationMessageAsRead } from '@/uni_modules/unix-openim-sdk'
+
+await markAllConversationMessageAsRead()
+```
+
+Because this is a wide-scope state change, ask for confirmation. Promise success means that SDK Core finished the operation for the conversations it found. It does not mean that conversation events have arrived or that every other client's UI already synchronized.
+
+Do not merely set the badge to zero. Merge each `onConversationChanged` item by `conversationID` and replace the total through `onTotalUnreadMessageCountChanged`. See [Get the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) and [Get the total unread count](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count). Requery both snapshots if new unread messages may have arrived concurrently.
+
+This operation does not delete messages and does not change a conversation's message-reception option or guarantee message-level read receipts.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx
new file mode 100644
index 0000000000..47153271cc
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx
@@ -0,0 +1,39 @@
+---
+title: 'Mark a conversation as read'
+description: 'OpenIM uni-app / uni-app x SDK guide for Mark a conversation as read.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/mark-conversation-read'
+---
+
+Use `markConversationMessageAsRead()` to clear ordinary unread state for one conversation. The commercial `resetConversationUnread()` is an additional entry that can set unread count for multiple conversations. One-to-one message read receipts arrive through `onRecvC2CReadReceipt`.
+
+```uts
+import { markConversationMessageAsRead, off, onRecvC2CReadReceipt } from '@/uni_modules/unix-openim-sdk'
+
+const receiptSubscription = onRecvC2CReadReceipt((result) => {
+ result.receipts.forEach((receipt) => mergeReadReceipt(receipt))
+})
+await markConversationMessageAsRead(conversationID)
+```
+
+The Commercial reset operation uses:
+
+```uts
+import { resetConversationUnread } from '@/uni_modules/unix-openim-sdk'
+
+await resetConversationUnread({ conversationIDs: [conversationID], num: 0 })
+```
+
+Local unread reset and a remote read receipt are not the same stage. After Promise success, merge the latest conversation from `onConversationChanged` by `conversationID` or requery it. For a one-to-one receipt, locate the peer's conversation and update the messages listed in each receipt.
+
+For a group conversation, this API clears only the current account's conversation unread count. Use [Send group read receipts](/sdk/uniapp/message/managing-read-status/send-group-read-receipts) for member-level group read state. Release `receiptSubscription` on component teardown, logout, or account switch:
+
+```uts
+off(receiptSubscription)
+```
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx
new file mode 100644
index 0000000000..29852da12d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx
@@ -0,0 +1,18 @@
+---
+title: 'Mark or unmark a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Mark or unmark a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/mark-conversation'
+---
+
+Conversation marking is a Commercial capability commonly used with a marked conversation group. The frozen UTS contract has neither a `markConversation` operation nor an `isMarked` field in `OpenIMSetConversationParams`.
+
+The client therefore cannot simulate a mark through `ex` or another field. Use a supported commercial business backend or confirmed upper-layer service, then refresh [the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) and [conversation groups](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups).
+
+When no real write API is available, hide or disable the action instead of changing local-only state that will disappear on the next query.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx
new file mode 100644
index 0000000000..16765f1427
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx
@@ -0,0 +1,27 @@
+---
+title: 'Pin or unpin a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Pin or unpin a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/pin-conversation'
+---
+
+Use `setConversation()` to pin or unpin one conversation. Pass only the field being changed.
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, isPinned: true })
+
+// Unpin the conversation.
+await setConversation({ conversationID, isPinned: false })
+```
+
+Promise success means that the update request completed. Apply the final `onConversationChanged` snapshot before deriving list order, rather than assuming the Promise defines final sorting. Omitted fields retain their values; do not copy and write a complete conversation merely to update the pin state.
+
+The list store should merge by `conversationID`, then sort pinned conversations with the product's stable ordering rule. Concurrent changes from another device are reconciled by the event or a new query.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx
new file mode 100644
index 0000000000..c108dfca9b
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Set the burn duration'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set the burn duration.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-burn-duration'
+---
+
+`burnDuration` is a Commercial conversation field that defines the read-burn duration in seconds.
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, burnDuration: 30 })
+```
+
+The unit is seconds. Enabling or disabling read-burn mode also requires `isPrivateChat`; see [Enable or disable private chat](/sdk/uniapp/conversation/managing-conversations/set-private-chat).
+
+Do not confuse `burnDuration` with the server message-retention interval `msgDestructTime`. A client countdown is presentation only and must not directly delete server messages. Promise success means that the update request completed; merge `burnDuration` from `onConversationChanged` or requery the conversation. Disable the feature according to the product protocol rather than simulating server state with a local switch.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx
new file mode 100644
index 0000000000..dc10907e60
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Set a conversation draft'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set a conversation draft.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-conversation-draft'
+---
+
+`setConversationDraft()` saves a text draft for one local conversation.
+
+```uts
+import { setConversationDraft } from '@/uni_modules/unix-openim-sdk'
+
+await setConversationDraft({ conversationID, draftText: editorText })
+```
+
+Pass an explicit empty string to clear the draft:
+
+```uts
+await setConversationDraft({ conversationID, draftText: '' })
+```
+
+## State after the call
+
+Promise success means that the draft has been saved. Merge `draftText` and `draftTextTime` from `onConversationChanged` by `conversationID`; the complete event ownership is on [Get the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list).
+
+A draft is device-local conversation state and should not be assumed to synchronize to another device. Clear editor memory on logout so an old account's text cannot appear under a new account. Do not store tokens or sensitive transient form state as a conversation draft.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx
new file mode 100644
index 0000000000..66df707328
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Set conversation extra data'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set conversation extra data.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-conversation-extension'
+---
+
+Use `setConversation()` to replace a conversation's application `ex` string.
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, ex: JSON.stringify({ color: 'blue' }) })
+```
+
+`ex` is a complete replacement, not a partial merge. Read the current string, validate its versioned business schema, merge the namespaces owned by the application, and preserve unknown fields before writing. Never store tokens, secrets, private message bodies, or server-only data.
+
+Promise success means that the update request completed. Confirm final state through `onConversationChanged` or a new query. If an old schema or unknown field cannot be parsed, preserve the original string and degrade the UI rather than overwriting it.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx
new file mode 100644
index 0000000000..3e1aeb0d53
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx
@@ -0,0 +1,18 @@
+---
+title: 'Set a conversation remark'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set a conversation remark.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-conversation-remark'
+---
+
+Conversation remarks are a Commercial extension. The current `OpenIMConversationItem` and `OpenIMSetConversationParams` have no independent `remark` field, so this plugin release cannot safely write that capability.
+
+Do not encode a remark into `ex` and present it as a standard Core field. Maintain it through an authoritative commercial business API and merge the returned business data into the conversation UI.
+
+If a future contract adds the field, the interface/schema hashes will require this page to be reviewed again. Until then, neither public nor commercial clients should call a setter that does not exist.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx
new file mode 100644
index 0000000000..d302940caf
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx
@@ -0,0 +1,22 @@
+---
+title: 'Schedule server message deletion'
+description: 'OpenIM uni-app / uni-app x SDK guide for Schedule server message deletion.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-message-destruct'
+---
+
+`OpenIMConversationItem` exposes Commercial `isMsgDestruct` and `msgDestructTime` state, but the current `OpenIMSetConversationParams` has no corresponding write fields.
+
+Together, `isMsgDestruct` and `msgDestructTime` describe periodic server message deletion. This is not read-burn mode, which uses `isPrivateChat` and `burnDuration`.
+
+This plugin release can read and display the server's destruction policy but cannot copy Wasm's `setConversation({ isMsgDestruct, msgDestructTime })` call. Do not simulate the setter through a similar field or `ex`. Use a confirmed, authenticated commercial business API and requery the conversation after it completes.
+
+When the interval is reached, server policy removes server-side stored messages. It does not promise that already synchronized local copies disappear immediately from this or another device. After reinstall, local-data clearing, or synchronization on a new device, messages already removed by the server may no longer be retrievable.
+
+A client countdown is presentation only. Actual destruction is determined by Core and server state. This page preserves the same business boundary as Wasm while explicitly recording that the current Unix contract has no write capability.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx
new file mode 100644
index 0000000000..4b0f7a4dba
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Set conversation message reception'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set conversation message reception.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-message-receive-option'
+---
+
+`recvMsgOpt` controls message reception for one conversation and is updated through `setConversation()`.
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, recvMsgOpt: 1 })
+```
+
+Common values are `0` for normal reception with notifications and `2` for reception without notification. The contract also permits `1` for not receiving messages, but use it only when the product and server explicitly support that policy. Centralize these meanings in application constants instead of scattering numeric literals across pages.
+
+This setting affects only the specified conversation. The account-level default is `globalRecvMsgOpt`; see [Set global message reception](/sdk/uniapp/user/profile/set-global-message-reception). Effective behavior can be constrained by both levels.
+
+Promise success, `onConversationChanged`, and requery are three stages. Merge the event by `conversationID` or query again to confirm final state instead of changing only the current page switch.
diff --git a/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx
new file mode 100644
index 0000000000..4dd7aef84c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Enable or disable burn after reading'
+description: 'OpenIM uni-app / uni-app x SDK guide for Enable or disable burn after reading.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-private-chat'
+---
+
+`isPrivateChat` is a Commercial field written through the public `setConversation()` operation.
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, isPrivateChat: true })
+```
+
+Pass only the field being changed. Private-chat message presentation, screenshot behavior, and destruction policy are jointly defined by the commercial server and client product. Setting one boolean does not implement every UI security rule automatically.
+
+Promise success means that the request completed. Use `isPrivateChat` from the final `onConversationChanged` snapshot or a new query as the authoritative conversation state.
diff --git a/content/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx b/content/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx
new file mode 100644
index 0000000000..207dd90a64
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx
@@ -0,0 +1,74 @@
+---
+title: 'Conversation overview'
+description: 'OpenIM uni-app / uni-app x SDK guide for Conversation overview.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/overview-conversation'
+---
+
+A conversation is the local index and display snapshot for one-to-one, group, notification, and other message streams. It provides the stable `conversationID`, target identity, title, avatar, unread count, draft, pin state, receive option, and serialized latest message.
+
+Messages and conversations are related but not interchangeable. Message APIs create, send, and query `OpenIMMessageItem`; conversation APIs organize chat entry points and aggregate unread and latest-message state. Do not edit the SDK database or derive authoritative conversation state only from the visible message array.
+
+## Conversation model
+
+Use `conversationID` as the stable merge key. Common `OpenIMConversationItem` fields are:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `conversationID` | `string` | Stable identifier for snapshots, events, routing, and mutation APIs. |
+| `conversationType` | `number` | Conversation/session type. Interpret it with exported constants. |
+| `userID` | `string` | Peer user ID for one-to-one conversations. |
+| `groupID` | `string` | Group ID for group conversations. |
+| `showName` | `string` | Current display-name snapshot for conversation lists and chat titles. |
+| `faceURL` | `string` | Current avatar snapshot. |
+| `unreadCount` | `number` | Current unread count for this conversation. |
+| `recvMsgOpt` | `number` | Conversation-level reception option. |
+| `isPinned` | `boolean` | Whether the conversation is pinned. |
+| `latestMsg` | `string` | Serialized latest `OpenIMMessageItem`; validate before parsing. |
+| `latestMsgSendTime` | `number` | Latest-message send time. |
+| `draftText` / `draftTextTime` | `string` / `number` | Local draft content and update time. |
+| `ex` | `string` | Application extension string. |
+
+`latestMsg` parsing failure does not mean the conversation is invalid. Keep the item and display a fallback summary until a later message or query provides recognizable content. Names, avatars, unread counts, latest messages, and drafts are snapshots and can change; never use them as keys.
+
+The Private contract adds commercial conversation-policy, notification, attached-info, burn-duration, destruct, and grouping-related fields. A mixed page must treat those fields as optional and keep the public conversation flow working when they are absent.
+
+## Establish snapshots
+
+Use [Get the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) for the main paginated snapshot. Other query pages cover one target, a known ID set, canonical ID generation, and local search.
+
+Query operations do not create conversations. A first sent or received message can later create one and trigger `onNewConversation`. After login, synchronization, reconnect, account switch, or process restoration, query the snapshots required by the current UI instead of expecting events alone to reconstruct the database.
+
+## Update conversation state
+
+Conversation mutations include pinning, read state, draft text, receive options, marks, remarks, extensions, private-chat policy, burn duration, and commercial grouping. A mutation Promise means only that its request completed. Merge `onConversationChanged` afterward or query again; do not assume that every other device and event stream has already updated.
+
+Unread state spans several scopes:
+
+- Per-conversation unread state is in `OpenIMConversationItem.unreadCount`.
+- The application total is maintained by [Get the total unread count](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count).
+- Group-message read receipts are message-domain state, not the conversation unread total.
+
+## Keep state synchronized
+
+The canonical `onNewConversation` and `onConversationChanged` listeners live on [Get the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list). Register them before loading the first snapshot and merge by `conversationID`.
+
+Other events have their own owners: total unread count, commercial conversation deletion, and raw commercial conversation-group changes. Do not register one event from every component. Let a conversation store own the listener handles and distribute state to pages.
+
+## Conversation groups
+
+Commercial conversation groups organize one conversation into one or more custom groups without copying or moving its messages. Group items, membership, ordering, raw events, and queries are documented in [Conversation groups overview](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups).
+
+Deleting a conversation group does not delete its conversations. Likewise, deleting or hiding a conversation and removing a conversation from a group are distinct operations.
+
+## State and privacy boundaries
+
+The local conversation database belongs to OpenIM Core. Use SDK APIs to query and mutate it; do not inspect or edit database files. Clear all old-account application snapshots on logout or account switch, and guard late asynchronous writes with the account identity or commercial session epoch.
+
+Do not put tokens, private message bodies, or unredacted custom payloads in `ex`, logs, analytics, or automation evidence. When rendering `latestMsg`, apply the same content validation and privacy policy used by the message UI.
diff --git a/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx
new file mode 100644
index 0000000000..0e691a0f97
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx
@@ -0,0 +1,37 @@
+---
+title: 'Open a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Open a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target'
+---
+
+`getOneConversation()` queries one conversation by target ID and `OpenIMSessionType`. It resolves directly to `OpenIMConversationItem` or `null`.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `sourceID` | `string` | Yes | Target ID: the other user's `userID` for one-to-one chat or `groupID` for group chat. |
+| `sessionType` | `OpenIMSessionType` | Yes | Conversation type. Use exported constants such as `OpenIMSessionTypeSingle` and the corresponding group type. |
+
+```uts
+import {
+ OpenIMSessionTypeSingle,
+ getOneConversation,
+} from '@/uni_modules/unix-openim-sdk'
+
+const conversation = await getOneConversation({
+ sourceID: 'user_b',
+ sessionType: OpenIMSessionTypeSingle,
+})
+```
+
+The same string can identify different targets under different session types, so both fields must be correct. Do not pass numeric literals, and do not pass a `conversationID` as `sourceID`; use the conversation-ID query when that ID is already known.
+
+`null` can mean that the local database does not yet contain the conversation. Sending or receiving the first message can create it through a later event. This query does not create a conversation or trigger an event. Merge a non-null result by `conversationID`, not only by `sourceID`, so another session type is not overwritten.
diff --git a/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx
new file mode 100644
index 0000000000..0b74efc9e3
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx
@@ -0,0 +1,28 @@
+---
+title: 'Resolve a conversation ID'
+description: 'OpenIM uni-app / uni-app x SDK guide for Resolve a conversation ID.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id'
+---
+
+`getConversationIDBySessionType()` returns the canonical `conversationID` used by Core. It is useful for building a route key before a conversation item exists.
+
+```uts
+import {
+ OpenIMSessionTypeGroup,
+ getConversationIDBySessionType,
+} from '@/uni_modules/unix-openim-sdk'
+
+const conversationID = await getConversationIDBySessionType({
+ sourceID: 'group_123',
+ sessionType: OpenIMSessionTypeGroup,
+})
+```
+
+Do not concatenate a one-to-one or group conversation ID yourself; each session type has its own canonical rules. The returned string does not prove that a conversation exists and does not create server data. Query [the conversation by target](/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target) or the conversation list when complete conversation data is needed.
diff --git a/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx
new file mode 100644
index 0000000000..367c3f940c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx
@@ -0,0 +1,25 @@
+---
+title: 'Get conversations by ID'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get conversations by ID.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id'
+---
+
+`getMultipleConversation()` queries a batch of conversations by `conversationID` and returns `OpenIMConversationListResult` or `null`.
+
+```uts
+import { getMultipleConversation } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getMultipleConversation(['si_user_a_user_b', 'sg_group_123'])
+const conversations = result?.conversations ?? []
+```
+
+Results can be shorter than the request and need not preserve input order. Build a map by `conversationID` and keep placeholders for conversations missing from the local database. Split an unbounded set of IDs into reasonable batches.
+
+This operation establishes only a snapshot. It does not subscribe to changes. Continue to process the events owned by [Get the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) for ongoing updates.
diff --git a/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx
new file mode 100644
index 0000000000..def1d1b5bc
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx
@@ -0,0 +1,88 @@
+---
+title: 'Get the conversation list'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get the conversation list.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list'
+---
+
+Build the conversation-list snapshot with paginated `getConversationListSplit()`. Although the Private contract still exports `getAllConversationList()` for compatibility, real applications and public documentation use the paginated operation so a large local database is not loaded in one call.
+
+## Get conversations by page
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `offset` | `number` | Yes | Pagination offset; use `0` for the first page. |
+| `count` | `number` | Yes | Number to read. Choose a reasonable limit for the page and device. |
+
+```uts
+import {
+ getConversationListSplit,
+ off,
+ onConversationChanged,
+ onNewConversation,
+} from '@/uni_modules/unix-openim-sdk'
+
+const newConversationSubscription = onNewConversation((result) => {
+ result.conversations.forEach((item) => {
+ upsertConversation(item.conversationID, item)
+ })
+})
+const changedSubscription = onConversationChanged((result) => {
+ result.conversations.forEach((item) => {
+ upsertConversation(item.conversationID, item)
+ })
+})
+
+const firstPage = await getConversationListSplit({ offset: 0, count: 100 })
+replaceConversationSnapshot(firstPage?.conversations ?? [])
+```
+
+The Promise resolves directly to `OpenIMConversationListResult` or `null`; read the page from `conversations`. Replace the current account snapshot with the first page and merge later pages by `conversationID`. Do not fabricate a successful empty list for `null`; use login state and redacted diagnostics to decide whether to preserve the old snapshot or show a loading error.
+
+Increase `offset` until a page contains fewer than `count` items. Conversation events received during paging can change sorting and page boundaries. Merge by primary key, then rebuild from offset 0 on refresh or synchronization completion. Do not permanently append pages while relying on stale offsets.
+
+### Conversation fields
+
+Common `OpenIMConversationItem` fields include:
+
+| Field | Description |
+| --- | --- |
+| `conversationID` | Stable key for list snapshots and events. |
+| `conversationType` | One-to-one, group, or notification conversation type. |
+| `userID` / `groupID` | Peer user or target group according to the conversation type. |
+| `showName` / `faceURL` | Display-name and avatar snapshots. |
+| `unreadCount` | Current unread count. |
+| `latestMsg` | Serialized latest message. Preserve the conversation and show a fallback summary if parsing fails. |
+| `latestMsgSendTime` | Send time of the latest message; can participate in normal ordering. |
+| `draftText` / `draftTextTime` | Local draft and its update time. |
+| `isPinned` | Pin state. Apply pin ordering before time ordering. |
+| `recvMsgOpt` | Conversation-level message reception option. |
+
+See [Conversation overview](/sdk/uniapp/conversation/overview-conversation) for complete fields and commercial extensions. Never update by array index because pin state, latest message, draft, and unread count can all reorder the list.
+
+### Sort the list
+
+Write page and event results into a map keyed by `conversationID`, then derive the visible array. A common policy puts pinned conversations first, orders each section by latest message or draft time, and uses a stable ID tiebreaker. Do not swap page-array items directly inside event handlers.
+
+If `latestMsg` cannot be parsed, keep the conversation and show an unknown-message summary. A later recognizable message or requery will update it naturally.
+
+## Keep the list synchronized
+
+This page is the complete owner for `onNewConversation` and `onConversationChanged`. Register events before the first query to minimize gaps during login synchronization. Both callbacks contain `OpenIMConversationListResult`; iterate every item even if one conversation usually changed.
+
+Promise success, event arrival, and requery are separate stages. Rebuild the snapshot after foreground restoration, synchronization completion, reconnect, or account switch. On logout or store destruction, release the two owned handles:
+
+```uts
+off(newConversationSubscription)
+off(changedSubscription)
+```
+
+When switching accounts, stop writes from old-account paging requests before querying the new account. A late old Promise must not merge its `conversationID` list into the new account. Use an application account generation or the commercial `sdkSessionEpoch` to revalidate before completion.
diff --git a/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx
new file mode 100644
index 0000000000..e75d873029
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx
@@ -0,0 +1,25 @@
+---
+title: 'Search conversations'
+description: 'OpenIM uni-app / uni-app x SDK guide for Search conversations.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/search-conversations'
+---
+
+`searchConversation()` searches the local conversation database using a string keyword and returns `OpenIMConversationListResult` or `null`.
+
+```uts
+import { searchConversation } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchConversation('Alice')
+renderSearchResults(result?.conversations ?? [])
+```
+
+Trim whitespace first. When the input is empty, show the normal conversation list from application state instead of issuing a search. The result is a snapshot at query time; rerun the search after conversation changes, or merge later event items by `conversationID`.
+
+The exact matched conversation metadata is determined by Core. Do not promise that this searches every message body. Use message-domain search APIs for message content.
diff --git a/content/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx b/content/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx
new file mode 100644
index 0000000000..046c342044
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Handle data migration events'
+description: 'OpenIM uni-app / uni-app x SDK guide for Handle data migration events.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/events/handle-data-migration-events'
+---
+
+These four Commercial events are available on Android/iOS and return unsupported subscriptions on HarmonyOS.
+
+```uts
+import { off, onMigrationFailed, onMigrationFinished, onMigrationProgress, onMigrationStart } from '@/uni_modules/unix-openim-sdk'
+
+const subscriptions = [
+ onMigrationStart(showMigrationUI), onMigrationProgress(handleValidatedMigrationProgress),
+ onMigrationFailed(handleValidatedMigrationFailure), onMigrationFinished(finishMigrationUI),
+]
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+Progress/failure payloads are opaque strings. Validate JSON before reading it and redact paths, database details, and sensitive content. Avoid account switching or uninitialization during migration; reload snapshots after completion/failure.
diff --git a/content/docs/chat/sdk/uniapp/events/overview-events.mdx b/content/docs/chat/sdk/uniapp/events/overview-events.mdx
new file mode 100644
index 0000000000..bc84dfa94b
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/events/overview-events.mdx
@@ -0,0 +1,122 @@
+---
+title: 'Events overview'
+description: 'OpenIM uni-app / uni-app x SDK guide for Events overview.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/events/overview-events'
+---
+
+`unix-openim-sdk` publishes connection, synchronization, user, friend, conversation, group, message, and commercial signaling events through flat `on...()` functions imported from `@/uni_modules/unix-openim-sdk`. You do not create SDK instances or native listener objects for separate domains.
+
+## Register and remove events
+
+Every `on...()` call synchronously returns an independent `OpenIMSDKEventSubscription` containing an `id` and `eventName`. Save that handle and pass it to `off(subscription)` when the page, state layer, or account scope that owns it ends.
+
+```uts
+import {
+ off,
+ onConnectSuccess,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const connectionSubscription : OpenIMSDKEventSubscription = onConnectSuccess(() => {
+ setConnectionState('connected')
+})
+
+// Run when the scope that owns this listener ends.
+off(connectionSubscription)
+```
+
+Do not use the obsolete pattern in which a listener registration returns a cancellation closure, and do not invoke `connectionSubscription()` as a function. One event can have several subscribers; `off()` removes only the handler represented by the supplied handle.
+
+`offAll(eventName)` removes every handler for one event name. Reserve it for complete App teardown, controlled test resets, or infrastructure that explicitly owns every listener for that event. Pages and feature modules must not use it as local cleanup because it also removes other consumers' listeners.
+
+Handlers should return quickly. Queue expensive queries, file work, and network requests, then revalidate the current login user or commercial session epoch before writing asynchronous results. Complete business handlers appear only on the canonical pages linked below; this overview does not duplicate each domain listener.
+
+## Choose when to register
+
+| Event scope | Recommended lifecycle | Corresponding page |
+| --- | --- | --- |
+| Connection and token | Register before `login()` and clean up when changing accounts | [Authenticate and manage a session](/sdk/uniapp/getting-started/authenticate-and-manage-session) |
+| Users, friends, and blacklist | Register when initializing the contacts state layer | [User overview](/sdk/uniapp/user/overview-user) |
+| Conversation list | Register when initializing the conversation-list state layer | [Get the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) |
+| Conversation unread count | Register when initializing the application badge state layer | [Maintain the total unread count](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count) |
+| Group list | Register when initializing the group state layer | [Group overview](/sdk/uniapp/group/overview-group) |
+| Group members | Register when initializing the group-member state layer | [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list) |
+| Group applications | Register when initializing the group-application state layer | [Get received group applications](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient) |
+| Messages | Register when initializing the message state layer | [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages) |
+| Commercial signaling | Register when initializing calling functionality | [Call events](/sdk/uniapp/calling/managing-calls/handle-call-events) |
+| SDK session | Register when a commercial plugin depending on the one Core is initialized | [Update the token and observe the SDK session](/sdk/uniapp/getting-started/update-token-and-observe-sdk-session) |
+
+Do not register the same logic again on every component render, `onShow`, or list refresh. Duplicate registrations can insert messages more than once, repeatedly increment unread counts, or write asynchronous state from an old account into the current UI.
+
+Query APIs establish snapshots; events merge later changes. Use stable business identifiers: `clientMsgID` for messages, `conversationID` for conversations, `userID` for friends and blacklist, and `groupID:userID` for group members. Never deduplicate by array position or display name.
+
+## Listen for initial synchronization
+
+After login, SDK Core synchronizes OpenIMServer data. Use these events for global synchronization status and progress:
+
+| Event | Handler argument | Meaning |
+| --- | --- | --- |
+| `onSyncServerStart` | `reinstalled: boolean` | Synchronization begins. The boolean identifies whether the local database is synchronizing after reinstall or equivalent rebuild. |
+| `onSyncServerProgress` | `progress: number` | Synchronization progress changed. Use it for display; the contract does not promise every integer value. |
+| `onSyncServerFinish` | `reinstalled: boolean` | The current synchronization completed. Interfaces requiring complete data can requery their snapshots. |
+| `onSyncServerFailed` | `reinstalled: boolean` | The current synchronization failed. Record the synchronization context and wait for retry or connection recovery. |
+
+```uts
+import {
+ off,
+ onSyncServerFailed,
+ onSyncServerFinish,
+ onSyncServerProgress,
+ onSyncServerStart,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const syncSubscriptions : Array = [
+ onSyncServerStart((reinstalled) => {
+ setSyncState('syncing', 0, reinstalled)
+ }),
+ onSyncServerProgress((progress) => {
+ setSyncProgress(progress)
+ }),
+ onSyncServerFinish((reinstalled) => {
+ setSyncState('ready', 100, reinstalled)
+ refreshVisibleSnapshots()
+ }),
+ onSyncServerFailed((reinstalled) => {
+ setSyncState('failed', 0, reinstalled)
+ }),
+]
+
+function releaseSyncSubscriptions() {
+ syncSubscriptions.forEach((subscription) => off(subscription))
+ syncSubscriptions.length = 0
+}
+```
+
+The three boolean callback values represent the reinstall/synchronization context defined by the contract; they are not generic operation-success flags. The event name distinguishes completion from failure. Synchronization events describe Core's lifecycle rather than the Promise callback of one query, and they have no business-entity merge key. Isolate this state by logged-in user.
+
+This page is the canonical owner for the four synchronization events and for `off()` / `offAll()` control semantics. Call `releaseSyncSubscriptions()` on logout, account change, or SDK-scope destruction. Data can still change after synchronization finishes: requery snapshots needed by the current UI and continue merging domain events into the same state layer.
+
+## Events unsupported on HarmonyOS
+
+The locked commercial HarmonyOS HAR lacks the following ten events. Registration returns `platform-unsupported` and never fabricates a callback:
+
+- `onMigrationStart`
+- `onMigrationProgress`
+- `onMigrationFailed`
+- `onMigrationFinished`
+- `onRecvMessageExtensionsAdded`
+- `onRecvMessageExtensionsChanged`
+- `onRecvMessageExtensionsDeleted`
+- `onMessageKvInfoChanged`
+- `onStreamChange`
+- `onGroupApplicationBadgeCountChanged`
+
+Platform support and commercial ownership are separate dimensions. Handle `platform-unsupported` by disabling the feature or selecting a platform alternative. Do not retry forever or simulate an event that did not occur.
diff --git a/content/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx b/content/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx
new file mode 100644
index 0000000000..fb5b140905
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx
@@ -0,0 +1,77 @@
+---
+title: 'Upload a file'
+description: 'OpenIM uni-app / uni-app x SDK guide for Upload a file.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/file-uploads/upload-file'
+---
+
+`uploadFile()` is an independent upload operation for avatars, group images, profile attachments, and other business files. It does not create a chat message. It uploads a native-readable local file and returns its URL/URI, UUID, size, and media metadata.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `filepath` | `string` | Yes | Full local path readable by the native layer. |
+| `name` | `string` | Yes | Filename. |
+| `contentType` | `string` | Yes | MIME type. |
+| `uuid` | `string` | Yes | Stable task ID created by your application. |
+| `cancelID` | `string` or `null` | No | Stable ID used to cancel this upload. |
+| `cause` | `string` or `null` | No | Business purpose or reason for the upload. |
+
+Register the progress event before calling `uploadFile()` so a small file cannot complete before the listener exists.
+
+```uts
+import { off, onUploadFileProgress, uploadFile } from '@/uni_modules/unix-openim-sdk'
+
+const progressSubscription = onUploadFileProgress((event) => {
+ if (event == null) return
+ updateUploadProgress(event.progress)
+})
+
+const result = await uploadFile({
+ filepath: '/data/user/0/app/cache/report.pdf',
+ name: 'report.pdf',
+ contentType: 'application/pdf',
+ uuid: createStableUploadUUID(),
+ cancelID: 'upload-report-1',
+})
+
+function removeUploadListener() {
+ off(progressSubscription)
+}
+```
+
+Resolve `unifile://` to a platform sandbox path and never pass a network URL as `filepath`. Android and iOS temporary directories, grants, and lifetimes differ; do not move or delete the source while native code may still read it.
+
+The Promise resolves to `OpenIMUploadFileResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `url` | `string` or `null` | Uploaded remote URL. |
+| `uri` | `string` or `null` | Resource URI returned by the server. |
+| `uuid` | `string` or `null` | Upload task identifier. |
+| `size` | `number` or `null` | File size. |
+| `typ` | `number` or `null` | Resource type returned by the server. |
+| `mediaID` | `string` or `null` | Media resource ID. |
+
+Use `result?.url` in a profile update or when creating the appropriate message. Upload success does not update profile data or create/send a chat message; those are separate operations.
+
+## Listen for upload progress
+
+`onUploadFileProgress` returns an `OpenIMSDKEventSubscription`, and its event contains only `progress`. Unlike Wasm completion events, the current uni-app / uni-app x contract does not include a task ID. Do not correlate several concurrent uploads by array position; limit concurrency or track final state through each Promise. Call `removeUploadListener()` when the account or upload store is disposed.
+
+Commercial applications can cancel the matching task with `cancelUpload()` Commercial:
+
+```uts
+import { cancelUpload } from '@/uni_modules/unix-openim-sdk'
+
+await cancelUpload({ cancelID: 'upload-report-1' })
+```
+
+Cancellation is asynchronous; the original upload Promise and error code define the final state. Do not delete a temporary file until the upload completes or cancellation is confirmed.
diff --git a/content/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx b/content/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx
new file mode 100644
index 0000000000..b9efed130b
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx
@@ -0,0 +1,257 @@
+---
+title: 'Authenticate and manage a session'
+description: 'Log in, observe connection and token events, inspect login state, and log out safely.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/authenticate-and-manage-session'
+---
+
+`unix-openim-sdk` uses `login()` to establish the current user's session. Before authentication, complete the server, account, plugin, and native runtime preparation in [Before you start](/sdk/uniapp/getting-started/before-you-start), then [install and initialize the SDK](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk).
+
+Use this order for a complete sign-in flow:
+
+1. Initialize the one OpenIM Core in the App scope.
+2. Subscribe to connection, token, and forced-offline events before login so no transition is missed.
+3. Obtain a matching `userID` and OpenIMSDK token from a trusted backend.
+4. Call `login(userID, token)`, await the Promise, and then wait for `onConnectSuccess` before treating the connection as ready.
+5. Query user, friend, conversation, group, and message data only after the connection is ready.
+6. For active sign-out or account switching, call `logout()`, then release old-account subscriptions and clear application state.
+
+## Initialize the SDK
+
+After installing the plugin, call `initSDK()` once from an application-level service. See [Install, initialize, and inspect the SDK](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk) for configuration fields, platform constants, the required `systemType`, version inspection, and uninitialization.
+
+`unix-openim-sdk` exports flat functions. Business code does not create an SDK instance, and separate pages must not initialize Core repeatedly with different service addresses. The OpenIMServer environment is set by `initSDK()`; the current user identity is established by `login()`.
+
+### Initialization boundary
+
+`initSDK()` receives `OpenIMInitConfig`, including the platform ID, HTTP and WebSocket addresses, logging options, and required `systemType`. These are App/deployment settings rather than user fields. Account switching reuses the existing initialization and must not move those settings into an object passed to `login()`.
+
+### Understand the UTS plugin
+
+`unix-openim-sdk` is a native UTS plugin, not a JavaScript singleton factory. It owns one OpenIM Core internally, and both uni-app and uni-app x access it through flat exports from `@/uni_modules/unix-openim-sdk`. Because the standard base does not contain its native dependencies, both development and release packages must be native builds that include the plugin.
+
+## Load sign-in details for the current user
+
+Call the application backend session endpoint to obtain the current user's `userID` and token:
+
+```uts
+const session = await loadOpenIMSDKSession()
+const userID = session.userID
+const token = session.token
+```
+
+`userID` is only an OpenIMSDK user identifier; it is not a credential. The token must come from a trusted backend and belong to that `userID`. The App does not create users or issue tokens, and it must not store administrator tokens or server secrets.
+
+## Register connection events before login
+
+Register connection events before calling `login()`. This captures failures caused by networking, service addresses, tokens, or server state during the login flow and lets the UI represent each connection state.
+
+```uts
+import {
+ off,
+ onConnectFailed,
+ onConnectSuccess,
+ onConnecting,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const sessionSubscriptions : Array = []
+
+sessionSubscriptions.push(onConnecting(() => {
+ setConnectionState('connecting')
+}))
+
+sessionSubscriptions.push(onConnectSuccess(() => {
+ setConnectionState('connected')
+}))
+
+sessionSubscriptions.push(onConnectFailed((errCode, errMsg) => {
+ setConnectionState('failed')
+ console.error('OpenIM SDK connection failed', errCode, errMsg)
+}))
+```
+
+The `onConnectFailed` handler receives two arguments, `errCode` and `errMsg`, rather than one error object. Every `on...()` call returns its own `OpenIMSDKEventSubscription`; the return value is not a cancellation function and must not be invoked directly.
+
+## Login the current user
+
+```uts
+import { login } from '@/uni_modules/unix-openim-sdk'
+
+try {
+ await login(userID, token)
+} catch (error) {
+ console.error('OpenIM SDK login failed', userID, error)
+ throw error
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `userID` | `string` | Yes | Current OpenIMSDK user ID matching the token. It is not a nickname, phone number, or temporary session ID. |
+| `token` | `string` | Yes | OpenIMSDK token for the current user, returned by a trusted backend. Do not issue it in the client. |
+
+The `login()` Promise succeeding means that the login request has completed. `onConnectSuccess` means that the SDK's persistent connection is ready. These are separate stages; do not call connection-dependent message, conversation, group, or user APIs merely because the Promise resolved.
+
+If the user taps login more than once, reuse the in-flight login request and Promise instead of starting concurrent `login()` calls. Platform ID, HTTP address, and WebSocket address belong to initialization and are not repeated in an object-style login call.
+
+## Handle API results
+
+Asynchronous plugin APIs resolve directly to business values rather than the Wasm `{ data }` response wrapper. A failure rejects the Promise with a plugin error. Log only redacted error codes, method names, and user identifiers needed to correlate the failure with native logs.
+
+```uts
+import { getSelfUserInfo } from '@/uni_modules/unix-openim-sdk'
+
+try {
+ const currentUser = await getSelfUserInfo()
+ if (currentUser != null) {
+ useCurrentUser(currentUser)
+ }
+} catch (error) {
+ console.error('getSelfUserInfo failed', error)
+}
+```
+
+A query result establishes a snapshot at call time. If a mutation returns no business object that can refresh the UI, follow that API page's event or requery guidance. Promise success, event arrival, and snapshot reconciliation are three separate stages.
+
+## Inspect the current login state
+
+`getLoginStatus()` and `getLoginUserID()` take no business parameters:
+
+```uts
+import {
+ OpenIMLoginStatusLogged,
+ getLoginStatus,
+ getLoginUserID,
+} from '@/uni_modules/unix-openim-sdk'
+
+const loginStatus = await getLoginStatus()
+if (loginStatus == OpenIMLoginStatusLogged) {
+ const currentUserID = await getLoginUserID()
+ restoreSessionFor(currentUserID)
+}
+```
+
+The login-status constants are:
+
+| Status | Description |
+| --- | --- |
+| `OpenIMLoginStatusLogout` | Core is not logged in. |
+| `OpenIMLoginStatusLogging` | Login is in progress; do not start another login concurrently. |
+| `OpenIMLoginStatusLogged` | Core is logged in. Use connection events separately to determine current network readiness. |
+
+`getLoginUserID()` returns the user ID currently logged into Core. It is useful for checking that the application account and SDK account match, but it does not replace application authentication. Neither query triggers a connection event.
+
+Do not overwrite the current session by logging in with another user. Await `logout()` for the old account, clear old subscriptions and state, and then call `login()` for the new account.
+
+## Report App runtime state
+
+Report Android, iOS, and HarmonyOS foreground/background and network state once from App-level lifecycle code. Pass `true` to `setAppBackgroundStatus()` when entering the background and `false` when returning to the foreground. Call `networkStatusChanged()` when network availability or type changes.
+
+```uts
+import {
+ networkStatusChanged,
+ setAppBackgroundStatus,
+} from '@/uni_modules/unix-openim-sdk'
+
+async function reportAppBackground() {
+ await setAppBackgroundStatus(true)
+}
+
+async function reportAppForeground() {
+ await setAppBackgroundStatus(false)
+}
+
+async function reportNetworkAvailable() {
+ await networkStatusChanged()
+}
+```
+
+These operations only report runtime changes. They do not establish a new session and cannot replace `login()` or token refresh. Ordinary page entry and exit must not repeat these App-level calls. See [Handle App lifecycle and device state](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state) for uni-app / uni-app x lifecycle wiring, badges, and FCM tokens.
+
+## Handle the token lifecycle
+
+OpenIMSDK tokens are issued by a trusted backend. The public flow fetches a fresh token and reauthenticates when a token expires or becomes invalid. The commercial edition can also hot-update the token with `updateToken()`; see [Update the token and observe the SDK session](/sdk/uniapp/getting-started/update-token-and-observe-sdk-session).
+
+```uts
+import {
+ onUserTokenExpired,
+ onUserTokenInvalid,
+} from '@/uni_modules/unix-openim-sdk'
+
+sessionSubscriptions.push(onUserTokenExpired(() => {
+ requestFreshTokenAndRelogin()
+}))
+
+sessionSubscriptions.push(onUserTokenInvalid((errCode, errMsg) => {
+ console.warn('OpenIM SDK token is invalid', errCode, errMsg)
+ redirectToSignIn()
+}))
+```
+
+Like `onConnectFailed`, `onUserTokenInvalid` receives `(errCode, errMsg)`. Use these values for diagnostics and user-facing state only; never use them to bypass reauthentication, and never store the token in logs or event state.
+
+### Token model
+
+The client passes the current user's OpenIMSDK token to `login()`. Issuance, expiration, refresh, revocation, and multi-device policies belong to the application backend and OpenIMServer configuration. Implement short-lived or one-time application sessions in the backend, then reauthenticate the App in response to token lifecycle events.
+
+## Handle forced logout
+
+Subscribe to the forced-offline event. It usually means that the same account signed in on another client or that server policy requires the current client to end its session.
+
+```uts
+import { onKickedOffline } from '@/uni_modules/unix-openim-sdk'
+
+sessionSubscriptions.push(onKickedOffline(() => {
+ clearCurrentAccount()
+ showSignedInElsewhereDialog()
+}))
+```
+
+When `onKickedOffline` arrives, SDK Core is already transitioning offline. Do not race that transition with a concurrent `logout()`. Clear the application's current user, conversation, message-view, and page state, then offer reauthentication according to product policy.
+
+## Logout actively
+
+Call `logout()` when the user actively signs out or switches accounts, then clear the current user's conversation list, message views, unread state, and application state. Forced offline is not an active logout and does not run this sequence.
+
+```uts
+import { logout } from '@/uni_modules/unix-openim-sdk'
+
+await logout()
+releaseSessionSubscriptions()
+clearCurrentAccount()
+```
+
+Promise success means that the SDK session has logged out. When switching accounts, wait for old-account logout, clear old state and subscriptions, register the new account's listeners, and only then call `login()`. Do not run two accounts' login/logout flows concurrently.
+
+### Disconnecting only WebSocket
+
+The plugin does not expose a public operation that disconnects WebSocket while preserving the login session. Report foreground/background and network changes through the App-lifecycle APIs. Use `logout()` when the user session must end.
+
+## Release session listeners
+
+This page is the complete owner for connection, token, and forced-offline listeners. On logout, account switch, or destruction of the application service that owns them, pass every handle to `off(subscription)`:
+
+```uts
+function releaseSessionSubscriptions() {
+ sessionSubscriptions.forEach((subscription) => off(subscription))
+ sessionSubscriptions.length = 0
+}
+```
+
+Connection events have no business-entity merge key. Isolate their state by the current Core and logged-in user. Business pages establish snapshots through queries and then merge incremental state through each domain's event owner.
+
+## Next steps
+
+- [Before you start](/sdk/uniapp/getting-started/before-you-start)
+- [Send your first message](/sdk/uniapp/getting-started/send-first-message)
+- [Events overview](/sdk/uniapp/events/overview-events)
+- [Logger](/sdk/uniapp/logger)
diff --git a/content/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx b/content/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx
new file mode 100644
index 0000000000..4fa36b69b6
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx
@@ -0,0 +1,100 @@
+---
+title: 'Before you start'
+description: 'Prepare OpenIMServer, a user token, the UTS plugin, and a native build environment.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/before-you-start'
+---
+
+Before integrating `unix-openim-sdk` into a uni-app / uni-app x App, prepare an OpenIMServer reachable from the device, a trusted user-authentication flow, the UTS plugin, and a native build environment for every target platform. These prerequisites apply to both [authenticating and managing a session](/sdk/uniapp/getting-started/authenticate-and-manage-session) and [sending your first message](/sdk/uniapp/getting-started/send-first-message). Web, H5, and Mini Program targets cannot use this native UTS plugin.
+
+## Prepare OpenIMServer
+
+If you do not yet have an OpenIMServer deployment, follow the [Docker deployment guide](/docs/guides/quick-deployment/docker). Then verify that the actual Android, iPhone, or HarmonyOS device can reach `apiAddr` and `wsAddr`.
+
+SDK initialization needs the following service addresses:
+
+| Field | Description |
+| --- | --- |
+| `apiAddr` | OpenIMServer HTTP API address used for sign-in, synchronization, and resource requests. A production App should use a device-reachable HTTPS address with a valid certificate. |
+| `wsAddr` | OpenIMServer WebSocket address used to establish the persistent connection and receive realtime events. A production App normally uses WSS. |
+
+Do not verify the services only from the server or development Mac. A physical device cannot use the development computer's `localhost`; test LAN or public routing, TLS certificates, reverse-proxy rules, and WebSocket upgrades from the actual device.
+
+A public client can connect to a public OpenIMServer. Signaling, session, translation, and other capabilities marked Commercial also require the matching commercial server capabilities. Do not use a public server's rejection to judge whether the commercial client API is implemented correctly.
+
+## Prepare the user and token
+
+`userID` identifies an OpenIMSDK user, while the token authenticates that user. A trusted backend must create or bind OpenIMSDK users, issue tokens, and enforce application permissions. Never store an administrator token, secret, or other server credential in the App.
+
+Before integrating your backend with the OpenIMServer REST API, see [Prepare to use the Platform API](/platform-api/prepare-to-use-api) and [Issue a session token](/platform-api/user/managing-session-tokens/issue-a-session-token). If your product already has an account system, maintain a stable mapping between each application account and its OpenIMSDK `userID`, and ensure that the returned token belongs to that user.
+
+We recommend exposing a session endpoint from your application backend so that the App receives only the minimum data required to sign in:
+
+```uts
+type OpenIMSDKSession = {
+ userID : string
+ token : string
+}
+
+async function loadOpenIMSDKSession() : Promise {
+ const response = await uni.request({
+ url: `${businessApiURL}/openim/session`,
+ method: 'POST',
+ })
+
+ if (response.statusCode != 200) {
+ throw new Error('Failed to load OpenIM SDK session')
+ }
+
+ return parseTrustedSessionResponse(response.data)
+}
+```
+
+The application endpoint must authenticate the current application account before returning its OpenIMSDK sign-in details. It must not accept an arbitrary `userID` from the client and issue a token for that user without verification. `apiAddr` and `wsAddr` are normally controlled App-environment settings passed to `initSDK()`, rather than values changed in every user session response.
+
+## Prepare the UTS plugin and native runtime
+
+Install the plugin at `uni_modules/unix-openim-sdk`, use the HBuilderX/uni-app `5.23` series, and prepare the native environment for each target:
+
+| Host | Android | iOS | HarmonyOS |
+| --- | --- | --- | --- |
+| uni-app Vue 2 / Vue 3 | Supported, API 21+ | Supported, iOS 14+ | Not currently declared supported |
+| uni-app x | Supported, API 21+ | Supported, iOS 14+ | Commercial edition, API 24 |
+| Web / H5 / Mini Program | Not supported | Not supported | Not supported |
+
+- Android needs a compatible JDK and Android SDK, the plugin's declared AAR/Maven dependencies, and the ABI used by each target device.
+- iOS needs compatible Xcode/CocoaPods. The final App must link, embed, and sign the plugin XCFrameworks correctly.
+- HarmonyOS support is declared only for uni-app x with the commercial edition, the HAR matching the plugin contract, and an API 24 project.
+
+The standard base does not contain these native dependencies. Build a custom base or use the project's local Android/iOS native workflow. Do not mix public and commercial native artifacts in one plugin directory, and do not read or modify the SDK database or native cache directly.
+
+See [Integrate by host and platform](/sdk/uniapp/getting-started/environment-specific-implementation) for lifecycle, type, and file-path differences.
+
+## Choose the platform identity
+
+Pass an exported constant to `initSDK().platformID` instead of a numeric literal: `OpenIMPlatformAndroid` for Android, `OpenIMPlatformIOS` for iPhone, or `OpenIMPlatformHarmony` for HarmonyOS.
+
+Initialization also requires a matching descriptive `systemType`, such as `android`, `ios`, or `harmony`. The platform constant and `systemType` participate in server-side multi-device policy and native runtime diagnostics, so they must identify the runtime that is actually executing the SDK.
+
+## Release checklist
+
+Before releasing, test the environments and networks your product actually supports:
+
+- `initSDK()` succeeds, `login()` succeeds, and `onConnectSuccess` is received.
+- Foreground/background transitions, network interruption and recovery, token invalidation, and forced logout follow the product state machine.
+- Android contains the required ABIs and has no duplicate classes or JNI libraries.
+- The iOS device package links, embeds, and signs successfully, with complete usage descriptions and privacy manifests.
+- HarmonyOS uses the exact commercial HAR required by the contract and reports platform-unsupported capabilities explicitly.
+- Two different accounts can send and receive normal messages, query history, and keep state isolated after logout.
+- Commercial APIs are tested against the corresponding commercial services.
+- Logs, screenshots, and automation evidence contain no tokens, secrets, full private-message content, or unnecessary local absolute paths.
+
+## Continue the integration
+
+After preparing these prerequisites, complete [installation, initialization, and SDK inspection](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk), then [authenticate and manage the session](/sdk/uniapp/getting-started/authenticate-and-manage-session). Once the connection succeeds, [send your first message](/sdk/uniapp/getting-started/send-first-message) to a prepared user or group and verify the complete messaging flow.
diff --git a/content/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx b/content/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx
new file mode 100644
index 0000000000..453eee4f63
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx
@@ -0,0 +1,172 @@
+---
+title: 'Integrate by host and platform'
+description: 'Understand the runtime and build boundaries for uni-app, uni-app x, Android, iOS, and HarmonyOS.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/environment-specific-implementation'
+---
+
+`unix-openim-sdk` exposes the same business functions to uni-app and uni-app x. The differences are primarily language typing, page lifecycle, file paths, and native build packaging. Every supported host imports from the same plugin root and shares the one OpenIM Core in the host process.
+
+## Support matrix
+
+| Host | Android | iOS | HarmonyOS |
+| --- | --- | --- | --- |
+| uni-app Vue 2 / Vue 3 | API 21+ | iOS 14+ | Not currently declared supported |
+| uni-app x | API 21+ | iOS 14+ | Commercial edition, API 24 |
+| Web / H5 / Mini Program | Not supported | Not supported | Not supported |
+
+Use the HBuilderX/uni-app `5.23` series. Availability of public and commercial capabilities also depends on the plugin version, native artifacts, and OpenIMServer deployment; the host name alone does not determine capability support.
+
+## Use the shared plugin entry
+
+Both uni-app and uni-app x import from `@/uni_modules/unix-openim-sdk`. Do not use a bare package name or import platform implementation directories directly.
+
+```uts
+import {
+ getLoginStatus,
+ off,
+ onConnectSuccess,
+} from '@/uni_modules/unix-openim-sdk'
+```
+
+Promises resolve directly to business values instead of `{ data }`. Event registration returns an `OpenIMSDKEventSubscription`; release it with `off(subscription)`.
+
+## uni-app Vue 2 / Vue 3
+
+A traditional uni-app page can call the plugin from either Vue 2 or Vue 3 lifecycle code. JavaScript does not provide the full static checks available in UTS, but Promise results and subscription handles have the same runtime semantics. Keep SDK initialization, login, and global listeners in an App-level service so navigation does not repeatedly initialize Core.
+
+```javascript
+import {
+ getLoginStatus,
+ off,
+ onConnectSuccess,
+} from '@/uni_modules/unix-openim-sdk'
+
+const connectSubscription = onConnectSuccess(() => {
+ console.log('OpenIM connected')
+})
+
+const status = await getLoginStatus()
+
+// Run when the application service that owns the listener is destroyed.
+off(connectSubscription)
+```
+
+Destroying a Vue component releases only subscriptions owned by that component or service; it must not call `unInitSDK()`. If several pages need one event, subscribe once in a store or application service and distribute application state to the pages.
+
+## uni-app x
+
+uni-app x uses UTS types. Import initialization parameters, message objects, and event payload types from the public plugin contract instead of copying local interfaces that can drift from the SDK.
+
+```uts
+import {
+ getLoginStatus,
+ type OpenIMLoginStatus,
+} from '@/uni_modules/unix-openim-sdk'
+
+const status : OpenIMLoginStatus = await getLoginStatus()
+```
+
+Handle nullable UTS results explicitly. Do not bypass `null` in an exported result type with an unsafe cast. Commercial signaling events return raw JSON strings; validate the outer payload and known fields before converting a `UTSJSONObject` into an application domain object.
+
+## App lifecycle
+
+Initialize SDK Core once in the App scope. Page entry and exit manage only subscriptions owned by that page. To switch accounts, log out the old account and release its subscriptions and state before logging in the new account. Call `unInitSDK()` only when the App will no longer use OpenIM.
+
+Foreground/background, network, badge, and push state should be reported by one App-lifecycle owner instead of several pages. See [Handle App lifecycle and device state](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state).
+
+## Android
+
+Android requires API 21 or newer. The build output must contain the plugin's Maven/AAR dependencies and every target ABI. The standard base does not contain these native artifacts, so use a custom base containing the plugin or a local native Android project.
+
+Before release, verify at least the following:
+
+- Manifest permissions match the product's network, notification, and storage requirements.
+- Each target ABI contains exactly one OpenIM Core native library.
+- The release/R8 build has no duplicate classes, duplicate JNI libraries, or reflection stripping failures.
+- A physical device can reach `apiAddr` and `wsAddr`, and background recovery follows Android system constraints.
+
+The SDK does not request photo-library, camera, microphone, or notification permission for the application. Declare and explain permissions required by the IM features you actually use. AV Runtime media permissions belong to a separate plugin boundary.
+
+## iOS
+
+iOS requires version 14 or newer. Link, embed, and sign the plugin XCFrameworks with compatible CocoaPods and Xcode versions.
+
+Before release, validate framework slices, embedding, signing, privacy manifests, usage descriptions, and the App Store build on a physical device. A simulator build does not prove that device arm64 links correctly. If the host installs other native plugins, scan for duplicate frameworks and module names.
+
+SDK logs and the database live in the application sandbox. Do not persist simulator absolute paths in business configuration, and do not move or modify the Core database directly.
+
+## HarmonyOS
+
+HarmonyOS support is declared only for uni-app x with the Commercial edition, API 24 or newer, and the HAR matching the plugin contract.
+
+The following operations return `platform-unsupported`:
+
+- `updateFcmToken`
+- `updateToken`
+- `translateText`
+- `translateMessage`
+
+Ten unsupported events return unsupported subscriptions and never fabricate callbacks; see [Events overview](/sdk/uniapp/events/overview-events). Platform unsupported is distinct from commercial authentication failure. Application logic should distinguish capability absence, login state, network failure, and server rejection by their stable errors.
+
+## File paths
+
+Image, sound, video, and file-message operations using local files require a full path readable by native Core. Convert `unifile://`, picker temporary URLs, and virtual sandbox paths through uni APIs before passing them to the SDK.
+
+- Do not pass an HTTP URL to a by-file or full-path message-creation operation.
+- Keep a temporary file alive until message creation and upload have completed.
+- Android and iOS sandbox paths are different; do not persist an absolute path on one platform and reuse it on another.
+- The host application requests and explains file, photo-library, and media permissions.
+
+Each message-creation page distinguishes URL-based creation from creation using a native full path.
+
+## Local builds and custom bases
+
+A native UTS plugin must participate in native compilation. During development, either build a custom base containing the plugin with HBuilderX 5.23, or use a project-maintained Android/iOS native project for compilation, installation, and automated tests.
+
+The local workflow should lock HBuilderX, the DCloud native SDK, JDK/Android SDK, Xcode/CocoaPods, and plugin versions. This prevents a locally working build from later being packaged with a different dependency set. The standard base can run pages without this native plugin, but it cannot be used to judge the plugin's capabilities.
+
+### Shared SDK service
+
+Use one App-level SDK service to own initialization status, the current logged-in user, global subscription handles, and teardown order. Pages call its business methods and observe application state instead of deciding whether Core should be initialized again.
+
+The service must preserve the plugin's actual Promise and error semantics. Do not wrap results into the Wasm `{ data }` shape, swallow `platform-unsupported`, or use `offAll()` to remove listeners owned elsewhere. To switch accounts, stop writes for the old account, await `logout()`, release its handles, clear account state, and then login the new account.
+
+## Unsupported targets
+
+The plugin does not support Web, H5, or Mini Programs. It depends on native Android, iOS, or HarmonyOS Core, a local database, and native network lifecycle; conditional compilation cannot make the same import run in a browser.
+
+If the product also has H5 or Mini Program targets, select the corresponding Web/Wasm or Mini Program SDK in an application adapter and manage initialization, login, events, and storage separately. Do not allow two SDKs to compete for the same App-side login state.
+
+## Verification and troubleshooting
+
+- Confirm on the target platform that `initSDK()` succeeds and `onConnectSuccess` arrives after `login()`.
+- Verify that query APIs return business values directly and subscription handles remain valid for asynchronous cleanup through `off()`.
+- Test network recovery, foreground/background transitions, forced logout, token invalidation, and reauthentication on a physical device.
+- Test file messages with real picker or photo-library paths in a release build, not only with a fixed sandbox fixture.
+- Connect commercial APIs to commercial services; verify that HarmonyOS reports unsupported capabilities explicitly.
+- Scan final Android/iOS packages for duplicate native dependencies, signing issues, and ABI/framework slice problems.
+
+## Common problems
+
+| Symptom | Likely cause | Resolution |
+| --- | --- | --- |
+| The standard base reports that the native plugin is unavailable | The base does not contain the plugin's native dependencies | Build a custom base or use the local native project. |
+| A simulator connects but a physical device cannot | The service URL uses `localhost`, or TLS/LAN routing is unavailable | Verify API/WSS addresses, certificates, and reverse proxy from the physical device. |
+| An event runs more than once | A page or `onShow` registered it again without releasing the old handle | Move registration to a stable service and call `off(subscription)` for every owned handle. |
+| File-message creation fails | The input is `unifile://`, a temporary URL, or a path Core cannot read | Convert it to a native-readable full path and preserve the file lifetime. |
+| A HarmonyOS API always fails | The locked HAR does not expose that capability | Handle `platform-unsupported` and disable the feature or use an alternative flow. |
+| iOS works in the simulator but device linking fails | Device slice, embedding, signing, or deployment target is wrong | Build for an iPhone and inspect the XCFramework slices and signing. |
+
+## Next steps
+
+- [Before you start](/sdk/uniapp/getting-started/before-you-start)
+- [Install, initialize, and inspect the SDK](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)
+- [Authenticate and manage a session](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [Handle App lifecycle and device state](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state)
diff --git a/content/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx b/content/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx
new file mode 100644
index 0000000000..18b785d63d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx
@@ -0,0 +1,37 @@
+---
+title: 'Handle App lifecycle and device state'
+description: 'Report lifecycle and network changes, update badges, and register an FCM token.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state'
+---
+
+An application service should own lifecycle reporting. Use `setAppBackgroundStatus()` and `networkStatusChanged()` as described in the authentication guide; do not report the same transition from multiple pages.
+
+```uts
+import { setAppBadge } from '@/uni_modules/unix-openim-sdk'
+
+await setAppBadge(totalUnreadCount)
+```
+
+`setAppBadge()` synchronizes the current total unread count with the SDK/platform layer. Continue to maintain application UI from unread events. Resolving the Promise does not guarantee that every device configuration displays a launcher badge. Pass `0` to clear it.
+
+```uts
+import { updateFcmToken } from '@/uni_modules/unix-openim-sdk'
+
+await updateFcmToken({
+ fcmToken: deviceFcmToken,
+ expireTime: tokenExpireUnixSeconds,
+})
+```
+
+`fcmToken` is the token issued to this device; `expireTime` is the protocol-defined Unix expiry in seconds. Call this only after acquiring or refreshing a valid device token. Never log it or substitute an IM token.
+
+HarmonyOS currently returns `platform-unsupported` for `updateFcmToken`. This is a platform capability gap, not a commercial-authentication failure; integrate the Harmony push channel in the host application.
+
+A recommended sequence is: initialize; subscribe and log in; register the device token; apply unread events and `setAppBadge()`; report foreground/background and network transitions; then clear badge/push association and account subscriptions on logout. Push notifications do not replace SDK message events or history synchronization.
diff --git a/content/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx b/content/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx
new file mode 100644
index 0000000000..9678bae20a
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx
@@ -0,0 +1,69 @@
+---
+title: 'Install, initialize, and inspect the SDK'
+description: 'Install the UTS plugin, initialize the only OpenIM Core, and inspect version and data paths.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk'
+---
+
+After installing `uni_modules/unix-openim-sdk`, initialize it once from an application service. The plugin exports flat functions; do not construct a second SDK instance.
+
+```uts
+import {
+ OpenIMLogLevelInfo,
+ OpenIMPlatformAndroid,
+ initSDK,
+ type OpenIMInitConfig,
+} from '@/uni_modules/unix-openim-sdk'
+
+const config : OpenIMInitConfig = {
+ platformID: OpenIMPlatformAndroid,
+ apiAddr: 'https://im-api.example.com',
+ wsAddr: 'wss://im-ws.example.com',
+ logLevel: OpenIMLogLevelInfo,
+ isLogStandardOutput: true,
+ systemType: 'android',
+}
+
+const initialized = await initSDK(config)
+if (!initialized) throw new Error('OpenIM SDK initialization was not accepted')
+```
+
+Use `OpenIMPlatformIOS` with `systemType: 'ios'`, or `OpenIMPlatformHarmony` with `systemType: 'harmony'`. Reduce console logging in production and configure `logFilePath` according to your compliance policy.
+
+| `OpenIMInitConfig` field | Type | Description |
+| --- | --- | --- |
+| `platformID` | `OpenIMPlatform` | One of the exported platform constants. |
+| `apiAddr` | `string` | OpenIMServer HTTP API address. |
+| `wsAddr` | `string` | OpenIMServer WebSocket address. |
+| `dataDir` | `string` or `null` (optional) | Core data directory; normally use the platform default. |
+| `logFilePath` | `string` or `null` (optional) | Log path following the platform artifact contract. |
+| `logLevel` | `OpenIMLogLevel` | For example `OpenIMLogLevelError` or `OpenIMLogLevelInfo`. |
+| `isLogStandardOutput` | `boolean` | Whether SDK logs are emitted to the system console. |
+| `systemType` | `string` | Required system description; never omit it. |
+
+Do not initialize concurrent environments in one process. Sign out, clear application state, and uninitialize before changing service addresses.
+
+`getSdkVersion()` and `getOpenIMDataPath()` are synchronous local operations:
+
+```uts
+import { getOpenIMDataPath, getSdkVersion } from '@/uni_modules/unix-openim-sdk'
+
+const version = getSdkVersion()
+const dataPath = getOpenIMDataPath()
+```
+
+Use the data path only for diagnostics and storage policy. Never edit the SDK database or publish full sandbox paths in logs.
+
+```uts
+import { unInitSDK } from '@/uni_modules/unix-openim-sdk'
+
+unInitSDK()
+```
+
+`unInitSDK()` returns `void`. Stop new requests, sign out, and release subscriptions first. Page unload, App backgrounding, and AV Runtime disposal must not uninitialize the IM SDK.
diff --git a/content/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx b/content/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx
new file mode 100644
index 0000000000..d0741e9b72
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx
@@ -0,0 +1,160 @@
+---
+title: 'Send your first message'
+description: 'Create and send a text message in a uni-app or uni-app x App.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/send-first-message'
+---
+
+This page shows how to install and initialize `unix-openim-sdk` in a uni-app / uni-app x App, sign in, and send the first text message. Before you begin, complete the server, user, token, plugin, and native build preparation in [Before you start](/sdk/uniapp/getting-started/before-you-start).
+
+An OpenIMSDK message can target a user or a group. A one-to-one message uses the recipient's `recvID`; a group message uses the destination `groupID`.
+
+## Prepare a message target
+
+For a one-to-one test, prepare an existing recipient user. For a group test, prepare an existing `groupID` in which the current user is allowed to speak. A group message does not include a recipient user ID and does not target one individual member.
+
+| Scenario | Required target identifier |
+| --- | --- |
+| One-to-one conversation | An existing recipient user ID passed as `recvID`, while `groupID` is an empty string. |
+| Group conversation | An existing group ID passed as `groupID`, while `recvID` is an empty string. |
+
+### Verify the target
+
+The first message normally verifies the complete path between the client, OpenIMServer, and another client. Before sending it, confirm that:
+
+- The one-to-one recipient exists and server policy permits the current user to send to that recipient.
+- The destination `groupID` exists, the current user has joined it, and group state or mute policy does not prohibit sending.
+- Two independent test clients use different users; do not use same-account UI behavior as proof that another user received the message.
+
+## Get started
+
+Follow these steps to send the first text message.
+
+### Step 1: Install the UTS plugin
+
+Install `unix-openim-sdk` at `uni_modules/unix-openim-sdk`. Because the plugin has native dependencies, the standard base cannot load it. Build a custom base containing the plugin or use the project's local Android/iOS native build workflow.
+
+Business pages import functions and types from the flat plugin root:
+
+```uts
+import {
+ createTextMessage,
+ sendMessage,
+} from '@/uni_modules/unix-openim-sdk'
+```
+
+Do not create an SDK instance or import an Android, iOS, or HarmonyOS implementation directory directly.
+
+### Step 2: Initialize OpenIM SDK
+
+Call `initSDK()` once in the App scope. This example uses Android; iOS and HarmonyOS use their own platform constant and `systemType`.
+
+```uts
+import {
+ OpenIMLogLevelInfo,
+ OpenIMPlatformAndroid,
+ initSDK,
+ type OpenIMInitConfig,
+} from '@/uni_modules/unix-openim-sdk'
+
+const config : OpenIMInitConfig = {
+ platformID: OpenIMPlatformAndroid,
+ apiAddr: 'https://im-api.example.com',
+ wsAddr: 'wss://im-ws.example.com',
+ logLevel: OpenIMLogLevelInfo,
+ isLogStandardOutput: true,
+ systemType: 'android',
+}
+
+const initialized = await initSDK(config)
+if (!initialized) {
+ throw new Error('OpenIM SDK initialization was not accepted')
+}
+```
+
+`apiAddr` and `wsAddr` must be reachable from the actual device, and `systemType` is required. See [Install, initialize, and inspect the SDK](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk) for all fields, iOS/HarmonyOS constants, version queries, and uninitialization.
+
+### Step 3: Connect to OpenIMServer
+
+Use the application endpoint prepared in [Before you start](/sdk/uniapp/getting-started/before-you-start) to load the current user's `userID` and token. Register connection and token events before login as described in [Authenticate and manage a session](/sdk/uniapp/getting-started/authenticate-and-manage-session). This page keeps only the main first-message flow and does not redefine those complete listeners.
+
+```uts
+import { login } from '@/uni_modules/unix-openim-sdk'
+
+const session = await loadOpenIMSDKSession()
+await login(session.userID, session.token)
+```
+
+The `login()` Promise succeeding means that the sign-in request completed. Wait for `onConnectSuccess`, owned by the authentication page, before calling message APIs that depend on the connection. uni-app / uni-app x uses two positional arguments; it does not accept the Wasm object-style login parameters.
+
+### Step 4: Select the message target
+
+A one-to-one conversation needs only the recipient user ID. Put an existing, verified user ID in `recvID`:
+
+```uts
+const recvID = 'user_b'
+const groupID = ''
+```
+
+A group conversation uses only the OpenIMSDK group ID. Reuse a `groupID` already known to the application, or create a test group through an admin console, the application backend, or group APIs and keep the returned ID:
+
+```uts
+const recvID = ''
+const groupID = 'group_123'
+```
+
+A group can have initial members, but sending the group message does not include an individual recipient user ID.
+
+### Step 5: Create and send the message
+
+Sending an OpenIMSDK text message has two steps: create a local `OpenIMMessageItem`, then send it to the user or group with `sendMessage()`.
+
+```uts
+import {
+ createTextMessage,
+ sendMessage,
+ type OpenIMMessageItem,
+} from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextMessage('Hello, OpenIMSDK')
+if (message == null) {
+ throw new Error('Failed to create text message')
+}
+
+const sentMessage : OpenIMMessageItem = await sendMessage({
+ recvID,
+ groupID,
+ message,
+})
+
+appendOutgoingMessage(sentMessage)
+```
+
+`createTextMessage()` returns an unsent message object. It does not send a message or trigger a new-message event. `sendMessage()` returns the sent `OpenIMMessageItem` directly; there is no Wasm `{ data }` wrapper.
+
+The sender should replace its pending item with `sentMessage` by `clientMsgID`. Another logged-in client receives the message through a new-message event. See [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages) for complete listeners, batch and single callbacks, cleanup, and conversation routing; this page does not register those events again.
+
+## Verify the result
+
+Use two users on two independent clients and verify each stage:
+
+1. Client A's `sendMessage()` succeeds and returns a non-empty `clientMsgID`.
+2. Client A merges the returned item by `clientMsgID` rather than appending a duplicate.
+3. Client B receives the new-message event and can read the same business content.
+4. Both clients can later query the message from history.
+
+Promise success and remote event delivery are separate stages and must be verified independently. When troubleshooting, record redacted error codes, the current user ID, target user or group ID, and `clientMsgID` so they can be correlated with OpenIMServer logs. Do not record tokens or full private-message content.
+
+## Next steps
+
+- [Before you start](/sdk/uniapp/getting-started/before-you-start)
+- [Authenticate and manage a session](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [Integrate by host and platform](/sdk/uniapp/getting-started/environment-specific-implementation)
+- [Send messages](/sdk/uniapp/message/sending-messages/send-message)
+- [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx b/content/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx
new file mode 100644
index 0000000000..484cb82269
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx
@@ -0,0 +1,52 @@
+---
+title: 'Update tokens and observe SDK sessions'
+description: 'Commercially update a login token and use synthetic session snapshots to prevent cross-account work.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/getting-started/update-token-and-observe-sdk-session'
+---
+
+This is a Commercial capability for hosts that share one OpenIM Core with dependent plugins such as AV Runtime. `onSDKSessionChanged` is synthesized by `unix-openim-sdk`; it is not a native OpenIM Core listener.
+
+```uts
+import { getSDKSessionSnapshot, type OpenIMSDKSessionSnapshot } from '@/uni_modules/unix-openim-sdk'
+
+const snapshot : OpenIMSDKSessionSnapshot = await getSDKSessionSnapshot()
+```
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `loginStatus` | `OpenIMLoginStatus` | Current login state. |
+| `userID` | `string` or `null` | Current SDK user, or `null` when logged out. |
+| `sdkSessionEpoch` | `number` | Session generation, incremented after successful lifecycle or account changes. |
+| `sdkVersion` | `string` | Version of the connected Core. |
+
+The snapshot never contains an IM token, API address, or WebSocket address. Pin `userID` and `sdkSessionEpoch` before asynchronous work and compare another snapshot before committing the result.
+
+```uts
+import { off, onSDKSessionChanged } from '@/uni_modules/unix-openim-sdk'
+
+const sessionSubscription = onSDKSessionChanged((next) => {
+ cancelRequestsFromOlderEpoch(next.sdkSessionEpoch)
+ replaceActiveSdkUser(next.userID)
+})
+
+off(sessionSubscription)
+```
+
+Initialization, login, logout, uninitialization, forced logout, token invalidation/expiry, and user changes can advance the epoch. Handlers must be idempotent and must not log tokens or trigger competing logins.
+
+```uts
+import { updateToken } from '@/uni_modules/unix-openim-sdk'
+
+await updateToken({ token: freshToken })
+```
+
+Obtain the token from a trusted backend. `updateToken()` is available on Android and iOS; HarmonyOS returns `platform-unsupported`. Continue to use session and connection events after the Promise resolves.
+
+Dependent plugins should compare snapshots before and after initialization, cancel only their own work during disposal, and never call IM `logout()` or `unInitSDK()`. Dispose dependent plugins before switching users.
diff --git a/content/docs/chat/sdk/uniapp/group/change-group-mute.mdx b/content/docs/chat/sdk/uniapp/group/change-group-mute.mdx
new file mode 100644
index 0000000000..03062b275f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/change-group-mute.mdx
@@ -0,0 +1,35 @@
+---
+title: 'Change group mute status'
+description: 'OpenIM uni-app / uni-app x SDK guide for Change group mute status.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/change-group-mute'
+---
+
+`changeGroupMute()` turns group-wide mute on or off.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Group to update. |
+| `isMute` | `boolean` | Yes | `true` enables group-wide mute; `false` disables it. |
+
+```uts
+import { changeGroupMute } from '@/uni_modules/unix-openim-sdk'
+
+await changeGroupMute({ groupID, isMute: true })
+```
+
+Only the owner or an administrator with server permission can perform this operation. The server still validates group state, role changes, and concurrent updates. Owners and administrators can normally keep sending, so group-wide mute does not necessarily silence every account.
+
+Wasm's commercial `muteBypassUserIDs` extension is not present in the current uni-app / uni-app x contract. Do not pass that field. Even if a commercial server supports exceptions, rely on the exported plugin type and subsequent group snapshot.
+
+## Return result
+
+The Promise resolves directly to a string result, meaning the server completed this mute request. It does not mean that every member UI updated. Merge `onGroupInfoChanged` by `groupID` or query the group again. Group-wide mute and an individual member's mute interval are separate capabilities.
diff --git a/content/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx b/content/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx
new file mode 100644
index 0000000000..d1310a3269
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx
@@ -0,0 +1,23 @@
+---
+title: 'Check group full-sync state'
+description: 'OpenIM uni-app / uni-app x SDK guide for Check group full-sync state.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/check-full-sync-state'
+---
+
+The following Commercial diagnostics compare local group data with synchronized state:
+
+```uts
+import { checkGroupMemberFullSync, checkLocalGroupFullSync } from '@/uni_modules/unix-openim-sdk'
+
+const groupsReady = await checkLocalGroupFullSync()
+const membersReady = await checkGroupMemberFullSync(groupID)
+```
+
+Use them for recovery diagnostics and gate refreshes, not as a replacement for normal group/member queries. Retry with bounded backoff after synchronization events.
diff --git a/content/docs/chat/sdk/uniapp/group/create-group.mdx b/content/docs/chat/sdk/uniapp/group/create-group.mdx
new file mode 100644
index 0000000000..4ef747c9ff
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/create-group.mdx
@@ -0,0 +1,45 @@
+---
+title: 'Create a group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/create-group'
+---
+
+`createGroup()` creates a group with initial profile data and member lists.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupInfo.groupName` | `string` | Yes | Group name. |
+| `groupInfo.groupType` | `2` | Yes | Group type supported by the current contract. |
+| `groupInfo.notification` | `string` or `null` | No | Initial announcement. |
+| `groupInfo.introduction` | `string` or `null` | No | Initial introduction. |
+| `groupInfo.faceURL` | `string` or `null` | No | Avatar URL. |
+| `groupInfo.ex` | `string` or `null` | No | Complete extension string. |
+| `memberUserIDs` | `string[]` | Yes | Initial regular members. |
+| `adminUserIDs` | `string[]` or `null` | No | Initial administrators. |
+
+```uts
+import { createGroup } from '@/uni_modules/unix-openim-sdk'
+
+const group = await createGroup({
+ groupInfo: { groupName: 'Project group', groupType: 2 },
+ memberUserIDs: ['user_b', 'user_c'],
+ adminUserIDs: ['user_b'],
+})
+```
+
+Remove blank and duplicate member IDs first. Administrators must also satisfy the server's membership and role rules; do not put the same user into conflicting role lists. `ex` is not merged as JSON by the SDK.
+
+## Return result
+
+The Promise resolves directly to `OpenIMGroupItem` or `null`. Merge a non-null result into the group store by `groupID`; do not create a local-only group for `null`.
+
+Promise success means that the creation request completed, not that every optional membership change has been observed. Reconcile the group list through `onJoinedGroupAdded` or a group query, and verify initial members and administrators through the member list.
diff --git a/content/docs/chat/sdk/uniapp/group/dismiss-group.mdx b/content/docs/chat/sdk/uniapp/group/dismiss-group.mdx
new file mode 100644
index 0000000000..ec596a2af2
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/dismiss-group.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Dismiss a group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Dismiss a group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/dismiss-group'
+---
+
+`dismissGroup()` permanently dismisses one group. Only an authorized owner can perform this high-risk operation.
+
+```uts
+import { dismissGroup } from '@/uni_modules/unix-openim-sdk'
+
+await dismissGroup(groupID)
+```
+
+Ask for explicit confirmation and show the group name and member impact. Prevent duplicate taps. The server validates ownership and current group state; local `ownerUserID` is not sufficient authorization.
+
+Promise success means that the dismiss request completed, not that every client processed the event. Wait for `onGroupDismissed` / `onJoinedGroupDeleted` or requery, then remove group, member, and chat-entry state by `groupID`. Close the chat and management UI and stop sending group messages. Preserve current state when the Promise fails.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx
new file mode 100644
index 0000000000..ae18c61936
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Accept a group application'
+description: 'OpenIM uni-app / uni-app x SDK guide for Accept a group application.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/accept-group-application'
+---
+
+`acceptGroupApplication()` lets an authorized group member accept one join application.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `fromUserID` | `string` | Yes | Applicant user ID. |
+| `handleMsg` | `string` | Yes | Processing comment. It can be shown to the applicant, so do not include internal risk information. |
+
+```uts
+import { acceptGroupApplication } from '@/uni_modules/unix-openim-sdk'
+
+await acceptGroupApplication({ groupID, fromUserID: 'user_b', handleMsg: 'Approved' })
+```
+
+Promise success means that the accept request completed, not that both the application and member events arrived. Refresh the application and member lists separately, or merge `onGroupApplicationAccepted` and `onGroupMemberAdded` by their respective keys.
+
+Lock this application while the request is in flight so accept and reject cannot race. The server validates permission, current application state, member limits, and duplicate membership. On failure, preserve the application and requery instead of changing local `handleResult`.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx
new file mode 100644
index 0000000000..a228b73786
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx
@@ -0,0 +1,33 @@
+---
+title: 'Delete group applications'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete group applications.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/delete-group-requests'
+---
+
+`deleteGroupRequests()` Commercial deletes explicitly selected application records.
+
+## Parameters
+
+`groupRequests` is a non-empty array of `OpenIMSimpleGroupRequest` items:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `fromUserID` | `string` | Yes | Applicant user ID. |
+
+```uts
+import { deleteGroupRequests } from '@/uni_modules/unix-openim-sdk'
+
+await deleteGroupRequests({ groupRequests: [{ groupID, fromUserID }] })
+```
+
+Use `groupID:fromUserID` to identify and deduplicate records. Deleting history is not the same as rejecting a pending application and does not remove an existing member.
+
+Promise success means that the delete request completed; a deletion event can arrive afterward. See [Get received group applications](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient) for the complete listener. After batch failure, do not assume which records were deleted; requery the application list and count.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx
new file mode 100644
index 0000000000..d7d972b59a
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx
@@ -0,0 +1,35 @@
+---
+title: 'Get sent group applications'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get sent group applications.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant'
+---
+
+`getGroupApplicationListAsApplicant()` queries applications sent by the current account and returns `OpenIMGroupApplicationListResult` or `null`.
+
+## Parameters
+
+The parameter object can be omitted. For explicit pagination:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `offset` | `number` or `null` | No | Offset; use `0` for the first page. |
+| `count` | `number` or `null` | No | Number of applications to read. |
+
+```uts
+import { getGroupApplicationListAsApplicant } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getGroupApplicationListAsApplicant({ offset: 0, count: 50 })
+```
+
+## Return result
+
+After Promise success, `applications` contains the current account's sent `OpenIMGroupApplicationItem[]`. See [Get received group applications](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient) for all fields. The query itself creates no application event.
+
+Use `groupID:userID` as the stable key and route events according to the current account's role. Reset pagination when state changes while a page is loading. Requery after reconnect, re-login, or any interval in which events may have been missed.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx
new file mode 100644
index 0000000000..c2c118c89c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx
@@ -0,0 +1,76 @@
+---
+title: 'Get received group applications'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get received group applications.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient'
+---
+
+`getGroupApplicationListAsRecipient()` queries applications that the current account can manage. This page owns the added, accepted, rejected, and deleted application events.
+
+## Parameters
+
+The parameter object can be omitted. For explicit pagination, `offset` and `count` are optional; use `0` for the first offset. Unlike the Wasm page, the Unix `OpenIMApplicationListParams` has no `handleResults` filter, so filter by `handleResult` after the query.
+
+Register events before loading the received snapshot.
+
+```uts
+import {
+ getGroupApplicationListAsRecipient,
+ off,
+ onGroupApplicationAccepted,
+ onGroupApplicationAdded,
+ onGroupApplicationDeleted,
+ onGroupApplicationRejected,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const addedSubscription = onGroupApplicationAdded((item) => upsertGroupApplication(item))
+const subscriptions : Array = [
+ addedSubscription,
+ onGroupApplicationAccepted((item) => upsertGroupApplication(item)),
+ onGroupApplicationRejected((item) => upsertGroupApplication(item)),
+ onGroupApplicationDeleted((item) => removeGroupApplication(item)),
+]
+const result = await getGroupApplicationListAsRecipient({ offset: 0, count: 50 })
+replaceReceivedGroupApplications(result?.applications ?? [])
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+## Return result
+
+The Promise resolves directly to `OpenIMGroupApplicationListResult` or `null`; `applications` contains the current page. Do not convert `null` into an empty state. Empty `applications` means that the page has no records; `null` requires login/error handling. Reset offset after processing an application to avoid duplicates across changed pages.
+
+### Group application fields
+
+`OpenIMGroupApplicationItem` combines a group snapshot and applicant information:
+
+| Fields | Description |
+| --- | --- |
+| `groupID`, `groupName`, `groupFaceURL` | Target group ID, name, and avatar snapshot. |
+| `notification`, `introduction` | Announcement and introduction snapshot. |
+| `ownerUserID`, `creatorUserID` | Owner and creator user IDs. |
+| `groupType`, `status`, `memberCount` | Group type, state, and member-count snapshot. |
+| `userID`, `nickname`, `userFaceURL` | Applicant ID, nickname, and avatar snapshot. |
+| `handleResult` | Pending, accepted, or rejected processing state. |
+| `reqMsg`, `reqTime` | Application comment and time. |
+| `joinSource`, `inviterUserID` | Join source and inviter. |
+| `handleUserID`, `handledMsg`, `handledTime` | Processing user, comment, and time. |
+| `ex`, `attachedInfo` | Extension and attachment data; parse only a confirmed contract. |
+
+Use `groupID:userID` as the application key. Names and avatars are snapshots; query current group or user data when freshness matters.
+
+`handleResult`, `handledMsg`, and `handledTime` describe the server's current processing snapshot. Do not derive permission only from these fields: the owner or administrator role can change after the record was created. `reqMsg`, `ex`, and `attachedInfo` are application-controlled or service attachment data and must be rendered and logged under the product's privacy policy.
+
+## Listen for application changes
+
+Merge all four events idempotently by `groupID:userID`; a deletion event removes that key. Route received and sent application state according to the current account's role. Reset pagination after changes, and requery when owner/admin permission changes.
+
+Use the explicit accept or reject API instead of changing `handleResult` locally. Promise success, the application event, and later group/member updates are separate stages. Release every subscription on logout, account switch, or application-store destruction.
+
+When an application is accepted, update the joined-group list and member list through their own events or queries rather than inferring membership solely from this application record. Group-profile changes and applicant nickname changes also require their domain snapshots; an old application item is not a live profile cache.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx
new file mode 100644
index 0000000000..30cda966df
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx
@@ -0,0 +1,21 @@
+---
+title: 'Get the pending group application count'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get the pending group application count.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/get-group-application-unhandled-count'
+---
+
+```uts
+import { getGroupApplicationUnhandledCount } from '@/uni_modules/unix-openim-sdk'
+
+const count = await getGroupApplicationUnhandledCount({ offset: 0, count: 100 })
+renderGroupRequestBadge(count ?? 0)
+```
+
+Requery after add/accept/reject/delete changes instead of maintaining only local counters across devices.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx
new file mode 100644
index 0000000000..490444fae4
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx
@@ -0,0 +1,23 @@
+---
+title: 'Get the group application badge count'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get the group application badge count.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/observe-group-application-badge-count'
+---
+
+`onGroupApplicationBadgeCountChanged` is Commercial.
+
+```uts
+import { off, onGroupApplicationBadgeCountChanged } from '@/uni_modules/unix-openim-sdk'
+
+const badgeSubscription = onGroupApplicationBadgeCountChanged((count) => renderGroupRequestBadge(count))
+off(badgeSubscription)
+```
+
+Treat it as an incremental UI signal and reload the request/count snapshot after login or missed events. This platform event replaces the unavailable clear-badge operation.
diff --git a/content/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx b/content/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx
new file mode 100644
index 0000000000..836a42ba90
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Reject a group application'
+description: 'OpenIM uni-app / uni-app x SDK guide for Reject a group application.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/group-applications/refuse-group-application'
+---
+
+`refuseGroupApplication()` uses the same application identity fields as acceptance.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `fromUserID` | `string` | Yes | Applicant user ID. |
+| `handleMsg` | `string` | Yes | Rejection comment, which can be visible to the applicant. |
+
+```uts
+import { refuseGroupApplication } from '@/uni_modules/unix-openim-sdk'
+
+await refuseGroupApplication({ groupID, fromUserID, handleMsg: 'Not accepted' })
+```
+
+Do not place internal risk information, internal account names, or sensitive review evidence in `handleMsg`. Lock the application while the request is in flight so accept and reject cannot race.
+
+Promise success means that the reject request completed, not that `onGroupApplicationRejected` arrived. Use the event or a new query as final state. Preserve the application on failure instead of hiding it locally.
diff --git a/content/docs/chat/sdk/uniapp/group/join-group.mdx b/content/docs/chat/sdk/uniapp/group/join-group.mdx
new file mode 100644
index 0000000000..9536ff5b5c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/join-group.mdx
@@ -0,0 +1,33 @@
+---
+title: 'Apply to join a group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Apply to join a group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/join-group'
+---
+
+`joinGroup()` submits the current user's request to join a group.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Group to join. |
+| `reqMsg` | `string` | Yes | Application comment, which can be shown to owners or administrators. |
+| `joinSource` | `number` | Yes | Join-source value agreed by the product and server. |
+| `ex` | `string` or `null` | No | Application extension; use only a confirmed format. |
+
+```uts
+import { joinGroup } from '@/uni_modules/unix-openim-sdk'
+
+await joinGroup({ groupID, reqMsg: 'Please add me', joinSource: 2, ex: '' })
+```
+
+The application comment and `ex` can be stored with the application. Do not include tokens, internal risk information, or unnecessary personal data. Verify that the group exists and the current user is not already a member.
+
+Promise success does not always mean membership. A no-verification group can join directly, while another policy creates a pending application. Determine final state from application events, `onJoinedGroupAdded`, or a new joined-group query. Never create local member state before the server confirms it.
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx
new file mode 100644
index 0000000000..4775fe74e6
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx
@@ -0,0 +1,30 @@
+---
+title: 'Mute or unmute a group member'
+description: 'OpenIM uni-app / uni-app x SDK guide for Mute or unmute a group member.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/change-group-member-mute'
+---
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `userID` | `string` | Yes | Member to mute. |
+| `mutedSeconds` | `number` | Yes | Duration in seconds; pass `0` to unmute. |
+
+```uts
+import { changeGroupMemberMute } from '@/uni_modules/unix-openim-sdk'
+
+await changeGroupMemberMute({ groupID, userID: 'user_b', mutedSeconds: 600 })
+```
+
+The group owner can mute administrators and regular members; an administrator can mute only regular members. OpenIMServer performs the final permission check and enforces duration limits.
+
+Promise success means that the server completed the setting. Use the member's returned `muteEndTime` as final state rather than deriving it only from submitted seconds. Merge `onGroupMemberInfoChanged` by `groupID:userID` as documented on [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list).
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx
new file mode 100644
index 0000000000..dd809235e2
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Invite users to a group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Invite users to a group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/invite-user-to-group'
+---
+
+Owners and administrators can manage members within the permissions granted by OpenIMServer. The client can use `roleLevel` to display controls, but the server remains authoritative.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `reason` | `string` | Yes | Invitation comment; pass an empty string if unused. |
+| `userIDList` | `string[]` | Yes | Users to invite. |
+
+```uts
+import { inviteUserToGroup } from '@/uni_modules/unix-openim-sdk'
+
+await inviteUserToGroup({ groupID, userIDList: ['user_b'], reason: 'Project collaboration' })
+```
+
+Deduplicate `userIDList`. The reason can be visible to invitees, so do not include tokens or other sensitive information.
+
+Promise success means that the server accepted the invitation request, not that every target joined. A policy requiring review can first produce an application event. Merge actual members through `onGroupMemberAdded` or query the member list again.
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx
new file mode 100644
index 0000000000..33f7870ad4
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Remove group members'
+description: 'OpenIM uni-app / uni-app x SDK guide for Remove group members.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/kick-group-member'
+---
+
+An authorized owner or administrator can call `kickGroupMember()`.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Group from which to remove members. |
+| `reason` | `string` | Yes | Removal comment; use an empty string when no public explanation is needed. |
+| `userIDList` | `string[]` | Yes | Members to remove. |
+
+```uts
+import { kickGroupMember } from '@/uni_modules/unix-openim-sdk'
+
+await kickGroupMember({ groupID, userIDList: ['user_b'], reason: 'Removed by moderator' })
+```
+
+This operation cannot remove the owner; transfer ownership first. The server checks whether an administrator may act on each target. Confirm this high-impact moderation action and keep private evidence out of a potentially visible reason.
+
+Promise success means that the removal request completed. Merge later `onGroupMemberDeleted` events by `groupID:userID` or reload membership. Do not remove a target locally before a failed request.
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx
new file mode 100644
index 0000000000..e9e0d9c86f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Update a group member’s avatar'
+description: 'OpenIM uni-app / uni-app x SDK guide for Update a group member’s avatar.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-avatar'
+---
+
+`faceURL` changes the member avatar only within the specified group.
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupMemberInfo({ groupID, userID: 'user_b', faceURL: avatarURL })
+```
+
+An in-group avatar is different from the user's account avatar. Use [Update your profile](/sdk/uniapp/user/profile/set-self-info) for the latter. Upload local media first and pass a remotely reachable HTTPS URL; never store `unifile://` or a sandbox path as a remote avatar.
+
+After Promise success, merge `onGroupMemberInfoChanged` by `groupID:userID`. The complete listener is on [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list).
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx
new file mode 100644
index 0000000000..d3fa6dc004
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx
@@ -0,0 +1,30 @@
+---
+title: 'Set a group member extension'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set a group member extension.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-extension'
+---
+
+`ex` is one complete string; the SDK does not merge JSON. Preserve other application modules' namespaces before writing.
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+const previous = JSON.parse(member.ex || '{}')
+
+await setGroupMemberInfo({
+ groupID,
+ userID: 'user_b',
+ ex: JSON.stringify({ ...previous, title: 'maintainer' }),
+})
+```
+
+Preserve unknown fields in a versioned schema and keep the original value when parsing fails. Users allowed to view member profiles can see the extension; store no tokens or secrets.
+
+After Promise success, merge `onGroupMemberInfoChanged` by `groupID:userID`.
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx
new file mode 100644
index 0000000000..8a32c48094
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Update a member’s group nickname'
+description: 'OpenIM uni-app / uni-app x SDK guide for Update a member’s group nickname.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-nickname'
+---
+
+An in-group nickname changes only the member profile in the specified group and does not update the account nickname.
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupMemberInfo({ groupID, userID: 'user_b', nickname: 'Alice (Design)' })
+```
+
+`groupID` and `userID` together identify the member. The server applies group-role and policy checks to determine whether the current user can edit this member.
+
+Promise success means that the server completed the request. Merge a later `onGroupMemberInfoChanged` item by `groupID:userID`; do not update only the current page.
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx
new file mode 100644
index 0000000000..bb98285dcd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Manage group administrators'
+description: 'OpenIM uni-app / uni-app x SDK guide for Manage group administrators.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-role-level'
+---
+
+Use `roleLevel` to promote a regular member to administrator or remove administrator status.
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupMemberInfo({ groupID, userID: 'user_b', roleLevel: 60 })
+```
+
+The role values are:
+
+| `roleLevel` | Meaning |
+| --- | --- |
+| `20` | Regular member. |
+| `60` | Group administrator. |
+| `100` | Group owner; use for identification only. |
+
+Pass `60` to create an administrator and `20` to remove administrator status. Although `OpenIMGroupMemberRoleLevel` permits `100`, writing it is not the ownership-transfer operation; use [Transfer group ownership](/sdk/uniapp/group/managing-group-members/transfer-group-owner).
+
+Require confirmation for this high-risk moderation action and let the server enforce authority. After Promise success, merge `onGroupMemberInfoChanged` by `groupID:userID`.
diff --git a/content/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx b/content/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx
new file mode 100644
index 0000000000..4d64a24abf
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx
@@ -0,0 +1,30 @@
+---
+title: 'Transfer group ownership'
+description: 'OpenIM uni-app / uni-app x SDK guide for Transfer group ownership.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/managing-group-members/transfer-group-owner'
+---
+
+Only the current owner can call `transferGroupOwner()`. `newOwnerUserID` must identify an existing member of the group.
+
+The operation receives `groupID` and `newOwnerUserID`. Validate both against the latest group/member snapshot and prevent a duplicate submission while transfer is in flight. Local role visibility is only a UI hint; OpenIMServer verifies ownership and target membership.
+
+```uts
+import { transferGroupOwner } from '@/uni_modules/unix-openim-sdk'
+
+await transferGroupOwner({ groupID, newOwnerUserID: 'user_b' })
+```
+
+## State after the call
+
+Promise success means that OpenIMServer completed the transfer: the previous owner becomes a regular member and the target obtains the owner role. `onGroupMemberInfoChanged` carries individual member records, so one transfer can produce changes for both users. Merge each by `groupID:userID`.
+
+Do not infer success from the number of events. Query the affected members again when the UI must confirm roles. If the old owner intends to leave, complete and verify the transfer first, then call `quitGroup()`. Dismissing the group affects every member and is not a substitute for ordinary transfer. Require explicit confirmation and explain the permission change.
+
+After transfer, recalculate every management action in the UI from the new member roles. Stop any old-owner-only mutation that was queued before the transfer, and revalidate the account and group before writing a late asynchronous result.
diff --git a/content/docs/chat/sdk/uniapp/group/overview-group.mdx b/content/docs/chat/sdk/uniapp/group/overview-group.mdx
new file mode 100644
index 0000000000..2acd1f6859
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/overview-group.mdx
@@ -0,0 +1,68 @@
+---
+title: 'Group overview'
+description: 'OpenIM uni-app / uni-app x SDK guide for Group overview.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/overview-group'
+---
+
+The group domain uses `groupID` as its stable primary key and includes group profiles, members, applications, and permissions. Group name, avatar, announcement, owner, and member count are mutable snapshots.
+
+## Core data types
+
+| Type | Use case |
+| --- | --- |
+| `OpenIMGroupItem` | Joined-group lists, group profile pages, and group state. |
+| `OpenIMCreateGroupInfo` | Name, type, announcement, introduction, avatar, and extension submitted when creating a group. |
+| `OpenIMGroupMemberItem` | Member profile, role, join source, and mute-end time. |
+| `OpenIMGroupApplicationItem` | Join application, applicant, and processing state. |
+
+Common `OpenIMGroupItem` fields include `groupID`, `groupName`, `notification`, `introduction`, `faceURL`, `ownerUserID`, `memberCount`, `status`, `groupType`, `needVerification`, `lookMemberInfo`, `applyMemberFriend`, and `ex`. `attachedInfo` is an Enterprise field; parse it only according to a confirmed contract.
+
+Use `groupID:userID` as the stable merge key for a member. A member's in-group `nickname` and `faceURL` are member snapshots and must not overwrite account-level profile data.
+
+## Find a task
+
+| Task | Page |
+| --- | --- |
+| Create, update, dismiss, or leave a group | [Create a group](/sdk/uniapp/group/create-group), [Update a group](/sdk/uniapp/group/update-group-profile), [Dismiss a group](/sdk/uniapp/group/dismiss-group), [Leave a group](/sdk/uniapp/group/quit-group) |
+| Page through joined groups or query selected profiles | [List joined groups by page](/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page), [Get specified groups](/sdk/uniapp/group/retrieving-groups/get-specified-groups-info) |
+| Query, search, and manage members | [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list), [Search group members](/sdk/uniapp/group/retrieving-group-members/search-group-members) |
+| Invite or remove members and transfer ownership | [Invite users](/sdk/uniapp/group/managing-group-members/invite-user-to-group), [Remove members](/sdk/uniapp/group/managing-group-members/kick-group-member), [Transfer ownership](/sdk/uniapp/group/managing-group-members/transfer-group-owner) |
+| Send, query, and process join applications | [Join a group](/sdk/uniapp/group/join-group), [Get received group applications](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient) |
+| Configure mute, verification, and member permissions | Use the corresponding group-settings and member-management pages. |
+
+## State updates
+
+This page owns the four group-profile and joined-list events. Subscribe before querying the joined-group snapshot.
+
+```uts
+import {
+ off,
+ onGroupDismissed,
+ onGroupInfoChanged,
+ onJoinedGroupAdded,
+ onJoinedGroupDeleted,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const infoSubscription = onGroupInfoChanged((group) => upsertGroup(group.groupID, group))
+const subscriptions : Array = [
+ infoSubscription,
+ onGroupDismissed((group) => removeGroup(group.groupID)),
+ onJoinedGroupAdded((group) => upsertGroup(group.groupID, group)),
+ onJoinedGroupDeleted((group) => removeGroup(group.groupID)),
+]
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+Merge every event idempotently by `groupID`. Dismissal, active leave, and removal by another member have different business causes, but each can require closing the current chat page.
+
+`onGroupInfoChanged` updates profile data, `onGroupDismissed` means the group was dismissed, and `onJoinedGroupAdded` / `onJoinedGroupDeleted` update the current account's joined-group list. Promise success, event arrival, and requery are three stages. Requery snapshots after App restoration, synchronization, or re-login.
+
+Treat roles, mute state, join policy, and commercial extensions as server-authoritative. Degrade when fields are absent instead of inventing default permission. Stop sending and clear the member store when the current user can no longer access the group. Release every owned handle on logout or group-store destruction.
diff --git a/content/docs/chat/sdk/uniapp/group/quit-group.mdx b/content/docs/chat/sdk/uniapp/group/quit-group.mdx
new file mode 100644
index 0000000000..e7114ce927
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/quit-group.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Leave a group'
+description: 'OpenIM uni-app / uni-app x SDK guide for Leave a group.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/quit-group'
+---
+
+`quitGroup()` leaves one joined group for the current account.
+
+```uts
+import { quitGroup } from '@/uni_modules/unix-openim-sdk'
+
+await quitGroup(groupID)
+```
+
+Ask for confirmation. The owner normally cannot leave directly and must first transfer ownership or dismiss the group. After success, close the group chat and reconcile through a joined-group deletion event or a new query.
+
+Promise success means that the leave request completed, not that group-list and member events have arrived. Remove this account's chat entry, member pages, and send permission by `groupID`; other members retain the group.
+
+Serialize ownership transfer and leave: confirm the new owner through an event or query before calling `quitGroup()`. Preserve chat and group state on failure instead of deleting it only because the user confirmed the dialog.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx
new file mode 100644
index 0000000000..61516706ac
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx
@@ -0,0 +1,60 @@
+---
+title: 'List group members'
+description: 'OpenIM uni-app / uni-app x SDK guide for List group members.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/get-group-member-list'
+---
+
+`getGroupMemberList()` reads members by filter and page. This page owns the added, deleted, and info-changed member events.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `filter` | `number` | Yes | Server-defined member filter; do not use a UI index. |
+| `offset` | `number` | Yes | Offset; use `0` for the first page. |
+| `count` | `number` | Yes | Members requested in this page. |
+
+```uts
+import { getGroupMemberList, off, onGroupMemberAdded, onGroupMemberDeleted, onGroupMemberInfoChanged } from '@/uni_modules/unix-openim-sdk'
+
+const added = onGroupMemberAdded((member) => upsertMember(member))
+const deleted = onGroupMemberDeleted((member) => removeMember(member.groupID, member.userID))
+const changed = onGroupMemberInfoChanged((member) => upsertMember(member))
+const result = await getGroupMemberList({ groupID, filter: 0, offset: 0, count: 100 })
+replaceMembers(result?.members ?? [])
+off(added); off(deleted); off(changed)
+```
+
+The Promise resolves directly to `OpenIMGroupMemberListResult` or `null`; `members` contains the current page. A `null` result is not the same as an empty member page. Preserve error/loading state for `null`, and interpret an empty array as a valid page with no members.
+
+### Group member fields
+
+| Field | Description |
+| --- | --- |
+| `groupID`, `userID` | Stable member identity, combined as `groupID:userID`. |
+| `nickname`, `faceURL` | In-group display profile. |
+| `roleLevel` | Owner, administrator, or regular-member role. |
+| `joinTime`, `joinSource`, `inviterUserID` | Join time, source, and inviter. |
+| `muteEndTime` | Mute end time; compare it with current time. |
+| `operatorUserID` | User that performed the latest relevant operation. |
+| `ex`, `attachedInfo` | Extension data; parse only a confirmed business contract. |
+
+Cache by `groupID:userID`. Do not overwrite in-group display data with account-level `getUsersInfo()` results, and do not reuse role or mute state across groups.
+
+Continue until a page is shorter than `count`. Joins, exits, removals, and role changes can move page boundaries, so merge events by key and rebuild from offset 0 when complete ordering matters.
+
+## Listen for member changes
+
+This page is the complete owner for the three member events. Add or replace by `groupID:userID`; delete the exact same key. Do not mutate an array position when pagination and events run concurrently.
+
+If deletion targets the current user, stop sending and refresh the joined-group list. Recompute permissions after role or mute changes. Release every handle on logout, account switch, or member-store destruction. Query Promise success establishes only a page snapshot and does not itself trigger member events.
+
+Inviting, removing, muting, or editing a member has three possible observations: the mutation Promise, the member event, and a reconciliation query. Treat them separately and never make a local object change stand in for server confirmation.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx
new file mode 100644
index 0000000000..b47799feda
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx
@@ -0,0 +1,31 @@
+---
+title: 'Get specified group member profiles'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get specified group member profiles.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info'
+---
+
+`getSpecifiedGroupMembersInfo()` queries selected users' member profiles in one group.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `userIDList` | `string[]` | Yes | Member user IDs to query. |
+
+```uts
+import { getSpecifiedGroupMembersInfo } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSpecifiedGroupMembersInfo({ groupID, userIDList: ['user_a', 'user_b'] })
+```
+
+The Promise returns matching `OpenIMGroupMemberItem[]` in `members`. Results can be shorter or differently ordered because a user is not a member or cannot be accessed. Do not rely on input position.
+
+The same user can have a different nickname, role, and mute state in each group. Cache by `groupID:userID`, not only `userID`, and do not replace member data with ordinary public profile data. The query does not trigger events; later changes are owned by [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list).
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx
new file mode 100644
index 0000000000..c1f51a6cec
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Check group membership'
+description: 'OpenIM uni-app / uni-app x SDK guide for Check group membership.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/get-users-in-group'
+---
+
+`getUsersInGroup()` filters a candidate list to the user IDs that belong to one group. It returns `string[]` or `null`.
+
+```uts
+import { getUsersInGroup } from '@/uni_modules/unix-openim-sdk'
+
+const members = await getUsersInGroup({ groupID, userIDList: candidateUserIDs })
+```
+
+The result contains user IDs only, not member profiles. Query specified members when the UI needs in-group nickname, role, or mute state. Deduplicate input first and interpret results by value rather than input position.
+
+Treat `null` as no valid result and an empty array as no matching members. This operation does not add, invite, or remove members and does not trigger a member event.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx
new file mode 100644
index 0000000000..47fecbb3ae
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx
@@ -0,0 +1,39 @@
+---
+title: 'Search group members'
+description: 'OpenIM uni-app / uni-app x SDK guide for Search group members.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/search-group-members'
+---
+
+`searchGroupMembers()` searches members within one group, for example to build an @ mention picker. The current interface uses only the first keyword.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Target group ID. |
+| `keywordList` | `string[]` | Yes | Search keywords; pass one trimmed non-empty keyword. |
+| `isSearchUserID` | `boolean` | Yes | Whether to match user ID. |
+| `isSearchMemberNickname` | `boolean` | Yes | Whether to match in-group nickname. |
+
+```uts
+import { searchGroupMembers } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchGroupMembers({
+ groupID,
+ keywordList: [keyword.trim()],
+ isSearchUserID: true,
+ isSearchMemberNickname: true,
+})
+const members = result?.members ?? []
+```
+
+Unlike the Wasm version, this interface has no `offset` or `count`; it returns the current matches. Reject an empty keyword and replace the search snapshot when the input changes.
+
+`members` contains matching `OpenIMGroupMemberItem[]`. Deduplicate by `groupID:userID` and do not replace the complete member list. This searches member data, not the global user directory.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx
new file mode 100644
index 0000000000..8157d1ce31
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx
@@ -0,0 +1,53 @@
+---
+title: 'Get joined groups by page'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get joined groups by page.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page'
+---
+
+Use `getJoinedGroupListPage()` for accounts with many joined groups.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `offset` | `number` | Yes | Offset; use `0` for the first page. |
+| `count` | `number` | Yes | Number of groups to read. |
+
+```uts
+import { getJoinedGroupListPage } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getJoinedGroupListPage({ offset: 0, count: 100 })
+appendGroups(result?.groups ?? [])
+```
+
+## Return result
+
+The Promise resolves directly to `OpenIMGroupListResult` or `null`; `groups` contains the current page. Increase the offset until a page contains fewer than `count` items.
+
+### Group profile fields
+
+| Field | Description |
+| --- | --- |
+| `groupID` | Stable group identifier. |
+| `groupName`, `faceURL` | Group name and avatar snapshot. |
+| `notification`, `introduction` | Announcement and introduction. |
+| `ownerUserID`, `creatorUserID`, `createTime` | Owner, creator, and creation time. |
+| `memberCount`, `status`, `groupType` | Member-count, group-state, and type snapshot. |
+| `needVerification` | Join-verification policy. |
+| `lookMemberInfo`, `applyMemberFriend` | Member-profile and friend-application policy. |
+| `notificationUpdateTime`, `notificationUserID` | Latest announcement update metadata. |
+| `ex` | Application extension string. |
+| `attachedInfo` Enterprise | Commercial attachment data; parse only a confirmed contract. |
+
+Member count and permission fields are snapshots and do not replace member pagination or server authorization. See [Group overview](/sdk/uniapp/group/overview-group) for events and the model.
+
+Group events can move page boundaries. Merge pages into a map keyed by `groupID`, rebuild from offset 0 after App restoration/synchronization or group add/delete events, and stop old-account page writes during account switching.
+
+Use the first page to replace the current account's group snapshot and later pages to merge by `groupID`. Do not retain old-account group objects after switching users. Group names and member counts can change while paging, so calculate visible ordering only after merging the latest snapshot and events.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx
new file mode 100644
index 0000000000..841e516935
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx
@@ -0,0 +1,25 @@
+---
+title: 'Get joined groups'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get joined groups.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/get-joined-group-list'
+---
+
+`getJoinedGroupList()` reads the current account's complete local joined-group snapshot in one call.
+
+```uts
+import { getJoinedGroupList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getJoinedGroupList()
+replaceJoinedGroups(result?.groups ?? [])
+```
+
+The Promise resolves to `OpenIMGroupListResult` or `null`; read groups from `groups` and deduplicate by `groupID`. Use the paginated operation for large lists rather than loading an unbounded local database.
+
+This query establishes a snapshot and does not trigger group events. Merge joined, deleted, and info events from [Group overview](/sdk/uniapp/group/overview-group), and requery after login or synchronization gaps.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx
new file mode 100644
index 0000000000..b0956c748d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx
@@ -0,0 +1,27 @@
+---
+title: 'Get group information'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get group information.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/get-specified-groups-info'
+---
+
+Group-profile queries establish snapshots and do not trigger group events. Public group discovery and complex business-directory permission filtering belong to the application backend; this SDK query works with known `groupID` values.
+
+`getSpecifiedGroupsInfo()` receives an array of group IDs:
+
+```uts
+import { getSpecifiedGroupsInfo } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSpecifiedGroupsInfo(groupIDs)
+const groups = result?.groups ?? []
+```
+
+Pass an array even when querying one group, and verify that a result exists rather than assuming `groups[0]`. Groups have no SDK URL or slug field; resolve an application route to a stable `groupID` first.
+
+The Promise returns matching `OpenIMGroupItem[]` in `groups`. It can be shorter or differently ordered than the input because a group is absent, dismissed, or inaccessible. Map by `groupID` and split a large ID set into batches. Merge subsequent events by `groupID` as shown in [Group overview](/sdk/uniapp/group/overview-group).
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx
new file mode 100644
index 0000000000..c5882041a3
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Check group membership'
+description: 'OpenIM uni-app / uni-app x SDK guide for Check group membership.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/is-join-group'
+---
+
+`isJoinGroup()` returns whether the current account belongs to a specific group.
+
+```uts
+import { isJoinGroup } from '@/uni_modules/unix-openim-sdk'
+
+const joined = await isJoinGroup(groupID)
+```
+
+The boolean is a snapshot at query time. Refresh it after join, leave, dismissal, removal, re-login, or account change instead of caching one `true` permanently.
+
+This query neither joins the group nor proves moderator permission. When not joined, follow the group's verification policy and application flow rather than creating local member state.
diff --git a/content/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx b/content/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx
new file mode 100644
index 0000000000..e570518297
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx
@@ -0,0 +1,39 @@
+---
+title: 'Search groups'
+description: 'OpenIM uni-app / uni-app x SDK guide for Search groups.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/search-groups'
+---
+
+`searchGroups()` searches only groups joined by the current user and already synchronized locally. The current interface uses the first keyword in `keywordList`.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `keywordList` | `string[]` | Yes | One trimmed, non-empty keyword. |
+| `isSearchGroupID` | `boolean` | Yes | Whether to match `groupID`. |
+| `isSearchGroupName` | `boolean` | Yes | Whether to match group name. |
+
+```uts
+import { searchGroups } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchGroups({
+ keywordList: [keyword.trim()],
+ isSearchGroupID: true,
+ isSearchGroupName: true,
+})
+const groups = result?.groups ?? []
+```
+
+## Return result
+
+`groups` contains matching `OpenIMGroupItem[]`. Reject an empty keyword in the UI. Deduplicate results by `groupID`; they are a snapshot for the current keyword and must not replace the complete joined-group list.
+
+This is not a server-wide group directory. Public discovery, classification, and complex permission filters belong to a trusted application backend.
diff --git a/content/docs/chat/sdk/uniapp/group/set-group-announcement.mdx b/content/docs/chat/sdk/uniapp/group/set-group-announcement.mdx
new file mode 100644
index 0000000000..0809b86850
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/set-group-announcement.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Publish a group announcement'
+description: 'OpenIM uni-app / uni-app x SDK guide for Publish a group announcement.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/set-group-announcement'
+---
+
+Update a group's announcement through `setGroupInfo()` and pass only `notification` in addition to `groupID`.
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, notification: 'Release on Friday at 17:00' })
+```
+
+Passing only the announcement avoids overwriting group name, avatar, or policy fields. Promise success means that the update request completed. Merge `onGroupInfoChanged` or query the group again to confirm `notification`, `notificationUpdateTime`, and `notificationUserID`.
+
+Announcements are visible to group members. Do not include tokens, internal secrets, or moderation evidence, and apply the product's length and content validation before submission.
diff --git a/content/docs/chat/sdk/uniapp/group/set-group-extension.mdx b/content/docs/chat/sdk/uniapp/group/set-group-extension.mdx
new file mode 100644
index 0000000000..d6d9133c86
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/set-group-extension.mdx
@@ -0,0 +1,30 @@
+---
+title: 'Set group extra data'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set group extra data.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/set-group-extension'
+---
+
+Use `setGroupInfo()` to replace the group's `ex` string. Read and merge the current versioned schema before writing.
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({
+ groupID,
+ ex: JSON.stringify({
+ ...previous,
+ projectID: 'project-42',
+ }),
+})
+```
+
+`ex` is a complete replacement. When several modules share it, use stable namespaces and preserve fields owned by the others. If parsing fails, keep the original value rather than overwriting it. Members allowed to read group profiles can see this data, so never store secrets.
+
+After Promise success, merge the latest group profile from `onGroupInfoChanged` by `groupID` or query it again.
diff --git a/content/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx b/content/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx
new file mode 100644
index 0000000000..09890795ba
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Set group join verification'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set group join verification.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/set-group-join-verification'
+---
+
+Use `setGroupInfo()` to change how future applications and invitations are verified.
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, needVerification: 1 })
+```
+
+The `OpenIMGroupNeedVerification` range is:
+
+| `needVerification` | Meaning |
+| --- | --- |
+| `0` | User applications require review; member invitations can join directly. |
+| `1` | Applications and ordinary-member invitations require review; owner/admin invitations are exempt. |
+| `2` | Applications and invitations can join directly. |
+
+Use the exported contract type rather than a UI index. The client can explain the policy, but OpenIMServer remains authoritative. It affects future applications and invitations and does not reprocess existing members or pending requests.
+
+After Promise success, merge the latest group through `onGroupInfoChanged` by `groupID` or query it again.
diff --git a/content/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx b/content/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx
new file mode 100644
index 0000000000..b408fa2ac2
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx
@@ -0,0 +1,31 @@
+---
+title: 'Set member friend request permission'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set member friend request permission.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/set-group-member-friend-permission'
+---
+
+Use `setGroupInfo()` to control whether a user can start a friend application from the group-member relationship.
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, applyMemberFriend: 1 })
+```
+
+The `OpenIMGroupOption` values are:
+
+| `applyMemberFriend` | Meaning |
+| --- | --- |
+| `0` | Allow friend applications through group membership. |
+| `1` | Disallow friend applications through group membership. |
+
+This policy controls only the friend-application entry from a group-member relationship; it is not the same as hiding member profiles. The server enforces it, so UI visibility is not an authorization boundary.
+
+Promise success means that the update request completed. Merge the latest value from `onGroupInfoChanged` by `groupID`.
diff --git a/content/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx b/content/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx
new file mode 100644
index 0000000000..dfb64244e2
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx
@@ -0,0 +1,31 @@
+---
+title: 'Set member profile access'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set member profile access.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/set-group-member-profile-access'
+---
+
+Use `setGroupInfo()` to control whether ordinary members can view other members' profiles.
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, lookMemberInfo: 1 })
+```
+
+The `OpenIMGroupOption` values are:
+
+| `lookMemberInfo` | Meaning |
+| --- | --- |
+| `0` | Allow members to view other members' profiles. |
+| `1` | Disallow members from viewing other members' profiles. |
+
+Do not interpret this as a normal boolean where `0` is false and `1` is true. It is independent of the friend-application policy and does not replace backend privacy authorization. The server remains responsible for enforcement.
+
+After Promise success, merge the latest group through `onGroupInfoChanged` by `groupID`.
diff --git a/content/docs/chat/sdk/uniapp/group/update-group-profile.mdx b/content/docs/chat/sdk/uniapp/group/update-group-profile.mdx
new file mode 100644
index 0000000000..ecb21f4c5f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/group/update-group-profile.mdx
@@ -0,0 +1,42 @@
+---
+title: 'Update group profile'
+description: 'OpenIM uni-app / uni-app x SDK guide for Update group profile.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/group/update-group-profile'
+---
+
+Use `setGroupInfo()` to update basic group profile fields. Pass only the values that actually changed.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `groupID` | `string` | Yes | Group to update. |
+| `groupName` | `string` or `null` | No | New group name. |
+| `introduction` | `string` or `null` | No | New introduction. |
+| `faceURL` | `string` or `null` | No | New avatar URL. |
+
+Provide at least one actual profile field besides `groupID`; omitted fields retain their values.
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({
+ groupID,
+ groupName: groupName.trim(),
+ introduction: introduction.trim(),
+ faceURL,
+})
+```
+
+Do not mix announcement, join-verification, or member-permission fields into the ordinary profile-save flow; editing a name must not overwrite unrelated settings. The server enforces owner/admin permission.
+
+Promise success means that OpenIMServer completed the request. Merge `onGroupInfoChanged` by `groupID` or call `getSpecifiedGroupsInfo()` for immediate reconciliation. Do not overwrite fields that were not submitted.
+
+`displayIsRead` is an Enterprise field. Do not send it when the public server or installed edition does not expose the capability.
diff --git a/content/docs/chat/sdk/uniapp/logger.mdx b/content/docs/chat/sdk/uniapp/logger.mdx
new file mode 100644
index 0000000000..5600764cc9
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/logger.mdx
@@ -0,0 +1,158 @@
+---
+title: 'Logging'
+description: 'OpenIM uni-app / uni-app x SDK guide for Logging.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/logger'
+---
+
+`unix-openim-sdk` logs diagnose initialization, login, and business API calls on Android, iOS, and HarmonyOS. Development and staging builds can emit detailed SDK logs. Production should retain only necessary errors and tracing fields and must avoid tokens, message bodies, file URLs, server credentials, and other private data.
+
+A diagnostic flow combines logging options in `OpenIMInitConfig`, an optional `operationID` for one call, the plugin error, upload-progress events, and the application's structured logs.
+
+## Log levels
+
+Configure logging through `OpenIMInitConfig.logLevel` when calling `initSDK()`. From most to least verbose, the exported levels are:
+
+| Constant | Value | Description |
+| --- | --- | --- |
+| `OpenIMLogLevelVerbose` | `6` | Most detailed runtime tracing; use only for short, deep diagnostics. |
+| `OpenIMLogLevelDebug` | `5` | Development and integration details. |
+| `OpenIMLogLevelInfo` | `4` | Normal runtime information. |
+| `OpenIMLogLevelWarn` | `3` | Warnings. |
+| `OpenIMLogLevelError` | `2` | Errors. |
+| `OpenIMLogLevelFatal` | `1` | Fatal errors. |
+| `OpenIMLogLevelPanic` | `0` | Most severe level. |
+
+Do not leave `Verbose` or `Debug` enabled in production. Prefer an environment setting, staged feature flag, or explicit user-initiated diagnostic flow that raises verbosity only temporarily.
+
+### Recommended log levels
+
+| Scenario | Recommended configuration | Description |
+| --- | --- | --- |
+| Local development | `OpenIMLogLevelDebug`, `isLogStandardOutput: true` | Inspect SDK calls in Logcat or the Xcode console. |
+| Integration or staging | Temporarily use more detail when needed | Correlate user IDs, conversation IDs, error codes, and OpenIMServer logs. |
+| Production default | `OpenIMLogLevelWarn` or `OpenIMLogLevelError`, with unnecessary standard output disabled | Reduce noise and sensitive-data exposure while retaining actionable errors. |
+| User diagnostic mode | Temporarily raise verbosity and explain the collection scope | Obtain consent and follow privacy, retention, and deletion requirements. |
+
+## Configure logging
+
+Logging options belong to SDK initialization, not `login()`. This Android example uses the corresponding platform identity and required `systemType`:
+
+```uts
+import {
+ OpenIMLogLevelDebug,
+ OpenIMPlatformAndroid,
+ initSDK,
+ type OpenIMInitConfig,
+} from '@/uni_modules/unix-openim-sdk'
+
+const config : OpenIMInitConfig = {
+ platformID: OpenIMPlatformAndroid,
+ apiAddr: 'https://im-api.example.com',
+ wsAddr: 'wss://im-ws.example.com',
+ logLevel: OpenIMLogLevelDebug,
+ isLogStandardOutput: true,
+ systemType: 'android',
+}
+
+await initSDK(config)
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `logLevel` | `OpenIMLogLevel` | Yes | Controls the verbosity of SDK Core runtime logs. |
+| `isLogStandardOutput` | `boolean` | Yes | Writes SDK logs to the platform standard output. Enable it for development and temporary diagnostics. |
+| `logFilePath` | `string` or `null` | No | Custom log path. Normally use the plugin's platform default unless the application deliberately manages a sandbox path. |
+
+`apiAddr`, `wsAddr`, platform ID, and `systemType` are still required initialization settings, but they are not logging fields. Error codes and messages in plugin failures are also not logging configuration parameters.
+
+## Trace one call with operationID
+
+`operationID` is an optional correlation identifier for one SDK call. Most asynchronous APIs accept it as the last parameter. Ordinary calls can omit it and let the plugin generate or delegate the value. Create and pass one explicitly only when a specific call must be correlated precisely with native and OpenIMServer logs.
+
+```uts
+import { getConversationListSplit } from '@/uni_modules/unix-openim-sdk'
+
+const operationID = createDiagnosticOperationID()
+
+try {
+ const result = await getConversationListSplit(
+ { offset: 0, count: 50 },
+ operationID,
+ )
+
+ appLogger.info('openim_api_success', {
+ operationID,
+ action: 'get_conversation_page',
+ count: result?.conversations.length ?? 0,
+ })
+} catch (error) {
+ appLogger.error('openim_api_failed', {
+ operationID,
+ action: 'get_conversation_page',
+ error: sanitizeOpenIMError(error),
+ })
+ throw error
+}
+```
+
+Use a new `operationID` for every call. It is not a user identity, permission credential, conversation ID, or business idempotency key and cannot replace a token, `conversationID`, or `clientMsgID`. If one business flow contains several SDK calls, give every call its own operationID and use an application trace ID to correlate the whole flow.
+
+## Record business context
+
+Application logs can contain the route, business action, operationID, redacted error code, and necessary target identifiers such as `conversationID` or `clientMsgID`. Do not log:
+
+- User or administrator tokens, secrets, or commercial business credentials.
+- Complete message bodies, raw custom-message payloads, or private file URLs.
+- Unnecessary user profiles, contact lists, or group-member lists.
+- SDK database contents or complete local sandbox paths.
+
+Apply support and privacy policy to target identifiers as well, and redact them again before publishing an issue or sharing logs across teams.
+
+## Upload logs
+
+`uploadLogs()` receives a line count and an extension description. Obtain user consent first and explain what is collected, why it is needed, and how long it is retained.
+
+```uts
+import { uploadLogs } from '@/uni_modules/unix-openim-sdk'
+
+const operationID = createDiagnosticOperationID()
+
+await uploadLogs(
+ {
+ line: 2000,
+ ex: JSON.stringify({ scene: 'login-timeout' }),
+ },
+ operationID,
+)
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `line` | `number` | Yes | Number of log lines to upload. Apply a limit instead of an unbounded upload. |
+| `ex` | `string` | Yes | Redacted diagnostic context, such as a scenario name. Never include tokens, message content, or credentials. |
+
+Promise success means that the log-upload request completed. It does not create a support case or mean that the problem has been analyzed. Limit retries on failure to avoid sustained background data and battery usage.
+
+## Observe upload progress
+
+`onUploadLogsProgress()` returns an independent subscription handle. The canonical business owner for this event is [Message overview](/sdk/uniapp/message/overview-message); this page only defines how diagnostic UI uses the progress. The diagnostic service that owns the listener must release it with `off(subscription)`.
+
+Upload progress is display state, not proof that support analysis has completed. Never place raw log content or a token in progress state.
+
+## Related pages
+
+- [Install, initialize, and inspect the SDK](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)
+- [Authenticate and manage a session](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [Send your first message](/sdk/uniapp/getting-started/send-first-message)
+- [Send a message](/sdk/uniapp/message/sending-messages/send-message)
diff --git a/content/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx b/content/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx
new file mode 100644
index 0000000000..fa2c935396
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Check audio transcription availability'
+description: 'OpenIM uni-app / uni-app x SDK guide for Check audio transcription availability.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/composing-messages/check-speech-to-text'
+---
+
+```uts
+import { getSpeechToTextCapabilities } from '@/uni_modules/unix-openim-sdk'
+
+const capabilities = await getSpeechToTextCapabilities()
+```
+
+This is a Commercial capability query. The Promise resolves to `OpenIMSpeechToTextCapabilitiesResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `format` | `string[]` or `null` | Supported audio formats. |
+| `sampleRateHz` | `number[]` or `null` | Supported sample rates in hertz. |
+| `maxRecordTimeMs` | `number` or `null` | Maximum recording duration in milliseconds. |
+| `maxFileSize` | `number` or `null` | Maximum file size in bytes. |
+| `provider` | `string` or `null` | Current speech-recognition provider. |
+| `requestType` | `string` or `null` | Request type required by the service. |
+| `crossDomain` | `boolean` or `null` | Whether cross-domain processing is allowed. |
+
+Query and cache capabilities for the current login session before displaying transcription UI. Validate format, sample rate, duration, and size before sending audio. Capabilities can vary by service, language, and account, so refresh them after login changes. Disable transcription on failure instead of guessing limits. This query does not emit message events.
diff --git a/content/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx b/content/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx
new file mode 100644
index 0000000000..68920faec0
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Get typing status'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get typing status.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/composing-messages/get-typing-status'
+---
+
+```uts
+import { getInputStates } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getInputStates({ conversationID, userID: peerUserID })
+```
+
+`getInputStates()` is a Commercial snapshot query. Typing state is a short-lived hint, not a durable business fact. Update the UI from events and apply a local expiry timeout so a disconnect cannot leave “typing” visible forever. Never use this snapshot for authorization or durable presence.
diff --git a/content/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx b/content/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx
new file mode 100644
index 0000000000..792c0f9100
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Save a local transcript'
+description: 'OpenIM uni-app / uni-app x SDK guide for Save a local transcript.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/composing-messages/save-local-transcript'
+---
+
+```uts
+import { setMessageLocalContent } from '@/uni_modules/unix-openim-sdk'
+
+await setMessageLocalContent({ conversationID, message: updatedMessage })
+```
+
+`setMessageLocalContent()` is Commercial and stores a complete message object in the specified conversation's local database. Merge the transcript into a copy of the original message first; do not overwrite its `clientMsgID`, routing fields, or unrelated business elems. The change is device-local and must not be treated as a server or multi-device edit. Version structured transcript data and avoid retaining unnecessary sensitive content.
diff --git a/content/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx b/content/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx
new file mode 100644
index 0000000000..4efab6d9d1
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Transcribe audio'
+description: 'OpenIM uni-app / uni-app x SDK guide for Transcribe audio.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/composing-messages/transcribe-audio'
+---
+
+```uts
+import { speechToText } from '@/uni_modules/unix-openim-sdk'
+
+const result = await speechToText({
+ filename: 'voice.m4a',
+ data: audioBase64,
+})
+if (result?.text != null) setTranscript(result.text)
+```
+
+This is Commercial. Native files cannot cross the UTS boundary directly; encode the audio as the commercial service protocol requires. The Promise resolves to `OpenIMSpeechToTextResult | null`, whose optional `text` field contains the transcript.
+
+First query [speech-to-text capabilities](/sdk/uniapp/message/composing-messages/check-speech-to-text) and enforce the supported size, format, sample rate, and duration. Do not log complete audio or Base64 content. Transcription neither edits the original audio message nor emits message events. Ask the user to confirm transcripts before high-risk use; to persist one locally, see [Save a local transcript](/sdk/uniapp/message/composing-messages/save-local-transcript).
diff --git a/content/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx b/content/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx
new file mode 100644
index 0000000000..8a6c43cc6e
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx
@@ -0,0 +1,22 @@
+---
+title: 'Translate text and messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Translate text and messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/composing-messages/translate-text-and-messages'
+---
+
+`translateText()` and `translateMessage()` are Commercial on Android and iOS. HarmonyOS returns `platform-unsupported`.
+
+```uts
+import { translateText } from '@/uni_modules/unix-openim-sdk'
+
+const result = await translateText({ text: 'Hello', targetLanguage: 'zh-CN' })
+```
+
+Use the exact frozen parameter model, keep source text/message intact, and display translation as derived content. Treat language output as untrusted user-visible text and preserve privacy consent.
diff --git a/content/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx b/content/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx
new file mode 100644
index 0000000000..6225f643bb
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx
@@ -0,0 +1,28 @@
+---
+title: 'Report typing status'
+description: 'OpenIM uni-app / uni-app x SDK guide for Report typing status.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/composing-messages/update-typing-status'
+---
+
+Pass `focus: true` when the user starts typing. Pass `false` after sending, when the input loses focus, when switching conversations, or when typing stops. Typing state belongs to `conversationID`; it neither saves a draft nor writes a message.
+
+```uts
+import { changeInputStates, off, onConversationUserInputStatusChanged } from '@/uni_modules/unix-openim-sdk'
+
+const typingSubscription = onConversationUserInputStatusChanged((status) => {
+ updateConversationInputStatus(status)
+})
+await changeInputStates({ conversationID, userID: peerUserID, focus: true })
+off(typingSubscription)
+```
+
+Report `true` when the input gains focus and `false` on blur or page exit, and throttle high-frequency changes. Commercial compatibility method `typingStatusUpdate()` Commercial uses `recvID` and `msgTip`; do not call both routes for one typing flow. Expire stale indicators locally.
+
+Deduplicate state changes instead of reporting every keyboard event. Promise completion only means the request was accepted; it does not mean a remote interface has already updated. This page is the sole owner of `onConversationUserInputStatusChanged`. Replace the current `platformIDs` snapshot by `conversationID:userID`, and call `off(typingSubscription)` when the component, login, or account scope ends.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx
new file mode 100644
index 0000000000..ee9f35fa7f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx
@@ -0,0 +1,36 @@
+---
+title: 'Create a contact card message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a contact card message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-card-message'
+---
+
+## Parameters
+
+`createCardMessage()` accepts `OpenIMCardElem`. Its fields are nullable in the contract, but a useful card should provide a complete snapshot:
+
+| Parameter | Type | Recommendation | Description |
+| --- | --- | --- | --- |
+| `userID` | `string` or `null` | Required | User represented by the card. |
+| `nickname` | `string` or `null` | Required | Display name snapshot. |
+| `faceURL` | `string` or `null` | Required | Avatar URL snapshot. |
+| `ex` | `string` or `null` | Required | Extension data; use an empty string when unused. |
+
+```uts
+import { createCardMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createCardMessage({
+ userID: 'user_b',
+ nickname: 'Alex',
+ faceURL: 'https://example.com/avatar.png',
+ ex: '',
+})
+```
+
+The Promise creates `OpenIMMessageItem | null` and does not send it. A card is a send-time snapshot and does not track profile changes. Resolve current data by `userID` when opened, and never treat card fields as authenticated identity.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx
new file mode 100644
index 0000000000..e23169c835
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx
@@ -0,0 +1,38 @@
+---
+title: 'Create a custom message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a custom message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-custom-message'
+---
+
+Use `createCustomMessage()` for orders, tasks, invitations, polls, or other business messages whose schema is shared by sender and receiver.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `data` | `string` | Yes | Complete business payload, normally serialized JSON. |
+| `extension` | `string` | Yes | Complete business extension string. |
+| `descriptionText` | `string` | Yes | Type description or fallback text for unsupported clients. |
+
+```uts
+import { createCustomMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createCustomMessage({
+ data: JSON.stringify({ type: 'task', taskID: 'task_42' }),
+ extension: JSON.stringify({ schemaVersion: 1 }),
+ descriptionText: 'Task card',
+})
+```
+
+All three fields reach the recipient. Never store secrets; validate schema version, size, and fields before mapping to a business model, and never execute untrusted content. The uni-app / uni-app x contract does not include the Wasm commercial `searchText` parameter. The Promise creates `OpenIMMessageItem | null`; sending and custom business events are separate flows.
+
+## Advanced text messages
+
+`createAdvancedTextMessage()` creates entity/styled text from `OpenIMCreateAdvancedTextMessageParams`. Entity ranges must refer to indexes in the original text; reject out-of-range values before calling the SDK. Both APIs only create messages.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx
new file mode 100644
index 0000000000..5854c3a011
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Create an emoji message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create an emoji message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-face-message'
+---
+
+```uts
+import { createFaceMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createFaceMessage({ index: 1, data: 'smile' })
+```
+
+The Promise creates `OpenIMMessageItem | null` and does not send it. Sender and receiver must share the same sticker package/version mapping. Render an unknown-index placeholder instead of failing the message list.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx
new file mode 100644
index 0000000000..857193e1aa
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx
@@ -0,0 +1,40 @@
+---
+title: 'Create a file message from a URL'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a file message from a URL.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-file-message-by-url'
+---
+
+Use `createFileMessageByURL()` with metadata from a file that is already uploaded.
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| `filePath` | `string` or `null` | Local name or business path; use an empty string when only a remote resource exists. |
+| `fileName` | `string` or `null` | Display filename. |
+| `uuid` | `string` or `null` | Unique resource identifier. |
+| `sourceUrl` | `string` or `null` | Accessible URL of the uploaded file. |
+| `fileSize` | `number` or `null` | File size in bytes. |
+
+```uts
+import { createFileMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createFileMessageByURL({
+ filePath: '',
+ fileName: 'report.pdf',
+ uuid: createBusinessUUID(),
+ sourceUrl: uploaded.url,
+ fileSize: uploaded.size,
+})
+```
+
+Use real upload-result URL, name, UUID, and size values. The URL must be accessible to recipients without exposing private storage credentials. `OpenIMFileElem` does not contain the Wasm `fileType` field.
+
+The Promise creates `OpenIMMessageItem | null`. Because the resource is already uploaded, send it with `sendMessageNotOss()`.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx
new file mode 100644
index 0000000000..38a1f0488b
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx
@@ -0,0 +1,22 @@
+---
+title: 'Create a file message from a file'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a file message from a file.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-file-message-from-full-path'
+---
+
+```uts
+import { createFileMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createFileMessageFromFullPath({
+ filePath: '/data/user/0/app/cache/report.pdf', fileName: 'report.pdf',
+})
+```
+
+Commercial `createFileMessage()` can include source-path metadata. Validate path, permission, size, and extension. Treat `fileName` as display text, never as a path component.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx
new file mode 100644
index 0000000000..92c92efd6f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Create a forwarded message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a forwarded message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-forward-message'
+---
+
+```uts
+import { createForwardMessage } from '@/uni_modules/unix-openim-sdk'
+
+const forward = await createForwardMessage(sourceMessage)
+```
+
+The Promise creates `OpenIMMessageItem | null` and does not send it. Check content-sharing permissions and privacy first. Device-local extension and send-state fields are not recipient-authoritative data.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx
new file mode 100644
index 0000000000..a589afc6d0
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx
@@ -0,0 +1,46 @@
+---
+title: 'Create an image message from a URL'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create an image message from a URL.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-image-message-by-url'
+---
+
+`createImageMessageByURL()` creates a message from already uploaded image metadata. The source, large image, and thumbnail can use different resources; this example reuses one object only when all three are identical.
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| `sourcePicture` | `OpenIMPicture` or `null` | Original image metadata. |
+| `bigPicture` | `OpenIMPicture` or `null` | Large image metadata. |
+| `snapshotPicture` | `OpenIMPicture` or `null` | Thumbnail metadata. |
+| `sourcePath` | `string` or `null` | Local name or business path; use an empty string for a remote-only resource. |
+
+Each picture object has nullable `uuid`, `type`, `size`, `width`, `height`, and `url` fields. Supply the real upload result for a complete, displayable message.
+
+```uts
+import { createImageMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const picture = {
+ uuid: createBusinessUUID(),
+ type: 'image/jpeg',
+ size: 120000,
+ width: 1280,
+ height: 720,
+ url: uploaded.url,
+}
+const message = await createImageMessageByURL({
+ sourcePicture: picture,
+ bigPicture: picture,
+ snapshotPicture: picture,
+ sourcePath: '',
+})
+```
+
+URLs must be accessible to conversation participants, and dimensions, size, and type must match the real resource. Do not place local paths in URL fields. The Promise only creates an outgoing object; send an already uploaded image with `sendMessageNotOss()`.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx
new file mode 100644
index 0000000000..d521daacdd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Create an image message from a file'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create an image message from a file.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-image-message-from-full-path'
+---
+
+```uts
+import { createImageMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createImageMessageFromFullPath('/data/user/0/app/cache/photo.jpg')
+```
+
+Commercial `createImageMessage()` accepts structured source-path metadata. Both require a readable native path. Resolve `unifile://`, temporary album objects, or content URIs through the host platform and verify existence/permission before sending.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx
new file mode 100644
index 0000000000..95e5003df7
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx
@@ -0,0 +1,28 @@
+---
+title: 'Create a location message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a location message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-location-message'
+---
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `descriptionText` | `string` | Yes | Place name or address. |
+| `longitude` | `number` | Yes | Longitude. |
+| `latitude` | `number` | Yes | Latitude. |
+
+```uts
+import { createLocationMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createLocationMessage({ descriptionText: 'Room A', longitude: 121.47, latitude: 31.23 })
+```
+
+Obtain location only after user authorization and reduce precision according to your privacy policy. Clearly communicate recipients before sending sensitive location data, and omit precise coordinates from logs. The Promise only creates `OpenIMMessageItem | null`.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx
new file mode 100644
index 0000000000..50a50ee2e9
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Create a Markdown message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a Markdown message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-markdown-message'
+---
+
+```uts
+import { createMarkdownMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createMarkdownMessage({ content: '**Release complete**' })
+```
+
+This is Commercial. Sanitize Markdown at render time, disable unsafe HTML/scripts/URLs, and never treat raw content as trusted HTML.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx
new file mode 100644
index 0000000000..2e1848c0e7
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx
@@ -0,0 +1,32 @@
+---
+title: 'Create a merged forward message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a merged forward message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-merger-message'
+---
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `messageList` | `OpenIMMessageItem[]` | Yes | Sent messages to merge. |
+| `title` | `string` | Yes | Card title. |
+| `abstractList` | `string[]` | Yes | Summary rows displayed on the card. |
+
+```uts
+import { createMergerMessage } from '@/uni_modules/unix-openim-sdk'
+
+const merger = await createMergerMessage({
+ messageList: selectedMessages,
+ title: 'Project discussion',
+ abstractList: selectedMessages.slice(0, 4).map(buildSummary),
+})
+```
+
+The Promise creates a new outgoing message and does not modify its source messages. Keep summaries consistent with source content and provide fallback text for unsupported types. Verify sharing permission and sensitive content, and limit total message count and size.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx
new file mode 100644
index 0000000000..ab114d05cd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Create a reply message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a reply message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-quote-message'
+---
+
+```uts
+import { createQuoteMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createQuoteMessage({ text: 'Agreed', message: JSON.stringify(quotedMessage) })
+```
+
+Use the complete SDK message snapshot, not a fabricated ID-only object. `createAdvancedQuoteMessage()` also supports text entities. Render a safe unavailable state if the quoted source is later revoked or deleted.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx
new file mode 100644
index 0000000000..d744fea26e
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx
@@ -0,0 +1,38 @@
+---
+title: 'Create an audio message from a URL'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create an audio message from a URL.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-sound-message-by-url'
+---
+
+`createSoundMessageByURL()` creates a message from already uploaded audio metadata.
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| `uuid` | `string` or `null` | Unique audio resource ID. |
+| `soundPath` | `string` or `null` | Local name or business path; use an empty string for a remote-only resource. |
+| `sourceUrl` | `string` or `null` | Accessible uploaded audio URL. |
+| `dataSize` | `number` or `null` | Audio size in bytes. |
+| `duration` | `number` or `null` | Duration in the unit defined by the server protocol. |
+
+```uts
+import { createSoundMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createSoundMessageByURL({
+ uuid: createBusinessUUID(),
+ soundPath: '',
+ sourceUrl: uploaded.url,
+ dataSize: uploaded.size,
+ duration,
+})
+```
+
+Use upload-result URL, UUID, size, and duration values. The remote resource must be accessible to recipients; a sandbox path is not a media URL. `OpenIMSoundElem` does not contain the Wasm `soundType` field. The Promise only creates a message; send it with `sendMessageNotOss()`.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx
new file mode 100644
index 0000000000..a42df951dc
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Create an audio message from a file'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create an audio message from a file.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path'
+---
+
+```uts
+import { createSoundMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createSoundMessageFromFullPath({ soundPath: '/data/user/0/app/cache/voice.m4a', duration: 8 })
+```
+
+Commercial `createSoundMessage()` uses the structured form. Wait until recording is closed and readable; make duration match the actual media and the contract unit.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx
new file mode 100644
index 0000000000..c4d3f8bd2e
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx
@@ -0,0 +1,52 @@
+---
+title: 'Create an @ message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create an @ message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-text-at-message'
+---
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `text` | `string` | Yes | Message text; use stable `@userID` markers. |
+| `atUserIDList` | `string[]` | Yes | Mentioned users; obtain the special tag from `getAtAllTag()` for everyone. |
+| `atUsersInfo` | `OpenIMAtUsersInfoItem[]` or `null` | No | User IDs and group display names. |
+| `quoteMessage` | `OpenIMMessageItem` or `null` | No | Original quoted message. |
+
+```uts
+import { createTextAtMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextAtMessage({
+ text: '@user_a please review',
+ atUserIDList: ['user_a'],
+ atUsersInfo: [{ atUserID: 'user_a', groupNickname: 'Alex' }],
+})
+```
+
+The Promise creates `OpenIMMessageItem | null`. This message can only be sent to a group. Keep `atUserIDList` aligned with `atUsersInfo`; creation does not change conversation mention state or emit events.
+
+## Mention everyone
+
+Do not hard-code the everyone tag. Obtain the deployed value from commercial `getAtAllTag()` Commercial, then place it in both the text and ID list:
+
+```uts
+import { getAtAllTag } from '@/uni_modules/unix-openim-sdk'
+
+const atAllResult = await getAtAllTag()
+const atAllTag = atAllResult?.tag
+if (atAllTag != null) {
+ const message = await createTextAtMessage({
+ text: `${atAllTag} please read the announcement`,
+ atUserIDList: [atAllTag],
+ })
+}
+```
+
+`getAtAllTag()` only reads the convention. Send the created message separately with the target group ID.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx
new file mode 100644
index 0000000000..b1360e83fd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx
@@ -0,0 +1,21 @@
+---
+title: 'Create a text message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a text message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-text-message'
+---
+
+```uts
+import { createTextMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextMessage('Hello, OpenIMSDK')
+if (message == null) throw new Error('Failed to create text message')
+```
+
+The Promise returns `OpenIMMessageItem | null` and does not send it. Validate product length limits first, then pass the returned object to [Send a message](/sdk/uniapp/message/sending-messages/send-message). Do not construct `OpenIMMessageItem` manually.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx
new file mode 100644
index 0000000000..7fb4112c6e
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx
@@ -0,0 +1,40 @@
+---
+title: 'Create a video message from URLs'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a video message from URLs.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-video-message-by-url'
+---
+
+`createVideoMessageByURL()` creates a message from uploaded video and snapshot metadata.
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| `videoPath` | `string` or `null` | Local name or business path; use an empty string for remote-only media. |
+| `duration` | `number` or `null` | Video duration. |
+| `videoType` | `string` or `null` | Video MIME type. |
+| `videoUUID`, `videoUrl`, `videoSize` | nullable | Uploaded video ID, URL, and byte size. |
+| `snapshotPath` | `string` or `null` | Snapshot local name or business path. |
+| `snapshotUUID`, `snapshotUrl`, `snapshotSize` | nullable | Uploaded snapshot ID, URL, and byte size. |
+| `snapshotWidth`, `snapshotHeight` | `number` or `null` | Snapshot dimensions in pixels. |
+
+```uts
+import { createVideoMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createVideoMessageByURL({
+ videoPath: '', duration, videoType: uploadedVideo.contentType,
+ videoUUID: createBusinessUUID(), videoUrl: uploadedVideo.url,
+ videoSize: uploadedVideo.size, snapshotPath: '',
+ snapshotUUID: createBusinessUUID(), snapshotSize: uploadedSnapshot.size,
+ snapshotUrl: uploadedSnapshot.url, snapshotWidth, snapshotHeight,
+})
+```
+
+Use real uploaded URLs, IDs, sizes, duration, and MIME type. Both resources must be accessible to recipients and must not expose private storage credentials. `OpenIMVideoElem` does not contain the Wasm `snapShotType` field. Send the created message with `sendMessageNotOss()`.
diff --git a/content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx b/content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx
new file mode 100644
index 0000000000..ea944988ad
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx
@@ -0,0 +1,23 @@
+---
+title: 'Create a video message from files'
+description: 'OpenIM uni-app / uni-app x SDK guide for Create a video message from files.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-video-message-from-full-path'
+---
+
+```uts
+import { createVideoMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createVideoMessageFromFullPath({
+ videoPath: '/data/user/0/app/cache/video.mp4', videoType: 'mp4', duration: 12,
+ snapshotPath: '/data/user/0/app/cache/video-cover.jpg',
+})
+```
+
+Commercial `createVideoMessage()` can carry source-path metadata. Video and cover must exist, be readable, and match declared type/duration.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx
new file mode 100644
index 0000000000..9861ad9317
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Clear all local messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Clear all local messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/clear-all-local-messages'
+---
+
+```uts
+import { deleteAllMsgFromLocal } from '@/uni_modules/unix-openim-sdk'
+
+await deleteAllMsgFromLocal()
+```
+
+This high-risk operation clears all local messages for the current account. Require explicit confirmation and stop concurrent message queries before calling it. It does not guarantee deletion of server data, and later synchronization may restore some records. Rebuild the local message store after success and re-query after an ambiguous failure.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx
new file mode 100644
index 0000000000..2609ec3e87
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Clear local and server messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Clear local and server messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/clear-all-messages'
+---
+
+```uts
+import { deleteAllMsgFromLocalAndSvr } from '@/uni_modules/unix-openim-sdk'
+
+await deleteAllMsgFromLocalAndSvr()
+```
+
+This is a higher-risk account-wide local/server deletion. Explain scope and recovery behavior, require strong confirmation, and block concurrent mutations. Rebuild conversation and message state after success. On a timeout or ambiguous failure, query current state instead of assuming the operation was atomic.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx
new file mode 100644
index 0000000000..f61590071e
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Delete a local message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete a local message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/delete-local-message'
+---
+
+```uts
+import { deleteMessageFromLocalStorage } from '@/uni_modules/unix-openim-sdk'
+
+await deleteMessageFromLocalStorage({ conversationID, clientMsgID })
+```
+
+The compatibility method `deleteMessage()` uses the same parameters. This operation only removes the record from the current device. It does not revoke the peer's message and must not be presented as server deletion. Remove the row from the device store after success; use revocation or a commercial server-delete capability when other participants must observe the change.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx
new file mode 100644
index 0000000000..fc42609e47
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx
@@ -0,0 +1,40 @@
+---
+title: 'Delete messages in a batch'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete messages in a batch.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/delete-saved-messages'
+---
+
+`deleteMessages()` is Commercial and batch-deletes explicitly selected messages from one conversation.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | Yes | Conversation containing the messages. |
+| `clientMsgIDs` | `string[]` | Yes | Message IDs; all IDs in one request must belong to this conversation. |
+| `IsSync` | `boolean` | Yes | Whether to synchronize deletion to this account's other clients. The capital `I` is part of the field name. |
+
+```uts
+import { deleteMessages, off, onMsgDeleted } from '@/uni_modules/unix-openim-sdk'
+
+const deletedSubscription = onMsgDeleted((message) => {
+ if (message == null) return
+ removeMessage(resolveConversationID(message), message.clientMsgID)
+})
+await deleteMessages({ conversationID, clientMsgIDs: selectedMessageIDs, IsSync: true })
+
+function removeMessageDeletedListener() {
+ off(deletedSubscription)
+}
+```
+
+`IsSync: false` removes current-device and current-account server records; `true` also requests synchronization to other clients. It does not remove copies belonging to other conversation members and does not create a revoked-message notice.
+
+Promise completion does not prove that every client received the event. Public `onMsgDeleted` belongs to this page and provides `OpenIMMessageItem | null`; resolve its conversation and remove by `clientMsgID` idempotently. Remove the listener on logout/account change and reconcile with history when necessary.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx
new file mode 100644
index 0000000000..8d537dbd45
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx
@@ -0,0 +1,26 @@
+---
+title: 'Delete all messages from a user in a group chat'
+description: 'OpenIM uni-app / uni-app x SDK guide for Delete all messages from a user in a group chat.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/delete-user-messages'
+---
+
+`deleteUserAllMessagesInConv()` and `onDeleteUserAllMsgsInConv` are Commercial. The operation applies only to group conversations and deletes every message sent by the selected user in that conversation. Treat it as a high-impact moderation action, not a normal single-message menu item; OpenIMServer validates operator permission.
+
+```uts
+import { deleteUserAllMessagesInConv, off, onDeleteUserAllMsgsInConv } from '@/uni_modules/unix-openim-sdk'
+
+const subscription = onDeleteUserAllMsgsInConv((payload) => refreshAfterValidatedJson(payload))
+await deleteUserAllMessagesInConv({ conversationID, userID: targetUserID })
+off(subscription)
+```
+
+Require strong confirmation. Promise completion does not mean the event has already arrived. The event payload is raw JSON in the uni-app / uni-app x contract, so parse it defensively and refresh the conversation instead of depending on unfrozen fields or logging the payload.
+
+This page owns `onDeleteUserAllMsgsInConv`. Remove its subscription when the component is destroyed, the user logs out, or the active account changes. Promise completion, event delivery, and a fresh history query are three independent stages.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx
new file mode 100644
index 0000000000..76978ac3ac
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx
@@ -0,0 +1,23 @@
+---
+title: 'Get pinned messages in a conversation'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get pinned messages in a conversation.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/get-pinned-messages'
+---
+
+```uts
+import { getConversationPinnedMsg } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationPinnedMsg({ conversationID })
+replacePinnedMessages(conversationID, result?.messages ?? [])
+```
+
+This is Commercial. The Promise returns the conversation's current pinned-message snapshot. Follow the returned DTO's message-list and pagination fields, and see [Message overview](/sdk/uniapp/message/overview-message) for message fields.
+
+The query does not emit a pin-change event. Deduplicate by `clientMsgID`, merge deletion, revocation, and modification events into displayed message content, and reload the pinned snapshot after the raw event described in [Pin or unpin a message](/sdk/uniapp/message/managing-messages/set-message-pinned).
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx
new file mode 100644
index 0000000000..331aa2c05c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx
@@ -0,0 +1,28 @@
+---
+title: 'Insert a local group message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Insert a local group message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/insert-local-group-message'
+---
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `message` | `OpenIMMessageItem` | Yes | Complete message to store locally. |
+| `groupID` | `string` | Yes | Target group. |
+| `sendID` | `string` | Yes | Sender user ID. |
+
+```uts
+import { insertGroupMessageToLocalStorage } from '@/uni_modules/unix-openim-sdk'
+
+await insertGroupMessageToLocalStorage({ message, groupID, sendID: currentUserID })
+```
+
+The Promise only changes this device's local database. It does not broadcast to group members or emit a new-message event. Use it for migration or local notices, not to fake server delivery. Use a send API when you need delivery, offline push, or multi-device synchronization.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx
new file mode 100644
index 0000000000..28b33c3396
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx
@@ -0,0 +1,31 @@
+---
+title: 'Insert a local one-to-one message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Insert a local one-to-one message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/insert-local-single-message'
+---
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `message` | `OpenIMMessageItem` | Yes | Complete message to store locally. |
+| `recvID` | `string` | Yes | Single-chat receiver. |
+| `sendID` | `string` | Yes | Sender user ID. |
+
+```uts
+import { createTextMessage, insertSingleMessageToLocalStorage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextMessage('Local notice')
+if (message != null) {
+ await insertSingleMessageToLocalStorage({ message, recvID: targetUserID, sendID: currentUserID })
+}
+```
+
+The Promise only writes this device's database. It sends nothing and emits no new-message event. Use the capability for migration or local notices, not to fake a sent message, and prevent message ID collisions.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx
new file mode 100644
index 0000000000..465bde57ae
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx
@@ -0,0 +1,61 @@
+---
+title: 'Modify a message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Modify a message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/modify-a-message'
+---
+
+`modifyMessage()` is Commercial. Unlike deletion, which changes current-account visibility, and revocation, which creates a revoked state for conversation members, modification replaces content and synchronizes it to other clients.
+
+## Modify message content
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | Yes | Conversation containing the message. |
+| `message` | `OpenIMMessageItem` | Yes | Complete edited message; preserve the original `clientMsgID`. |
+
+```uts
+import { modifyMessage, off, onMessageEdited, onMessageModified } from '@/uni_modules/unix-openim-sdk'
+
+const modified = onMessageModified(refreshModifiedMessage)
+const edited = onMessageEdited(refreshModifiedMessage)
+const result = await modifyMessage({ conversationID, message: buildEditedMessage(message, editedText) })
+if (result?.message != null) replaceMessage(result.message)
+
+function removeMessageModifiedListeners() {
+ off(modified)
+ off(edited)
+}
+```
+
+This is not a partial patch. Copy the current message and change only the intended content, preserving its ID and other fields. The server enforces sender, time-window, and content-type rules.
+
+If the call fails, discard the optimistic edit instead of leaving content that exists only in local UI state. Redact message bodies from diagnostics and keep the previous server-confirmed object until the request succeeds.
+
+## Return result
+
+`result?.message` is the server-confirmed `OpenIMMessageItem | null`. Replace the matching local message, but do not assume every device has updated.
+
+Promise completion confirms the current request only. Other clients merge the incremental update later, and the event can race with the Promise on the initiating client. Use `clientMsgID` and the server-confirmed version rather than arrival order.
+
+## Listen for message modifications
+
+Commercial `onMessageModified` and `onMessageEdited` deliver raw JSON. A deployment may use either event. If both are registered, validate JSON and deduplicate by stable message ID/version. Do not log message bodies. Remove both subscriptions when the login scope ends, and use the server's final version to resolve multi-device edits.
+
+After validation, resolve the conversation from the message routing fields and replace the existing row by `clientMsgID`. If the raw payload does not expose a stable, contract-approved shape, re-query the message rather than casting it directly.
+
+## Related pages
+
+- [Delete saved messages](/sdk/uniapp/message/managing-messages/delete-saved-messages)
+- [Revoke a message](/sdk/uniapp/message/managing-messages/revoke-a-message)
+- [Find messages by ID](/sdk/uniapp/message/retrieving-messages/find-messages-by-id)
+- [Send a message](/sdk/uniapp/message/sending-messages/send-message)
+- [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx
new file mode 100644
index 0000000000..87bda57c60
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx
@@ -0,0 +1,55 @@
+---
+title: 'Revoke a message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Revoke a message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/revoke-a-message'
+---
+
+Use `revokeMessage()` when other conversation members should see a revoked-message state. Normal deletion only changes current-account visibility.
+
+To edit sent content instead, see [Modify a message](/sdk/uniapp/message/managing-messages/modify-a-message). Do not substitute deletion for revocation because the recipient-visible semantics differ.
+
+## Revoke one message
+
+```uts
+import { off, onNewRecvMessageRevoked, revokeMessage } from '@/uni_modules/unix-openim-sdk'
+
+const revokedSubscription = onNewRecvMessageRevoked((info) => {
+ if (info != null) markMessageRevoked(info.clientMsgID, info)
+})
+await revokeMessage({ conversationID, clientMsgID })
+
+function removeRevokeListener() {
+ off(revokedSubscription)
+}
+```
+
+After Promise success, the caller can mark the matching local message as revoked. Online clients receive `onNewRecvMessageRevoked` and should update the bubble rather than deleting the array entry. The server enforces sender, time-window, and message-type rules.
+
+If the call fails, do not leave a fabricated revoked placeholder. Promise success means only that the current request completed, not that every client interface has processed its event.
+
+## Return result
+
+`revokeMessage()` resolves to a string result, not a message object. Continue using the requested `clientMsgID` locally and reconcile other clients through the event.
+
+The event may arrive before the Promise resolves. Treat both paths as updates to the same stable message state instead of appending a second row.
+
+## Listen for revocation events
+
+This page owns `onNewRecvMessageRevoked`. Its value is `OpenIMMessageRevokedItem | null`; merge by `clientMsgID`. `isAdminRevoke` can select an administrator-specific notice. Event and Promise order is not guaranteed, so processing must be idempotent. Remove the listener on component disposal, logout, or account change.
+
+After a new login, revocation changes are synchronized through message events. Do not retain a subscription from the previous account or infer revocation completion from a history request callback.
+
+## Related pages
+
+- [Delete saved messages](/sdk/uniapp/message/managing-messages/delete-saved-messages)
+- [Modify a message](/sdk/uniapp/message/managing-messages/modify-a-message)
+- [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages)
+- [Send a message](/sdk/uniapp/message/sending-messages/send-message)
+- [Find messages by ID](/sdk/uniapp/message/retrieving-messages/find-messages-by-id)
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx
new file mode 100644
index 0000000000..19a7487628
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx
@@ -0,0 +1,30 @@
+---
+title: 'Set a local message extension'
+description: 'OpenIM uni-app / uni-app x SDK guide for Set a local message extension.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/set-message-local-ex'
+---
+
+`localEx` is stored only on this client. Use it for collapsed, selected, or local-source display state, not for data that must synchronize.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | Yes | Conversation containing the message. |
+| `clientMsgID` | `string` | Yes | Target message ID. |
+| `localEx` | `string` | Yes | Complete replacement string. |
+
+```uts
+import { setMessageLocalEx } from '@/uni_modules/unix-openim-sdk'
+
+await setMessageLocalEx({ conversationID, clientMsgID, localEx: JSON.stringify(localState) })
+```
+
+The Promise means the local value was updated. The method does not merge old JSON and emits no shared message event. Merge and version data in the application when old fields must survive, constrain size, and store no tokens or irreplaceable business data.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx b/content/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx
new file mode 100644
index 0000000000..a96766bbee
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx
@@ -0,0 +1,35 @@
+---
+title: 'Pin or unpin a message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Pin or unpin a message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-messages/set-message-pinned'
+---
+
+`setConversationPinnedMsg()` and `onChangedPinnedMsg` are Commercial.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | Yes | Conversation containing the message. |
+| `clientMsgID` | `string` | Yes | Message to pin or unpin. |
+| `pinned` | `boolean` | Yes | `true` to pin, `false` to unpin. |
+
+```uts
+import { off, onChangedPinnedMsg, setConversationPinnedMsg } from '@/uni_modules/unix-openim-sdk'
+
+const pinnedSubscription = onChangedPinnedMsg((payload) => refreshPinnedMessagesAfterValidJson(payload))
+await setConversationPinnedMsg({ conversationID, clientMsgID: message.clientMsgID, pinned: true })
+
+function removePinnedListener() {
+ off(pinnedSubscription)
+}
+```
+
+The server enforces permission, message-type, and count limits. Promise success does not mean the event arrived. This page owns the raw JSON `onChangedPinnedMsg` event. Validate it, refresh the conversation's pinned set, and deduplicate by `clientMsgID` rather than casting opaque JSON directly to a message. Remove the subscription when the login scope ends.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx b/content/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx
new file mode 100644
index 0000000000..509f449073
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx
@@ -0,0 +1,35 @@
+---
+title: 'Get members who read a group message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Get members who read a group message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-read-status/get-group-message-readers'
+---
+
+`getGroupMessageReaderList()` is Commercial and paginates members who have or have not read a specific group message.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | Yes | Group conversation ID. |
+| `clientMsgID` | `string` | Yes | Message whose readers are queried. |
+| `filter` | `number` | Yes | `0` for readers, `1` for unread members. |
+| `offset` | `number` | Yes | Pagination offset; start with `0`. |
+| `count` | `number` | Yes | Number of members to request. |
+
+```uts
+import { getGroupMessageReaderList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getGroupMessageReaderList({
+ conversationID, clientMsgID, filter: 0, offset: 0, count: 50,
+})
+const readers = result?.readers ?? []
+```
+
+`result?.readers` is the current page of `OpenIMGroupMemberItem[]`. Continue by increasing `offset` and deduplicate by `groupID:userID`. The query creates a snapshot and emits no receipt event; refresh the detail because later receipts can change it.
diff --git a/content/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx b/content/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx
new file mode 100644
index 0000000000..7a19cc94d0
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx
@@ -0,0 +1,29 @@
+---
+title: 'Report group messages as read'
+description: 'OpenIM uni-app / uni-app x SDK guide for Report group messages as read.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/managing-read-status/send-group-read-receipts'
+---
+
+```uts
+import { off, onRecvGroupReadReceipt, sendGroupMessageReadReceipt } from '@/uni_modules/unix-openim-sdk'
+
+const receiptSubscription = onRecvGroupReadReceipt((payload) => {
+ mergeValidatedGroupReadReceipt(payload)
+})
+await sendGroupMessageReadReceipt({ conversationID, clientMsgIDs: visibleUnreadMessageIDs })
+
+function removeGroupReadReceiptListener() {
+ off(receiptSubscription)
+}
+```
+
+Both APIs are Commercial. All message IDs in one request must belong to the target group conversation. Promise success means the server accepted the report; it does not update the conversation unread count, which remains the responsibility of `markConversationMessageAsRead()`.
+
+This page owns raw JSON event `onRecvGroupReadReceipt`. Validate JSON and merge counts/member data by `conversationID + clientMsgID`. Remove the subscription on logout or account change. Request completion, event delivery, and the snapshot returned by [Get group message readers](/sdk/uniapp/message/managing-read-status/get-group-message-readers) are independent phases.
diff --git a/content/docs/chat/sdk/uniapp/message/overview-message.mdx b/content/docs/chat/sdk/uniapp/message/overview-message.mdx
new file mode 100644
index 0000000000..2a1ad9b0b5
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/overview-message.mdx
@@ -0,0 +1,112 @@
+---
+title: 'Message overview'
+description: 'OpenIM uni-app / uni-app x SDK guide for Message overview.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/overview-message'
+---
+
+The uni-app / uni-app x plugin represents every message with `OpenIMMessageItem`. Sending has two phases: create an outgoing message object for the desired content, then send that object to a user or group. A create method does not send anything, and a successful send Promise does not prove that another client has received the message.
+
+Realtime delivery, history, search, and message management are all conversation-scoped. Merge send results, realtime events, and history idempotently with the composite key `conversationID:clientMsgID`: `conversationID` identifies the conversation and `clientMsgID` identifies the message.
+
+## Message processing flow
+
+| Phase | Main operation | Notes |
+| --- | --- | --- |
+| Create | Call the appropriate `create*Message()` method | Returns an `OpenIMMessageItem`; it does not write to the server or emit a new-message event. |
+| Send | Call `sendMessage()` or `sendMessageNotOss()` | For a single chat, set `recvID`; for a group chat, set `groupID`. Pass an empty string for the unused target. |
+| Receive | Subscribe to new-message events | Resolve the target conversation from the routing fields and merge by `clientMsgID`. |
+| Query | Load history, search, or find messages by ID | Queries return a snapshot and do not emit new-message events. |
+| Update | Delete, revoke, modify, pin, or report read status | Handle the Promise, related events, and any required reconciliation query separately. |
+
+Messages created from a readable native image, audio, video, or file path are uploaded by `sendMessage()`. If your application already uploaded the media and has a URL, use the corresponding `create*MessageByURL()` method and send it with `sendMessageNotOss()` to avoid uploading it again.
+
+## OpenIMMessageItem structure
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `clientMsgID` | `string` or `null` | Stable client ID used for deduplication, state updates, lookup, and pagination cursors. |
+| `serverMsgID` | `string` or `null` | Server message ID; an unsent or failed message may not have one. |
+| `sessionType` | `OpenIMSessionType` | Conversation type. |
+| `sendID`, `recvID`, `groupID` | `string` or `null` | Sender and single/group routing fields. |
+| `contentType` | `OpenIMMessageType` | Content type that determines which elem field to read. |
+| `createTime`, `sendTime` | `number` | Creation and send times. |
+| `seq` | `number` | Server sequence number. |
+| `senderPlatformID` | `OpenIMPlatform` | Sender platform. |
+| `senderNickname`, `senderFaceUrl` | `string` or `null` | Sender profile snapshot. |
+| `status` | `OpenIMMessageStatus` | Current send status. |
+| `isRead` | `boolean` | Current read-state snapshot. |
+| `offlinePush` | `OpenIMOfflinePush` or `null` | Offline-push settings used for the send. |
+| `content`, `attachedInfo` | `string` or `null` | SDK-serialized content and attached information. |
+| `ex` | `string` or `null` | Extension string synchronized with the message. |
+| `localEx` | `string` or `null` | Extension string stored only on this device. |
+
+Read message bodies from the elem that matches `contentType`: `textElem` for text; `pictureElem`, `soundElem`, `videoElem`, and `fileElem` for media; `atTextElem` and `quoteElem` for mentions and replies; `mergeElem` and `customElem` for merged and custom messages; `cardElem`, `locationElem`, and `faceElem` for cards, locations, and emoji; and `advancedTextElem`, `typingElem`, and `notificationElem` for advanced text, typing, and notifications. Do not infer the message type from display text or array position.
+
+`conversationID` identifies the containing conversation but is not an `OpenIMMessageItem` field. Obtain it from the active conversation, query condition, search result, or event context, then merge state by `conversationID:clientMsgID`.
+
+## Create messages with different content types
+
+| Content | Page | Notes |
+| --- | --- | --- |
+| Text and Markdown | [Create a text message](/sdk/uniapp/message/creating-messages/create-text-message), [Create a Markdown message](/sdk/uniapp/message/creating-messages/create-markdown-message) | Render Markdown safely on the receiver. |
+| Group mentions | [Create an @ message](/sdk/uniapp/message/creating-messages/create-text-at-message) | Can only be sent to a group. |
+| Images, audio, video, and files | [Create an image from a full path](/sdk/uniapp/message/creating-messages/create-image-message-from-full-path), [Create an image from a URL](/sdk/uniapp/message/creating-messages/create-image-message-by-url) | Other media types use the same local-path or pre-uploaded URL flow. |
+| Cards, locations, and emoji | [Create a card message](/sdk/uniapp/message/creating-messages/create-card-message), [Create a location message](/sdk/uniapp/message/creating-messages/create-location-message), [Create a face message](/sdk/uniapp/message/creating-messages/create-face-message) | Creation stores a content snapshot. |
+| Replies, forwarding, and merging | [Create a quote message](/sdk/uniapp/message/creating-messages/create-quote-message), [Create a forwarded message](/sdk/uniapp/message/creating-messages/create-forward-message), [Create a merged message](/sdk/uniapp/message/creating-messages/create-merger-message) | The returned object still must be sent explicitly. |
+| Custom business content | [Create a custom message](/sdk/uniapp/message/creating-messages/create-custom-message) | Receivers must validate the business schema. |
+
+Put device-only presentation state in `localEx`, not in business content that must synchronize to other users. See [Set a local message extension](/sdk/uniapp/message/managing-messages/set-message-local-ex).
+
+Progress events for message sends, file uploads, and log uploads belong to this page:
+
+```uts
+import {
+ off,
+ onSendMessageProgress,
+ onUploadFileProgress,
+ onUploadLogsProgress,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const sendProgressSubscription = onSendMessageProgress((event) => {
+ updateMessageProgress(event.clientMsgID, event.progress)
+})
+const subscriptions : Array = [
+ sendProgressSubscription,
+ onUploadFileProgress((event) => updateCurrentUpload(event.progress)),
+ onUploadLogsProgress((event) => updateLogUpload(event.progress)),
+]
+
+function removeProgressListeners() {
+ subscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+Progress may repeat, skip values, or arrive before or after the final Promise. Display it monotonically and use the API result as the source of truth. Call `removeProgressListeners()` when logging out, switching accounts, or disposing the progress state.
+
+A local media path must be readable by the native layer. Resolve `unifile://` to a real sandbox path; use the by-URL create method for network URLs.
+
+## Find a page by task
+
+| Task | Page |
+| --- | --- |
+| Send a normal or pre-uploaded media message | [Send a message](/sdk/uniapp/message/sending-messages/send-message), [Send pre-uploaded media](/sdk/uniapp/message/sending-messages/send-message-not-oss) |
+| Receive online, offline, and online-only messages | [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages) |
+| Load history or surrounding context | [Load older messages](/sdk/uniapp/message/retrieving-messages/load-older-messages), [Load message context](/sdk/uniapp/message/retrieving-messages/load-message-context) |
+| Find by ID or search local messages | [Find messages by ID](/sdk/uniapp/message/retrieving-messages/find-messages-by-id), [Search messages](/sdk/uniapp/message/searching-messages/search-messages) |
+| Delete, revoke, modify, or pin | [Delete saved messages](/sdk/uniapp/message/managing-messages/delete-saved-messages), [Revoke a message](/sdk/uniapp/message/managing-messages/revoke-a-message), [Modify a message](/sdk/uniapp/message/managing-messages/modify-a-message), [Pin a message](/sdk/uniapp/message/managing-messages/set-message-pinned) |
+| Group member-level read status | [Send group read receipts](/sdk/uniapp/message/managing-read-status/send-group-read-receipts), [Get group message readers](/sdk/uniapp/message/managing-read-status/get-group-message-readers) |
+| Typing status or speech recognition | [Update typing status](/sdk/uniapp/message/composing-messages/update-typing-status), [Transcribe audio](/sdk/uniapp/message/composing-messages/transcribe-audio) |
+
+## State synchronization boundaries
+
+The complete listeners for new messages, deletion, revocation, modification, pinning, group read status, and typing status live on their task pages. Message creation and pure query methods only establish snapshots from their Promise result and do not emit shared message events. For mutations, treat Promise completion, event delivery, and reconciliation queries as separate phases.
+
+Conversation unread counts, total unread counts, and group mention reminders are conversation state. Maintain them with [Mark a conversation as read](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read), [Maintain the total unread count](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count), and the events on [Retrieve the conversation list](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list).
diff --git a/content/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx b/content/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx
new file mode 100644
index 0000000000..5f34ab5c96
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx
@@ -0,0 +1,31 @@
+---
+title: 'Receive custom business messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Receive custom business messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/receiving-messages/receive-custom-business-messages'
+---
+
+These listeners deliver opaque JSON strings. `onRecvCustomBusinessMessage` is public; four extension/KV listeners are Commercial and unsupported on HarmonyOS.
+
+```uts
+import { off, onRecvCustomBusinessMessage } from '@/uni_modules/unix-openim-sdk'
+
+function handleRawPayload(payload : string) {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) routeValidatedBusinessEvent(value)
+ } catch (_) {
+ console.error('Invalid custom message event')
+ }
+}
+const customSubscription = onRecvCustomBusinessMessage(handleRawPayload)
+off(customSubscription)
+```
+
+uni-app JavaScript should use protected `JSON.parse`. Validate version, kind, and required fields before updating state, safely ignore unknown payloads, and never log the complete string.
diff --git a/content/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx b/content/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx
new file mode 100644
index 0000000000..f988d87d86
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx
@@ -0,0 +1,133 @@
+---
+title: 'Receive messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Receive messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/receiving-messages/receive-messages'
+---
+
+Message views normally combine realtime messages, messages received while the app was in the background, online-only messages, and a history snapshot loaded when the conversation opens. Events provide increments; history APIs provide a `conversationID`-scoped snapshot.
+
+Different Core versions and recovery paths may deliver through single-message or batch events. Subscribe to all five paths for completeness, but deduplicate by `conversationID:clientMsgID`. Before a component is destroyed, the user logs out, or the account changes, call `off()` with every subscription handle.
+
+Register these handlers on the same login-scoped plugin session. Do not interpret an incoming event as the completion callback for a history or mark-as-read request; each flow has its own lifecycle.
+
+## Message types
+
+Choose rendering from `contentType` and the corresponding elem on `OpenIMMessageItem`: `textElem` for text, `atTextElem` for mentions, `customElem` for custom content, and the matching media elem for images, audio, video, and files. Show a safe fallback for unknown types instead of executing unvalidated `content`.
+
+```uts
+function renderMessage(message : OpenIMMessageItem) {
+ if (message.textElem != null) return renderTextMessage(message)
+ if (message.atTextElem != null) return renderMentionMessage(message)
+ if (message.customElem != null) return renderCustomMessage(message)
+ if (
+ message.pictureElem != null ||
+ message.soundElem != null ||
+ message.videoElem != null ||
+ message.fileElem != null
+ ) {
+ return renderFileLikeMessage(message)
+ }
+ return renderUnsupportedMessage(message)
+}
+```
+
+Events can contain messages for conversations that are not currently open. `OpenIMMessageItem` does not carry `conversationID`; derive or look up the conversation from `sessionType`, `sendID`, `recvID`, and `groupID`, then deduplicate by `clientMsgID`.
+
+```uts
+function mergeMessage(message : OpenIMMessageItem) {
+ const targetConversationID = getConversationIDForMessage(message)
+ if (targetConversationID.length == 0) return
+ mergeMessageByClientMsgID(targetConversationID, message)
+}
+```
+
+### Image, audio, video, and file messages
+
+The receiver does not upload these files again. Read and render the resource URL, size, filename, duration, or snapshot from the media elem. To send several files, applications normally send several file messages or one versioned custom message describing a group; each message still uses `clientMsgID` as its stable identifier.
+
+## Event handlers
+
+```uts
+import {
+ off,
+ onRecvNewMessage,
+ onRecvNewMessages,
+ onRecvOfflineNewMessage,
+ onRecvOfflineNewMessages,
+ onRecvOnlineOnlyMessage,
+ type OpenIMMessageItem,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const subscriptions = [
+ onRecvNewMessage((message) => {
+ if (message != null) mergeMessage(message)
+ }),
+ onRecvOfflineNewMessage((message) => {
+ if (message != null) mergeMessage(message)
+ }),
+ onRecvOnlineOnlyMessage((message) => {
+ if (message != null) mergeOnlineOnlyMessage(message)
+ }),
+ onRecvNewMessages((result) => {
+ if (result != null) result.messages.forEach(mergeMessage)
+ }),
+ onRecvOfflineNewMessages((result) => {
+ if (result != null) result.messages.forEach(mergeMessage)
+ }),
+]
+
+function removeMessageListeners() {
+ subscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+`onRecvNewMessages` and `onRecvOfflineNewMessages` return `OpenIMMessageListResult | null`; its `messages` field is the array. The three single-message handlers return `OpenIMMessageItem | null`. Single and batch paths may describe the same message, so never insert by event count.
+
+Unlike the Wasm recommendation to select one canonical batch path for a known deployment, the native plugin exposes compatibility paths that may vary with Core delivery and recovery behavior. The application store can subscribe to all of them only because it uses one shared idempotent merge function.
+
+Messages that arrive after `setAppBackgroundStatus(true)` normally use an offline path. Set the status back to `false` on foreground entry. Reuse one merge function for offline and realtime delivery, filter by conversation, deduplicate by `clientMsgID`, and preserve chronological order.
+
+An online-only message has `isOnlineOnly: true` on the send. It is not stored in local SDK history and cannot be recovered through a history API. Use it only for transient hints or business notifications, and do not treat it as a reliable chat record.
+
+Decide separately whether an online-only item belongs in the visible chat view. If it is rendered, keep it out of durable pagination and make the temporary behavior clear to users.
+
+This page owns all five receive events. Resolve the target conversation first and then merge by `conversationID:clientMsgID`. A single application message store should own these global listeners. Call `removeMessageListeners()` when that login-scoped store is disposed.
+
+Revocation arrives through `onNewRecvMessageRevoked`; see [Revoke a message](/sdk/uniapp/message/managing-messages/revoke-a-message).
+
+## Load history when opening a conversation
+
+Events only describe newly delivered messages. Load a history snapshot when a conversation first opens, when the user pages upward, or when restoring gaps after a disconnect. See [Load older messages](/sdk/uniapp/message/retrieving-messages/load-older-messages). History and events can contain the same message, so use the same deduplication key for both.
+
+Do not register this global listener set every time a chat page opens. The page should only query its conversation snapshot; a login-scoped store owns the events. After login changes, clear the previous account's state and establish a new event scope.
+
+A history query does not trigger any of the receive events. Because pagination and realtime delivery may overlap, the history merge must use exactly the same `conversationID:clientMsgID` key as the global event store.
+
+## Mark a group conversation as read
+
+After the user opens a group chat and sees its latest messages, clear the conversation unread count as described in [Mark a conversation as read](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read). This is separate from member-level group read receipts. Conversation events eventually synchronize the list and total badge.
+
+## Verify the receive flow
+
+- Send from another logged-in account and verify that the foreground message renders once.
+- Set the app background state, send again, and verify offline merging before restoring foreground state.
+- Send an online-only message and verify that it is absent from local history.
+- Revoke a message and verify that the matching `clientMsgID` becomes revoked.
+- Mark the conversation as read and verify the conversation and total unread counts.
+
+When testing single and batch delivery, assert that each `clientMsgID` appears once rather than requiring one particular callback. Also verify balanced foreground/background calls and that old subscriptions stop affecting state after logout.
+
+## Related pages
+
+- [Message overview](/sdk/uniapp/message/overview-message)
+- [Send a message](/sdk/uniapp/message/sending-messages/send-message)
+- [Load older messages](/sdk/uniapp/message/retrieving-messages/load-older-messages)
+- [Mark a conversation as read](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read)
diff --git a/content/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx b/content/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx
new file mode 100644
index 0000000000..5f7f639bae
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx
@@ -0,0 +1,37 @@
+---
+title: 'Find messages by ID'
+description: 'OpenIM uni-app / uni-app x SDK guide for Find messages by ID.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/retrieving-messages/find-messages-by-id'
+---
+
+Keep both `conversationID` and `clientMsgID` when a search result, quoted message, or notification navigates to a message, then use `findMessageList()` to retrieve the locally synchronized record.
+
+## Parameters
+
+`findMessageList()` accepts an array of query groups:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `items[].conversationID` | `string` | Yes | Conversation that owns the requested messages. |
+| `items[].clientMsgIDList` | `string[]` | Yes | Client message IDs to find in that conversation. |
+
+```uts
+import { findMessageList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await findMessageList([
+ { conversationID, clientMsgIDList: [clientMsgID] },
+])
+
+const targetMessage = result?.findResultItems[0]?.messageList[0]
+```
+
+The Promise resolves to `OpenIMFindMessageResult | null`, containing `totalCount` and `findResultItems`. Each result item includes the `conversationID`, `conversationType`, conversation display snapshot, `messageCount`, and `messageList`.
+
+One call can query several conversations. Do not assume response items preserve input order; match by the result `conversationID` and each message's `clientMsgID`. A result can be missing when local data has not synchronized, the message was deleted, or the ID does not exist. This query does not emit message events. To retrieve records around a hit, see [Load message context](/sdk/uniapp/message/retrieving-messages/load-message-context).
diff --git a/content/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx b/content/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx
new file mode 100644
index 0000000000..8725de59ee
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx
@@ -0,0 +1,39 @@
+---
+title: 'Load message context'
+description: 'OpenIM uni-app / uni-app x SDK guide for Load message context.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/retrieving-messages/load-message-context'
+---
+
+When navigating from a search result or quoted message into chat context, use the complete `OpenIMMessageItem` you already obtained as the anchor. `fetchSurroundingMessages()` is Commercial.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `startMessage` | `OpenIMMessageItem` | Yes | Complete anchor message. |
+| `viewType` | `number` | Yes | Context direction defined by the server contract. |
+| `before` | `number` | Yes | Maximum number of messages before the anchor. |
+| `after` | `number` | Yes | Maximum number of messages after the anchor. |
+
+```uts
+import { fetchSurroundingMessages } from '@/uni_modules/unix-openim-sdk'
+
+const result = await fetchSurroundingMessages({
+ startMessage: targetMessage,
+ viewType: 0,
+ before: 20,
+ after: 20,
+})
+const surroundingMessages = result?.messages ?? []
+```
+
+On success, `result?.messages` is the surrounding `OpenIMMessageItem[]`. The uni-app / uni-app x field is `messages`, not the Wasm `messageList` field.
+
+`before` and `after` limit each side of the anchor. The result can contain fewer messages near a boundary or after deletions. It can also overlap realtime events, so deduplicate by `conversationID:clientMsgID` and preserve chronological order. Do not construct a fake anchor containing only an ID; first use [Find messages by ID](/sdk/uniapp/message/retrieving-messages/find-messages-by-id) when necessary.
diff --git a/content/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx b/content/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx
new file mode 100644
index 0000000000..c1668321cc
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx
@@ -0,0 +1,50 @@
+---
+title: 'Load message history'
+description: 'OpenIM uni-app / uni-app x SDK guide for Load message history.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/retrieving-messages/load-older-messages'
+---
+
+Use public `getAdvancedHistoryMessageList()` to establish the first snapshot when a chat opens. To load older records, pass the current earliest message's `clientMsgID` as the next cursor.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | Yes | Conversation whose history is being loaded. |
+| `startClientMsgID` | `string` | Yes | Paging anchor; pass an empty string for the first page. |
+| `count` | `number` | Yes | Number of messages to request. |
+| `lastMinSeq` | `number` or `null` | No | Minimum sequence returned by the previous page. |
+
+```uts
+import { getAdvancedHistoryMessageList } from '@/uni_modules/unix-openim-sdk'
+
+const page = await getAdvancedHistoryMessageList({
+ conversationID,
+ startClientMsgID: oldestMessage?.clientMsgID ?? '',
+ count: 30,
+ lastMinSeq,
+})
+```
+
+## Return result
+
+The Promise resolves to `OpenIMAdvancedHistoryMessageListResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `messageList` | `OpenIMMessageItem[]` | Messages in this page. |
+| `lastMinSeq` | `number` | Minimum sequence to send with the next request. |
+| `isEnd` | `boolean` | Whether the history boundary in this direction was reached. |
+| `errCode` | `number` | History result status code. |
+| `errMsg` | `string` | Description associated with the status code. |
+
+Merge `messageList` only when `errCode` reports success; handle a rejected Promise through the normal error path. Scope the list by `conversationID` and deduplicate by `clientMsgID`. History queries do not emit new-message events.
+
+Commercial `getHistoryMessageList()` Commercial additionally requires `isReverse` and supports optional `viewType` and `lastMinSeq`. Direction is a parameter, not a separate reverse-history API.
diff --git a/content/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx b/content/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx
new file mode 100644
index 0000000000..e20049eb32
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx
@@ -0,0 +1,135 @@
+---
+title: 'Search messages'
+description: 'OpenIM uni-app / uni-app x SDK guide for Search messages.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/searching-messages/search-messages'
+---
+
+`searchLocalMessages()` searches messages already synchronized into the current user's local database. For a group, pass the group's `conversationID`, not the `groupID` used when sending. If you only have the group ID, first obtain the conversation ID with [Get a conversation ID](/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id).
+
+Use a backend search service for cross-user audit, complete server-side history, complex permission filtering, or global ranking. It can return `conversationID` and `clientMsgID` so the client can locate each hit.
+
+## Create a search query
+
+`keywordList` accepts one or more terms. A normal search box represents one input, so trim it and reject empty values before calling the SDK.
+
+```uts
+import {
+ OpenIMMessageTypeAtText,
+ OpenIMMessageTypeText,
+ searchLocalMessages,
+ type OpenIMMessageItem,
+ type OpenIMSearchMessageResult,
+} from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchLocalMessages({
+ conversationID,
+ keywordList: [keyword.trim()],
+ keywordListMatchType: 0,
+ senderUserIDList: [],
+ messageTypeList: [OpenIMMessageTypeText, OpenIMMessageTypeAtText],
+ searchTimePosition: 0,
+ searchTimePeriod: 0,
+ pageIndex: 1,
+ count: 20,
+})
+```
+
+## Advanced search
+
+Narrow the query by sender, content type, and time window. In `OpenIMSearchLocalMessagesParams`, every filter and paging field except `conversationID` is required. Use an empty array for an unrestricted list and the server-defined `0` values when time is unrestricted.
+
+```uts
+const result = await searchLocalMessages({
+ conversationID,
+ keywordList: ['release'],
+ keywordListMatchType: 0,
+ senderUserIDList: [senderUserID],
+ messageTypeList: [OpenIMMessageTypeText],
+ searchTimePosition,
+ searchTimePeriod,
+ pageIndex: 1,
+ count: 20,
+})
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `conversationID` | `string` or `null` | No | Conversation to search; omit it to search the current locally visible scope. |
+| `keywordList` | `string[]` | Yes | Search terms. |
+| `keywordListMatchType` | `number` | Yes | Multi-keyword matching mode defined by the SDK contract. |
+| `senderUserIDList` | `string[]` | Yes | Restrict to these senders; use an empty array for no restriction. |
+| `messageTypeList` | `OpenIMMessageType[]` | Yes | Restrict to these content types; use an empty array for no restriction. |
+| `searchTimePosition` | `number` | Yes | End of the search window, as a Unix timestamp in seconds. |
+| `searchTimePeriod` | `number` | Yes | Number of seconds to search backward from the end position. |
+| `pageIndex` | `number` | Yes | Page number; the first page is `1`. |
+| `count` | `number` | Yes | Number of results per page. |
+
+Add the appropriate `OpenIMMessageType` constants when the UI searches images, files, or custom messages. Matching modes, time units, and page numbering must follow the SDK and server contract.
+
+## Handle paginated results
+
+The Promise resolves to `OpenIMSearchMessageResult | null`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `totalCount` | `number` | Total number of messages matching the query. |
+| `searchResultItems` | `OpenIMSearchMessageResultItem[]` | Results grouped by conversation. |
+
+Each result item contains:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `conversationID` | `string` | Owning conversation. |
+| `conversationType` | `OpenIMSessionType` | Conversation type. |
+| `showName`, `faceURL` | `string` | Conversation display name and avatar snapshot. |
+| `latestMsgSendTime` | `number` or `null` | Latest message time in this result group. |
+| `messageCount` | `number` | Number of matching messages in the group. |
+| `messageList` | `OpenIMMessageItem[]` | Matching messages. |
+
+Preserve both the conversation ID and message ID when flattening grouped results:
+
+```uts
+type SearchMessageRow = {
+ conversationID : string
+ clientMsgID : string
+ message : OpenIMMessageItem
+}
+
+function toSearchRows(result : OpenIMSearchMessageResult) : Array {
+ const rows : Array = []
+ result.searchResultItems.forEach((item) => {
+ item.messageList.forEach((message) => {
+ const clientMsgID = message.clientMsgID
+ if (clientMsgID != null) {
+ rows.push({ conversationID: item.conversationID, clientMsgID, message })
+ }
+ })
+ })
+ return rows
+}
+```
+
+Keep all filters unchanged while incrementing `pageIndex`. When any condition changes, reset the page to `1` and clear old rows. Deduplicate by `conversationID:clientMsgID`; do not persist selection by array position. A search does not emit message events.
+
+## Handle changes to search results
+
+A hit can be revoked or deleted while the search page is open, and newly synchronized messages can change the result set. Use the shared handlers described in [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages), [Delete saved messages](/sdk/uniapp/message/managing-messages/delete-saved-messages), and [Revoke a message](/sdk/uniapp/message/managing-messages/revoke-a-message). This page owns querying and pagination, not duplicate event registrations.
+
+Navigate with the result's `conversationID` and `clientMsgID`. To display nearby chat records, use the complete hit as the start point for [Load message context](/sdk/uniapp/message/retrieving-messages/load-message-context), rather than assembling context with `findMessageList()`.
+
+Re-run the current page query when the UI needs a fresh snapshot. Search Promises, event increments, and reconciliation queries are independent. Clear previous-account search state after login changes.
+
+## Related pages
+
+- [Find messages by ID](/sdk/uniapp/message/retrieving-messages/find-messages-by-id)
+- [Load older messages](/sdk/uniapp/message/retrieving-messages/load-older-messages)
+- [Receive messages](/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx b/content/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx
new file mode 100644
index 0000000000..643ff5ff0f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx
@@ -0,0 +1,38 @@
+---
+title: 'Send an uploaded media message'
+description: 'OpenIM uni-app / uni-app x SDK guide for Send an uploaded media message.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/sending-messages/send-message-not-oss'
+---
+
+Use `sendMessageNotOss()` when an image, audio, video, or file was already uploaded by your business service and the message contains its URL. This avoids the SDK upload phase.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `recvID` | `string` | Conditional | Receiver user ID for a single chat; otherwise pass an empty string. |
+| `groupID` | `string` | Conditional | Group ID for a group chat; otherwise pass an empty string. |
+| `message` | `OpenIMMessageItem` | Yes | Outgoing message returned by a by-URL create API with complete remote resource metadata. |
+| `offlinePushInfo` | `OpenIMOfflinePush` or `null` | No | Offline-push title, description, and platform settings. |
+| `isOnlineOnly` | `boolean` or `null` | No | Deliver only to online clients; such a message is not stored in local history. |
+
+```uts
+import { sendMessageNotOss } from '@/uni_modules/unix-openim-sdk'
+
+const sentMessage = await sendMessageNotOss({
+ recvID: receiverUserID,
+ groupID: '',
+ message: urlMessage,
+})
+```
+
+The URL, size, type, dimensions, and duration must come from the real upload result. The Promise resolves directly to the server-confirmed `OpenIMMessageItem`; merge it by `clientMsgID`.
+
+This method does not upload resources and must not receive a message that only contains a local file path, or recipients may be unable to access it. Send local-file messages with `sendMessage()`.
diff --git a/content/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx b/content/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx
new file mode 100644
index 0000000000..5047711844
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx
@@ -0,0 +1,41 @@
+---
+title: 'Send a message'
+description: 'Send a pending message object with the uni-app / uni-app x SDK.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/message/sending-messages/send-message'
+---
+
+`sendMessage()` sends an `OpenIMMessageItem` returned by a message creation API. For a one-to-one chat, set only `recvID`; for a group chat, set only `groupID`.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `recvID` | `string` | Conditional | Recipient's user ID for a one-to-one chat. Pass an empty string for a group chat. |
+| `groupID` | `string` | Conditional | Target group ID for a group chat. Pass an empty string for a one-to-one chat. |
+| `message` | `OpenIMMessageItem` | Yes | Pending message object to send. |
+| `offlinePushInfo` | `OpenIMOfflinePush` | No | Offline push configuration. |
+| `isOnlineOnly` | `boolean` | No | Whether to deliver only to online clients. Online-only messages are not stored in local history. |
+
+```uts
+import { sendMessage } from '@/uni_modules/unix-openim-sdk'
+
+const sentMessage = await sendMessage({
+ recvID: receiverUserID,
+ groupID: '',
+ message,
+ isOnlineOnly: false,
+})
+```
+
+When the Promise resolves, the returned value is the server-confirmed `OpenIMMessageItem`; the native UTS API does not wrap it in `{ data }`. On the sending client, replace the local pending item by `clientMsgID` with the returned object. For common and content-specific fields, see [Message overview](/sdk/uniapp/message/overview-message).
+
+Other clients receive the message through new-message events. Promise completion, arrival of the receiving event, and reconciliation through a history query are separate stages. Keep a failed pending message under the same `clientMsgID` when offering a retry unless the product deliberately creates a new send.
+
+If the resource has already been uploaded by your application and stored in a URL-based message, use [`sendMessageNotOss()`](/sdk/uniapp/message/sending-messages/send-message-not-oss).
diff --git a/content/docs/chat/sdk/uniapp/overview.mdx b/content/docs/chat/sdk/uniapp/overview.mdx
index 0c0f957179..6f24ca863e 100644
--- a/content/docs/chat/sdk/uniapp/overview.mdx
+++ b/content/docs/chat/sdk/uniapp/overview.mdx
@@ -1,36 +1,65 @@
---
-title: 'OpenIM SDK for uni-app'
-description: 'OpenIM uni-app SDK entry point for App, H5, and supported mini-app targets.'
+title: 'OpenIM SDK for uni-app / uni-app x'
+description: 'Integrate unix-openim-sdk into Android, iOS, and commercial HarmonyOS Apps built with uni-app or uni-app x.'
product: 'sdk'
context: 'chat/sdk/uniapp'
template: 'overview'
-status: 'draft'
-lastUpdated: '2026-06-30'
+status: 'published'
+lastUpdated: '2026-08-13'
version: 'v4'
platform: 'uniapp'
sourcePath: '/sdk/uniapp/overview'
---
-## Overview
+OpenIM `unix-openim-sdk` is a native UTS plugin that provides user, friend, conversation, group, message, event, and local-database capabilities to uni-app and uni-app x Apps. The plugin owns the only OpenIM Core in the host process. Import flat functions from `@/uni_modules/unix-openim-sdk`; do not create an SDK instance.
-Use the uni-app SDK when the same OpenIM integration needs to cover App, H5, and supported mini-app targets from a uni-app codebase. The integration should keep authentication, user identity, message creation, conversation state, and event handling aligned with the rest of the OpenIM SDK family.
+## Supported environments
-## Platform scope
+| Host | Android | iOS | HarmonyOS |
+| --- | --- | --- | --- |
+| uni-app Vue 2 / Vue 3 | Supported, API 21+ | Supported, iOS 14+ | Not currently declared |
+| uni-app x | Supported, API 21+ | Supported, iOS 14+ | Commercial, API 24 |
+| Web / mini apps | Not supported | Not supported | Not supported |
-- App and H5 builds should use the SDK package and runtime adapter recommended by the OpenIM release you deploy.
-- Mini-app targets need additional validation for storage, network, file upload, and websocket behavior.
-- Tokens should still be issued by a trusted backend. Do not generate or hard-code user tokens in the client bundle.
+Use the HBuilderX/uni-app `5.23` series. Android and iOS require a custom base or local native project containing the plugin's native dependencies; the standard base cannot load them.
-## Core integration path
+## Public and commercial capabilities
-1. Install the SDK package that matches your OpenIM Server version.
-2. Initialize the client with `apiAddr`, `wsAddr`, the current `userID`, and a backend-issued token.
-3. Register connection and message events before calling `login()`.
-4. Send the first text message, then validate message receipt in another signed-in client.
-5. Add platform-specific handling for file messages, push notifications, and background lifecycle.
+This documentation covers both public capabilities and commercial extensions. APIs, events, and fields carrying a **Commercial** badge require the commercial `unix-openim-sdk` and a matching OpenIMServer deployment. Edition and platform support are separate: a public API can still return `platform-unsupported` on a particular platform.
-## Related SDKs
+Commercial extensions include signaling, SDK session snapshots, translation, and selected message or conversation features. `onSDKSessionChanged` is synthesized by the plugin from initialization, login, logout, token, and account transitions. It is not a native OpenIM Core event.
-- [WASM SDK](/sdk/wasm/overview) for browser and WebAssembly-oriented API examples.
-- [Flutter SDK](/sdk/flutter/overview) when mobile and desktop should be handled through Flutter.
-- [React Native SDK](/sdk/react-native/overview) when the app is built with React Native.
+## Integration sequence
+
+1. Install `unix-openim-sdk` and prepare a custom base or local native project.
+2. Call `initSDK()` with `apiAddr`, `wsAddr`, platform, logging, and `systemType`.
+3. Save the subscription handles returned by connection, message, and business event listeners.
+4. Obtain the current user's `userID` and token from a trusted backend, then call `login(userID, token)`.
+5. Wait for `onConnectSuccess`, load snapshots, and apply subsequent events incrementally.
+6. On sign-out, call `logout()` and release listeners with `off(subscription)`. Call `unInitSDK()` only when the App no longer uses the SDK.
+
+## Invocation model
+
+Promises resolve directly to business values; there is no Web SDK `{ data }` wrapper. Event registration synchronously returns an `OpenIMSDKEventSubscription`:
+
+```uts
+import { off, onRecvNewMessage } from '@/uni_modules/unix-openim-sdk'
+
+const messageSubscription = onRecvNewMessage((message) => {
+ console.log(message.clientMsgID)
+})
+
+off(messageSubscription)
+```
+
+Do not use `offAll()` for normal scoped cleanup. It removes every listener owned by the plugin instance and is intended only for full App teardown or controlled test reset.
+
+## Security boundaries
+
+- Obtain user tokens from a trusted backend. Never embed administrator tokens, secrets, or fixed user tokens in the App.
+- Physical devices must use reachable `apiAddr` and `wsAddr` values; `localhost` points to the device itself.
+- Do not open, move, or modify the SDK-managed database directly.
+- Redact tokens, full private-message bodies, and commercial credentials from logs and reports.
+- AV Runtime is a separate UTS plugin. It reuses this plugin's single login session but is not part of the public IM API.
+
+Continue with [Before you start](/sdk/uniapp/getting-started/before-you-start), [Install, initialize, and inspect the SDK](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk), and [Event overview](/sdk/uniapp/events/overview-events).
diff --git a/content/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx b/content/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx
new file mode 100644
index 0000000000..2f07d6939d
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Add a user to the blacklist'
+description: 'Add a selected user to the current account blacklist.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/blacklist/add-black'
+---
+
+```uts
+import { addBlack } from '@/uni_modules/unix-openim-sdk'
+
+await addBlack({ toUserID: 'user_b', ex: '' })
+```
+
+Confirm through `onBlackAdded` or a fresh blacklist snapshot. Never store tokens, private moderation evidence, or administrator-only data in `ex`. Adding a blacklist entry does not delete local history; conversation hiding and friendship removal are separate operations.
diff --git a/content/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx b/content/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx
new file mode 100644
index 0000000000..f69be80115
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx
@@ -0,0 +1,101 @@
+---
+title: 'Get the blacklist'
+description: 'Load the blacklist and process add and remove events.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/blacklist/get-black-list'
+---
+
+The OpenIMSDK blacklist records users that the current account has blocked. Use `getBlackList()` to build blacklist settings, show relationship state on profile cards, and restrict chat entry points.
+
+Blacklist and group management are separate capabilities. Use group-member APIs to mute, remove, or change a group member's role; `getBlackList()` reads only the current user's personal blacklist.
+
+## Get the blacklist
+
+Call `getBlackList()` after initialization, login, and connection readiness. The Promise resolves directly to `OpenIMBlackListResult` or `null`; an empty `blackUsers` array means there are no blocked users.
+
+```uts
+import { getBlackList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getBlackList()
+const blockedUsers = result?.blackUsers ?? []
+replaceBlockedUsers(blockedUsers)
+```
+
+Profile cards, conversation menus, and contact lists normally need only a set of blocked `userID` values. Use `userID` as the key; nickname and avatar are presentation fields.
+
+```uts
+const blockedUserIDs = new Set()
+blockedUsers.forEach((user) => blockedUserIDs.add(user.userID))
+
+function isBlocked(userID : string) : boolean {
+ return blockedUserIDs.has(userID)
+}
+```
+
+The commercial edition also exposes `getBlacks()` Commercial, whose wrapper field is named `blacks`:
+
+```uts
+import { getBlacks } from '@/uni_modules/unix-openim-sdk'
+
+const commercialResult = await getBlacks()
+replaceBlockedUsers(commercialResult?.blacks ?? [])
+```
+
+Do not mix the `blackUsers` and `blacks` result shapes. Choose the entry that matches the installed edition rather than querying two snapshots.
+
+## Blacklist item fields
+
+Every `blackUsers` item is an `OpenIMBlackUserItem`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `userID` | `string` | Blocked user's ID and the merge key for the list and events. |
+| `nickname` | `string` | Display nickname. |
+| `faceURL` | `string` | Avatar URL. |
+| `ownerUserID` | `string` | Owner of this blacklist relationship, normally the signed-in user. |
+| `operatorUserID` | `string` | User that performed the block operation. |
+| `createTime` | `number` | Time when the relationship was created. |
+| `addSource` | `number` | Source value for the relationship. |
+| `ex` | `string` | Application extension; parse only a confirmed format. |
+| `attachedInfo` | `string` | SDK attachment data; parse only a confirmed contract. |
+
+If the UI also displays public profile or friend remark data, merge by `userID` while preserving the distinct sources of `OpenIMBlackUserItem`, `OpenIMFriendUserItem`, and `OpenIMPublicUserItem`.
+
+## Results and incremental changes
+
+Replace the current blacklist snapshot with the returned array after `getBlackList()` succeeds. The query itself does not trigger add or delete events. Requery on first entry, re-login, and explicit refresh.
+
+This page is the complete owner for `onBlackAdded` and `onBlackDeleted`:
+
+```uts
+import {
+ off,
+ onBlackAdded,
+ onBlackDeleted,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const blacklistSubscriptions : Array = [
+ onBlackAdded((user) => {
+ upsertBlockedUser(user.userID, user)
+ }),
+ onBlackDeleted((user) => {
+ removeBlockedUser(user.userID)
+ }),
+]
+
+function releaseBlacklistSubscriptions() {
+ blacklistSubscriptions.forEach((subscription) => off(subscription))
+ blacklistSubscriptions.length = 0
+}
+```
+
+Merge events by `userID`. After blocking, the other user cannot send to the current user, but the current user can still send to that user. Enforce a bidirectional product restriction separately if required. Blacklist and friendship remain independent state; do not assume that blocking removes a friend.
+
+Call `releaseBlacklistSubscriptions()` on logout, account switch, or destruction of the blacklist state layer.
diff --git a/content/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx b/content/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx
new file mode 100644
index 0000000000..81a3acf17a
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Remove a user from the blacklist'
+description: 'Remove the selected blacklist relationship.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/blacklist/remove-black'
+---
+
+```uts
+import { removeBlack } from '@/uni_modules/unix-openim-sdk'
+
+await removeBlack('user_b')
+```
+
+Confirm through `onBlackDeleted` or a new snapshot. Removal does not restore a deleted friendship or recreate conversations. If repeated removal returns a relation-state error, refresh the snapshot instead of retrying indefinitely.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx
new file mode 100644
index 0000000000..fab3beece6
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Accept a friend request'
+description: 'Accept a friend request from a selected user.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/accept-friend-application'
+---
+
+```uts
+import { acceptFriendApplication } from '@/uni_modules/unix-openim-sdk'
+
+await acceptFriendApplication({ toUserID: 'user_b', handleMsg: 'Accepted' })
+```
+
+`toUserID` identifies the other party. Update the request and friend stores independently from events or fresh queries. Disable duplicate actions while the request is pending; repeated handling can return a state error.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx
new file mode 100644
index 0000000000..a307b20ea9
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Send a friend request'
+description: 'Send a friend request to another user.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/add-friend'
+---
+
+```uts
+import { addFriend } from '@/uni_modules/unix-openim-sdk'
+
+await addFriend({ toUserID: 'user_b', reqMsg: 'Hello, I am Alice', ex: '' })
+```
+
+`reqMsg` is visible to the recipient. Keep tokens, internal permissions, and sensitive data out of both it and `ex`. Promise completion means the request was submitted, not accepted; refresh the sent-request list for its later status.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx
new file mode 100644
index 0000000000..ccd6e25dc1
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx
@@ -0,0 +1,39 @@
+---
+title: 'Delete friend-request records'
+description: 'Commercially delete selected friend-request records in a batch.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/delete-friend-requests'
+---
+
+`deleteFriendRequests()` is Commercial.
+
+## Parameters
+
+The operation receives `OpenIMDeleteFriendRequestsParams`. Every item in `friendRequests` contains:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `friendRequests[].fromUserID` | `string` | Yes | User ID of the applicant. |
+| `friendRequests[].toUserID` | `string` | Yes | User ID of the recipient. |
+
+```uts
+import { deleteFriendRequests } from '@/uni_modules/unix-openim-sdk'
+
+await deleteFriendRequests({
+ friendRequests: [
+ { fromUserID: 'user_a', toUserID: 'user_b' },
+ ],
+})
+```
+
+Each `OpenIMSimpleFriendRequest` identifies an exact request by `fromUserID:toUserID`. Deleting request history is not the same as rejecting an application and does not remove an established friendship. Use the friend deletion API to end a friendship.
+
+Promise success means that the deletion request completed. `onFriendApplicationDeleted` can arrive afterward; the complete listener is on [Get received friend applications](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient), where records are removed by `fromUserID:toUserID`.
+
+Confirm batch targets in the UI. After failure, do not assume that every or no item was deleted; requery both received and sent application lists to reconcile with the server snapshot.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx
new file mode 100644
index 0000000000..83eec93eb2
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx
@@ -0,0 +1,34 @@
+---
+title: 'List sent friend requests'
+description: 'Read friend requests sent by the current account.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant'
+---
+
+`getFriendApplicationListAsApplicant()` queries friend applications sent by the current account and returns `OpenIMFriendApplicationListResult` or `null`.
+
+## Parameters
+
+The parameter object can be omitted. To request an explicit page, use:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `offset` | `number` or `null` | No | Pagination offset; use `0` for the first page. |
+| `count` | `number` or `null` | No | Number of applications requested. |
+
+```uts
+import { getFriendApplicationListAsApplicant } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getFriendApplicationListAsApplicant({ offset: 0, count: 50 })
+renderSentApplications(result?.applications ?? [])
+```
+
+After Promise success, `applications` contains the current page of sent `OpenIMFriendApplicationItem[]`. See [Get received friend applications](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient) for the fields. This query does not trigger an application event.
+
+Pagination can change while it is loading. Merge events by `fromUserID:toUserID` instead of array position. If an event arrives during paging, reset pagination and requery when necessary. Complete friend-application listeners live on the received-applications page. Rebuild this snapshot after App restoration, re-login, or any period in which events may have been missed.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx
new file mode 100644
index 0000000000..10211228fd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx
@@ -0,0 +1,92 @@
+---
+title: 'List received friend requests'
+description: 'Read received requests and process add, accept, reject, and delete events.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient'
+---
+
+`getFriendApplicationListAsRecipient()` queries applications sent to the current account. The uni-app / uni-app x `OpenIMApplicationListParams` has only pagination fields and does not expose Wasm's `handleResults` filter. Filter by `handleResult` after the query if the UI should show only pending applications.
+
+## Parameters
+
+The parameter object can be omitted. To request an explicit page, use:
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `offset` | `number` or `null` | No | Pagination offset; use `0` for the first page. |
+| `count` | `number` or `null` | No | Number of applications requested. |
+
+```uts
+import { getFriendApplicationListAsRecipient } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getFriendApplicationListAsRecipient({
+ offset: 0,
+ count: 20,
+})
+
+const applications = result?.applications ?? []
+replaceReceivedApplications(applications)
+```
+
+The Promise resolves directly to `OpenIMFriendApplicationListResult` or `null`. `applications` contains the current page of `OpenIMFriendApplicationItem[]`; querying does not itself trigger an application event.
+
+### Friend-application fields
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `fromUserID` | `string` | Applicant's user ID. |
+| `fromNickname` | `string` | Applicant nickname snapshot. |
+| `fromFaceURL` | `string` | Applicant avatar snapshot. |
+| `toUserID` | `string` | Recipient user ID. |
+| `toNickname` | `string` | Recipient nickname snapshot. |
+| `toFaceURL` | `string` | Recipient avatar snapshot. |
+| `reqMsg` | `string` | Application message. |
+| `handleResult` | `number` | Processing result: `0` pending, `1` accepted, `-1` rejected. |
+| `handlerUserID` | `string` | Processing user ID; can be empty while pending. |
+| `handleMsg` | `string` | Processing comment. |
+| `handleTime` | `number` | Processing time; do not treat it as valid while pending. |
+| `createTime` | `number` | Record creation time. |
+| `ex` | `string` | Application extension string. |
+| `attachedInfo` | `string` | SDK attachment data; parse only a confirmed contract. |
+
+Use `fromUserID:toUserID` as the merge key. Nicknames and avatars are snapshots from application creation or synchronization. Query the relevant user's current profile with `getUsersInfo()` when freshness matters.
+
+## Synchronize friend-application changes
+
+This page is the complete owner for the added, accepted, rejected, and deleted events. Register them before loading the snapshot.
+
+```uts
+import {
+ getFriendApplicationListAsRecipient,
+ off,
+ onFriendApplicationAccepted,
+ onFriendApplicationAdded,
+ onFriendApplicationDeleted,
+ onFriendApplicationRejected,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const subscriptions : Array = [
+ onFriendApplicationAdded((item) => mergeFriendApplication(item.fromUserID, item.toUserID, item)),
+ onFriendApplicationAccepted((item) => mergeFriendApplication(item.fromUserID, item.toUserID, item)),
+ onFriendApplicationRejected((item) => mergeFriendApplication(item.fromUserID, item.toUserID, item)),
+ onFriendApplicationDeleted((item) => removeFriendApplication(item.fromUserID, item.toUserID)),
+]
+const page = await getFriendApplicationListAsRecipient({ offset: 0, count: 50 })
+replaceReceivedApplications(page?.applications ?? [])
+
+function releaseFriendApplicationSubscriptions() {
+ subscriptions.forEach((subscription) => off(subscription))
+ subscriptions.length = 0
+}
+```
+
+Route an event to the sent or received list according to whether the current user is `toUserID`. An accepted application creates a friendship that is merged through `onFriendAdded` on [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page). Pagination can be reset when events alter the list.
+
+Accept or reject a received application through the corresponding API; never mutate `handleResult` locally to imitate server success. Call `releaseFriendApplicationSubscriptions()` on logout, account switch, or destruction of the friend-application state layer.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx
new file mode 100644
index 0000000000..cc94c71cb6
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx
@@ -0,0 +1,21 @@
+---
+title: 'Get unhandled friend-request count'
+description: 'Read the unhandled count displayed on the friend-request entry.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count'
+---
+
+```uts
+import { getFriendApplicationUnhandledCount } from '@/uni_modules/unix-openim-sdk'
+
+const count = await getFriendApplicationUnhandledCount({ offset: 0, count: 100 })
+renderApplicationBadge(count ?? 0)
+```
+
+Use pagination limits agreed with the server. A nullable result is not a permanently cacheable zero. Requery after request add, accept, reject, or delete events rather than maintaining only local `+1/-1` counters across devices.
diff --git a/content/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx b/content/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx
new file mode 100644
index 0000000000..e73aa4df79
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Reject a friend request'
+description: 'Reject a friend request from a selected user.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friend-applications/refuse-friend-application'
+---
+
+```uts
+import { refuseFriendApplication } from '@/uni_modules/unix-openim-sdk'
+
+await refuseFriendApplication({ toUserID: 'user_b', handleMsg: 'Not now' })
+```
+
+The handling message may be visible to the requester, so omit internal risk decisions and sensitive data. Confirm through `onFriendApplicationRejected` or a fresh request query. Acceptance and rejection are mutually exclusive; lock the UI action while one request is active.
diff --git a/content/docs/chat/sdk/uniapp/user/friends/check-friend.mdx b/content/docs/chat/sdk/uniapp/user/friends/check-friend.mdx
new file mode 100644
index 0000000000..6c1251bdb4
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friends/check-friend.mdx
@@ -0,0 +1,21 @@
+---
+title: 'Check friendship'
+description: 'Check the friendship between the current account and selected users.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friends/check-friend'
+---
+
+```uts
+import { checkFriend } from '@/uni_modules/unix-openim-sdk'
+
+const result = await checkFriend(['user_a', 'user_b'])
+result?.result.forEach((relation) => cacheFriendRelation(relation.userID, relation.result))
+```
+
+Read results by `userID`, not array position, and interpret relation values through exported constants rather than numeric literals. This query does not create a friendship; use `addFriend()` when appropriate.
diff --git a/content/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx b/content/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx
new file mode 100644
index 0000000000..d8689c535b
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Delete a friend'
+description: 'Remove a friendship with a selected user.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friends/delete-friend'
+---
+
+```uts
+import { deleteFriend } from '@/uni_modules/unix-openim-sdk'
+
+await deleteFriend('user_a')
+```
+
+Confirm final state through `onFriendDeleted` or a fresh friend snapshot. Deleting a friend does not delete conversations/history or add the user to the blacklist. Implement those as explicit operations with a defined compensation order, and ask for user confirmation first.
diff --git a/content/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx b/content/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx
new file mode 100644
index 0000000000..92f027d8ea
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx
@@ -0,0 +1,80 @@
+---
+title: 'Get the friend list'
+description: 'Page through the current user’s friend list with the uni-app / uni-app x SDK.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friends/get-friend-list-page'
+---
+
+Register friend events before the initial query, then call `getFriendListPage()` to establish the current snapshot.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `offset` | `number` | Yes | Pagination offset. Pass `0` for the first page. |
+| `count` | `number` | Yes | Number of friends to request. |
+| `filterBlack` | `boolean` | No | Whether to exclude blacklisted users from the results. |
+
+```uts
+import { getFriendListPage } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getFriendListPage({
+ offset: 0,
+ count: 50,
+ filterBlack: true,
+})
+```
+
+After the Promise succeeds, `result?.friends` is the current page of `OpenIMFriendUserItem[]`. Increase `offset` by the requested item count to load the next page. Reset pagination after a friend is added or removed. The native API returns `OpenIMFriendListResult | null` directly; there is no `{ data }` wrapper.
+
+### Friend profile fields
+
+`OpenIMFriendUserItem` describes the current account's relationship with one friend:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `userID` | `string` | The friend's user ID and the stable identifier in the friend list. |
+| `nickname` | `string` | The friend's account-level nickname. |
+| `faceURL` | `string` | The friend's account-level avatar URL. |
+| `remark` | `string` | A remark the current account assigned to this friend. |
+| `isPinned` | `boolean` | Whether the friend is pinned in the contacts list. |
+| `ownerUserID` | `string` | The user ID that owns this friendship, normally the current account. |
+| `operatorUserID` | `string` | The user ID that created or updated the relationship. |
+| `addSource` | `number` | Value describing the source through which the friendship was added. |
+| `createTime` | `number` | Time when the friendship was created. |
+| `ex` | `string` | Friendship extension string. |
+| `attachedInfo` | `string` | SDK attachment data. Parse it only according to a confirmed application contract. |
+
+`nickname` and `faceURL` are snapshots of the account profile. `remark`, `isPinned`, `ex`, and `attachedInfo` belong to the friendship. Do not overwrite a non-friend's `OpenIMPublicUserItem` with an `OpenIMFriendUserItem`, and do not write a friend remark back to the account nickname.
+
+## Synchronize friend changes
+
+This page owns the complete listeners for `onFriendAdded`, `onFriendInfoChanged`, and `onFriendDeleted`. The query establishes a snapshot; events merge incremental changes by `userID`.
+
+```uts
+import {
+ off,
+ onFriendAdded,
+ onFriendDeleted,
+ onFriendInfoChanged,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const friendSubscriptions : Array = [
+ onFriendAdded((friend) => mergeFriend(friend.userID, friend)),
+ onFriendInfoChanged((friend) => mergeFriend(friend.userID, friend)),
+ onFriendDeleted((friend) => removeFriend(friend.userID)),
+]
+
+function removeFriendListeners() {
+ friendSubscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+Call `removeFriendListeners()` when signing out, switching accounts, or destroying the contacts state layer.
diff --git a/content/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx b/content/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx
new file mode 100644
index 0000000000..3cdb5b2870
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx
@@ -0,0 +1,24 @@
+---
+title: 'Get selected friend profiles'
+description: 'Read friendship details for selected user IDs.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friends/get-specified-friends-info'
+---
+
+```uts
+import { getSpecifiedFriendsInfo } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSpecifiedFriendsInfo({
+ userIDList: ['user_a', 'user_b'],
+ filterBlack: false,
+})
+const friends = result?.friends ?? []
+```
+
+The result can be shorter or differently ordered. Map it by `userID`; missing users may not be friends, may be filtered, or may be inaccessible. `filterBlack` changes this result only and never removes blacklist relationships.
diff --git a/content/docs/chat/sdk/uniapp/user/friends/search-friends.mdx b/content/docs/chat/sdk/uniapp/user/friends/search-friends.mdx
new file mode 100644
index 0000000000..7fb5797a8c
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friends/search-friends.mdx
@@ -0,0 +1,41 @@
+---
+title: 'Search friends'
+description: 'Search current friends by ID, nickname, or remark.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friends/search-friends'
+---
+
+`searchFriends()` searches only current friends, not every server user.
+
+Use the boolean fields to choose which friend attributes are matched. The recommended flow uses one trimmed, non-empty keyword; reject an empty search before calling the SDK.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `keywordList` | `string[]` | Yes | Search keywords. The current flow uses the first non-empty keyword. |
+| `isSearchUserID` | `boolean` | Yes | Whether to match friend user IDs. |
+| `isSearchNickname` | `boolean` | Yes | Whether to match friend nicknames. |
+| `isSearchRemark` | `boolean` | Yes | Whether to match remarks set by the current user. |
+
+```uts
+import { searchFriends } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchFriends({
+ keywordList: ['Alice'],
+ isSearchUserID: true,
+ isSearchNickname: true,
+ isSearchRemark: true,
+})
+renderFriends(result?.friends ?? [])
+```
+
+The Promise resolves directly to `OpenIMFriendListResult` or `null`; `friends` contains `OpenIMFriendUserItem[]`. See [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page) for friend fields.
+
+Search results are a snapshot for the current query. They do not modify friend profiles or server indexes and must not replace the full friend list. Link each result to existing friend state by `userID` and continue merging friend events. Use [Get specified friend information](/sdk/uniapp/user/friends/get-specified-friends-info) when the target friend IDs are already known.
diff --git a/content/docs/chat/sdk/uniapp/user/friends/update-friends.mdx b/content/docs/chat/sdk/uniapp/user/friends/update-friends.mdx
new file mode 100644
index 0000000000..79371e5f48
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/friends/update-friends.mdx
@@ -0,0 +1,47 @@
+---
+title: 'Update friend details'
+description: 'Update friend remarks, pinned state, or extension values.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/friends/update-friends'
+---
+
+`updateFriends()` updates selected fields for one or more friendships.
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `friendUserIDs` | `string[]` | Yes | Friend IDs to update. The same values are applied to every target. |
+| `remark` | `string` or `null` | No | New friend remark. |
+| `isPinned` | `boolean` or `null` | No | Whether to pin the friends. |
+| `ex` | `string` or `null` | No | New extension string; completely replaces the old value. |
+
+```uts
+import { updateFriends } from '@/uni_modules/unix-openim-sdk'
+
+await updateFriends({
+ friendUserIDs: ['user_a', 'user_b'],
+ remark: 'Project team',
+ isPinned: true,
+})
+```
+
+`friendUserIDs` must not be empty, and at least one update field must be present. If different friends need different values, call the operation separately. `ex` is a complete replacement string and is not merged as JSON by the SDK.
+
+Promise success means that the update request completed, not that the friend event arrived. Merge final state by `userID` from `onFriendInfoChanged` on [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page), or requery when reconciliation is needed.
+
+The commercial single-user alternative uses `pinned`:
+
+```uts
+import { updateFriend } from '@/uni_modules/unix-openim-sdk'
+
+await updateFriend({ userID: 'user_a', pinned: true, remark: 'Owner' })
+```
+
+`updateFriend()` addresses one `userID` and names the pin field `pinned`; `remark` and `ex` remain complete replacement values. Do not race `updateFriends()` and the Commercial `updateFriend()` for the same user. Choose one entry and serialize changes through the friend store.
diff --git a/content/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx b/content/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx
new file mode 100644
index 0000000000..8976fcec2f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx
@@ -0,0 +1,23 @@
+---
+title: 'Get subscribed user presence'
+description: 'Read a snapshot for users whose status is already subscribed.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/online-status/get-subscribe-users-status'
+---
+
+`getSubscribeUsersStatus()` takes no user IDs and returns the current subscribed-user snapshot.
+
+```uts
+import { getSubscribeUsersStatus } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSubscribeUsersStatus()
+result?.statuses.forEach((status) => replaceUserStatus(status.userID, status))
+```
+
+An empty list can mean no subscriptions or no available presence; it does not diagnose connectivity. Continue merging `onUserStatusChanged`, and reload this snapshot after foreground restoration or store reconstruction.
diff --git a/content/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx b/content/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx
new file mode 100644
index 0000000000..5b732246d4
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx
@@ -0,0 +1,77 @@
+---
+title: 'Subscribe to user presence'
+description: 'Subscribe to user status and merge onUserStatusChanged updates.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/online-status/subscribe-users-status'
+---
+
+Online status means that a user is connected to OpenIMServer. It does not mean that the user is viewing the App, a conversation, or a message. Subscribe only to users required by the current UI or product flow. One account can subscribe to at most 3,000 users; do not subscribe to the entire directory.
+
+`subscribeUsersStatus()` establishes the subscription and resolves to a string result rather than a status array. After subscribing, call `getUserStatus()` for the current snapshot and merge later changes from `onUserStatusChanged`.
+
+```uts
+import {
+ getUserStatus,
+ subscribeUsersStatus,
+} from '@/uni_modules/unix-openim-sdk'
+
+const userIDs = uniqueUserIDs(['user_a', 'user_b'])
+
+await subscribeUsersStatus(userIDs)
+
+const snapshot = await getUserStatus(userIDs)
+snapshot?.statuses.forEach((status) => {
+ replaceUserStatus(status.userID, status)
+})
+```
+
+Remove blank and duplicate IDs first. Subscription success, snapshot query, and later events are three separate stages; do not treat the subscription's string result as an online-status object.
+
+### Online-status fields
+
+`getUserStatus()` returns `OpenIMUserStatusListResult` or `null`. Every `statuses` element is an `OpenIMUserStatusItem`:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `userID` | `string` | User that owns the state and the cache merge key. |
+| `status` | `number` | Aggregated online state. Interpret it with exported status constants rather than inventing numeric meanings. |
+| `platformIDs` | `number[]` | Currently online platforms. An empty array does not reveal a specific device or last-active time. |
+
+One device going offline does not necessarily mean that all devices are offline. Display the aggregated `status` together with `platformIDs` according to the server's multi-device policy.
+
+## Listen for online-status changes
+
+This page is the complete owner for `onUserStatusChanged`. Register the event before subscribing and querying the snapshot to minimize the gap:
+
+```uts
+import {
+ off,
+ onUserStatusChanged,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const statusSubscription = onUserStatusChanged((result) => {
+ result.statuses.forEach((status) => {
+ replaceUserStatus(status.userID, status)
+ })
+})
+
+await subscribeUsersStatus(userIDs)
+
+const current = await getUserStatus(userIDs)
+current?.statuses.forEach((status) => {
+ replaceUserStatus(status.userID, status)
+})
+
+function releaseStatusListener() {
+ off(statusSubscription)
+}
+```
+
+Merge both snapshot and events idempotently by `userID`. Call `releaseStatusListener()` on logout, account switch, or state-layer destruction. When some users are no longer needed, also [unsubscribe from their status](/sdk/uniapp/user/online-status/unsubscribe-users-status) to release subscription capacity.
diff --git a/content/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx b/content/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx
new file mode 100644
index 0000000000..267d036925
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Unsubscribe from user presence'
+description: 'Stop receiving presence changes for selected users.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/online-status/unsubscribe-users-status'
+---
+
+```uts
+import { unsubscribeUsersStatus } from '@/uni_modules/unix-openim-sdk'
+
+await unsubscribeUsersStatus(['user_a', 'user_b'])
+```
+
+This removes only the selected server-side subscriptions. It does not remove other users or release the local `onUserStatusChanged` handler. Manage both lifecycles: call this API for unwanted users and `off(subscription)` when the local event owner ends. On failure, retain local bookkeeping and retry according to network state rather than looping rapidly.
diff --git a/content/docs/chat/sdk/uniapp/user/overview-user.mdx b/content/docs/chat/sdk/uniapp/user/overview-user.mdx
new file mode 100644
index 0000000000..276e720e5f
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/overview-user.mdx
@@ -0,0 +1,63 @@
+---
+title: 'User overview'
+description: 'Understand user profiles, presence, friendships, friend requests, and the blacklist.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/overview-user'
+---
+
+`unix-openim-sdk` identifies users by `userID`. When implementing profile cards, friend requests, contacts, or blacklists, distinguish an application's public user profile from the current user's friendship, friend-application, and blacklist state.
+
+Group member lists, in-group nicknames, group roles, and member management belong to the group domain. See [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list). Use `userID` as the cross-platform stable key; nicknames and avatars can change.
+
+## User types
+
+The SDK returns different user objects for different scenarios:
+
+| Type | Use case | Primary APIs |
+| --- | --- | --- |
+| `OpenIMUserInfo` | Current user's profile, settings page, avatar, and nickname | `getSelfUserInfo()`, `setSelfInfo()` |
+| `OpenIMPublicUserItem` | User lookup, friend candidates, and profiles for users who are not friends; public alias of `OpenIMUserInfo` | `getUsersInfo()` |
+| `OpenIMFriendUserItem` | Friend list, remarks, pinning, and relationship extension data | `getFriendListPage()`, `getSpecifiedFriendsInfo()` |
+| `OpenIMBlackUserItem` | Users on the current account's blacklist | `getBlackList()`, `addBlack()`, `removeBlack()` |
+| `OpenIMFriendApplicationItem` | Sent or received friend applications and their processing state | Friend-application query, accept, reject, and delete APIs |
+| `OpenIMUserStatusItem` | Aggregated online state and online platforms | `subscribeUsersStatus()`, `getUserStatus()` |
+
+The same `userID` can appear in public, friend, blacklist, and group-member data. Prefer `OpenIMFriendUserItem` for contacts, `OpenIMPublicUserItem` for a stranger's profile card, and `OpenIMGroupMemberItem` in group-member lists. Conversation-list and chat-page titles come from conversation data and should use `OpenIMConversationItem.showName`.
+
+Public `OpenIMUserInfo` fields include `userID`, `nickname`, `faceURL`, `ex`, and optional `createTime`. `attachedInfo` and `globalRecvMsgOpt` are Commercial fields; check for absence and do not assume that a public server returns them.
+
+## Feature pages
+
+| Task | Recommended page |
+| --- | --- |
+| Query public profiles by `userID` for friend candidates or profile cards | [Get user profiles](/sdk/uniapp/user/profile/get-users-info) |
+| Page through, search, or query friendships by ID | [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page) |
+| Send or process friend applications | [Send a friend application](/sdk/uniapp/user/friend-applications/add-friend), [Get received friend applications](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient) |
+| Update friend information | [Update friend information](/sdk/uniapp/user/friends/update-friends) |
+| Delete a friendship | [Delete a friend](/sdk/uniapp/user/friends/delete-friend) |
+| View and maintain the blacklist | [Get the blacklist](/sdk/uniapp/user/blacklist/get-black-list) |
+| Read or update the current user's nickname, avatar, and extension data | [Update your profile](/sdk/uniapp/user/profile/set-self-info) |
+| Set account-level message reception | [Set global message reception](/sdk/uniapp/user/profile/set-global-message-reception) |
+| Understand the current contract boundary for friend-add permission | [Set friend request permissions](/sdk/uniapp/user/profile/set-friend-add-permission) |
+| Subscribe to and read online status | [Subscribe to online status](/sdk/uniapp/user/online-status/subscribe-users-status) |
+| List, search, or retrieve selected group-member profiles | [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list) |
+
+The application backend remains authoritative for account identity, verified identity, organization relationships, and business authorization. SDK profile fields are for chat presentation and cannot replace application login or authorization.
+
+## State updates
+
+Query the relevant snapshot when a page opens, then merge incremental events:
+
+- Current user profile changes: [Update your profile](/sdk/uniapp/user/profile/set-self-info).
+- Friend application changes: [Get received friend applications](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient).
+- Friendship and friend profile changes: [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page).
+- Blacklist changes: [Get the blacklist](/sdk/uniapp/user/blacklist/get-black-list).
+- Online status changes: [Subscribe to online status](/sdk/uniapp/user/online-status/subscribe-users-status).
+
+Merge all these lists idempotently by `userID`. Events are not a complete database recovery mechanism; requery the snapshots needed by the current UI after reconnect, re-login, account switch, or process restoration.
diff --git a/content/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx b/content/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx
new file mode 100644
index 0000000000..22f07b16d4
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx
@@ -0,0 +1,44 @@
+---
+title: 'Get your profile'
+description: 'Read the OpenIM profile of the logged-in user.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/profile/get-self-user-info'
+---
+
+After initialization, login, and connection readiness, call `getSelfUserInfo()` to query the current account's profile:
+
+```uts
+import {
+ getSelfUserInfo,
+ type OpenIMUserInfo,
+} from '@/uni_modules/unix-openim-sdk'
+
+const currentUser : OpenIMUserInfo | null = await getSelfUserInfo()
+if (currentUser != null) {
+ renderProfile(currentUser.nickname, currentUser.faceURL)
+}
+```
+
+## Return result
+
+The Promise resolves directly to `OpenIMUserInfo` or `null`, without a `{ data }` wrapper. A non-null object contains:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `userID` | `string` | Signed-in user's OpenIMSDK user ID and the stable identifier for this profile snapshot. |
+| `nickname` | `string` | Account-level nickname. |
+| `faceURL` | `string` | Account-level avatar URL. |
+| `createTime` | `number` or `null` (optional) | Time when the user record was created. |
+| `globalRecvMsgOpt` Enterprise | `number` or `null` (optional) | Account-level message reception option. See [Set global message reception](/sdk/uniapp/user/profile/set-global-message-reception). |
+| `attachedInfo` Enterprise | `string` or `null` (optional) | SDK attachment data. Parse it only according to a confirmed application contract. |
+| `ex` | `string` | Account-level extension string defined by the application. |
+
+Verify that the returned `userID` matches the current application account. Do not fabricate an empty user object when the result is `null`; use login state and redacted diagnostics to determine why a snapshot is unavailable.
+
+This query establishes a snapshot and does not trigger a profile event. Clear it when switching accounts. See [Update your profile](/sdk/uniapp/user/profile/set-self-info) for merging `onSelfInfoUpdated` and reconciling with another query.
diff --git a/content/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx b/content/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx
new file mode 100644
index 0000000000..a1a42fe776
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx
@@ -0,0 +1,91 @@
+---
+title: 'Get user profiles'
+description: 'Read public profiles for a list of user IDs.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/profile/get-users-info'
+---
+
+Use `getUsersInfo()` to query application users' public profiles by `userID`. It is suitable for friend candidates, stranger profile cards, and message-sender profiles.
+
+If the product searches by nickname, phone number, organization, email, or another application field, let a trusted backend perform the search and permission check first, then pass the returned `userID` values to `getUsersInfo()`. Administrator tokens and user-directory administration must remain on that backend.
+
+## Query public profiles
+
+Pass an array of OpenIMSDK user IDs. Deduplicate them and limit each batch; do not issue one request per row while a long list scrolls.
+
+```uts
+import {
+ getUsersInfo,
+ type OpenIMUserInfo,
+} from '@/uni_modules/unix-openim-sdk'
+
+const userIDList : Array = uniqueUserIDs(['user_a', 'user_b'])
+const result = await getUsersInfo(userIDList)
+const users : Array = result?.users ?? []
+
+users.forEach((user) => {
+ cachePublicUser(user.userID, user)
+})
+```
+
+The Promise resolves directly to `OpenIMUserListResult` or `null`. Its `users` field contains the matched `OpenIMUserInfo[]`; `OpenIMPublicUserItem` is the public-profile alias for that shape. The result can be shorter than the request and does not have to preserve input order. Build a map by `userID` and retain placeholder state for users that do not exist, are inaccessible, or were not returned.
+
+Common fields are:
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `userID` | `string` | OpenIMSDK user ID. |
+| `nickname` | `string` | Account-level public nickname. |
+| `faceURL` | `string` | Account-level public avatar URL. |
+| `createTime` | `number` or `null` (optional) | Time when the user record was created. |
+| `ex` | `string` | Account-level extension string whose format is defined by the application. |
+| `attachedInfo` Enterprise | `string` or `null` (optional) | Parse only according to a confirmed commercial business contract. |
+| `globalRecvMsgOpt` Enterprise | `number` or `null` (optional) | Account-level message reception option. A stranger profile card normally does not need to display it. |
+
+Neither `ex` nor `attachedInfo` is a trusted identity, authorization, or authentication credential. This query is also read-only for other accounts. Update only the signed-in user's profile with `setSelfInfo()`.
+
+## Results and profile refresh
+
+Use the returned `users` to update the current public-profile snapshot. Query again when opening a profile card, refreshing manually, reconnecting, or receiving a profile-change notification from the application backend. When a page displays several users, collect the visible `userID` values, deduplicate them, query one batch, and merge by `userID`.
+
+The SDK has no general change event for arbitrary users' public profiles. `onSelfInfoUpdated` carries only the signed-in user's profile and must not be written into another user's public-profile cache. See [Update your profile](/sdk/uniapp/user/profile/set-self-info) for current-account profile updates and reconciliation.
+
+## Search for users to add as friends
+
+The application backend normally returns candidate `userID` values first. The App then calls `getUsersInfo()` for public presentation and continues to the friend-application flow after the user selects a target.
+
+```uts
+async function searchUsersForFriendRequest(keyword : string) : Promise> {
+ const userIDs = await searchUserIDsFromBusinessBackend(keyword)
+ if (userIDs.length == 0) {
+ return []
+ }
+
+ const result = await getUsersInfo(uniqueUserIDs(userIDs))
+ return result?.users ?? []
+}
+```
+
+If the product supports only exact user-ID lookup, validate that input and pass it directly. For fuzzy search or sensitive fields, the backend must enforce authorization, rate limits, redaction, and auditing.
+
+## Choose display data by context
+
+| Context | Preferred type |
+| --- | --- |
+| Application search or a stranger's profile card | `OpenIMPublicUserItem` / `OpenIMUserInfo` |
+| Friend list, contacts, or friend remarks | `OpenIMFriendUserItem` |
+| Group member list, in-group nickname, or group role | `OpenIMGroupMemberItem` |
+
+Friend remarks and in-group nicknames belong to friendship and group-member data. See [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page), [Get specified friend information](/sdk/uniapp/user/friends/get-specified-friends-info), and [List group members](/sdk/uniapp/group/retrieving-group-members/get-group-member-list).
+
+## Next steps
+
+- [Get the friend list](/sdk/uniapp/user/friends/get-friend-list-page)
+- [Get specified friend information](/sdk/uniapp/user/friends/get-specified-friends-info)
+- [Get received friend applications](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient)
diff --git a/content/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx b/content/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx
new file mode 100644
index 0000000000..473fa05c6b
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx
@@ -0,0 +1,20 @@
+---
+title: 'Set friend-add permission'
+description: 'Understand the commercial friend-add policy and the current plugin write boundary.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/profile/set-friend-add-permission'
+---
+
+Friend-add permission is a Commercial account policy. The locked `unix-openim-sdk 0.2.0-rc.3` exposes related commercial profile data, but `OpenIMSetSelfInfoParams` has no `addFriendPermission` write parameter.
+
+This release therefore cannot expose or simulate a client setter. Do not store the policy in `ex`. Change it through a supported commercial backend or an administration API confirmed to support the field, then requery the current profile and refresh the UI.
+
+Perform a capability check before displaying this setting. If the field is absent on a public edition, older server, or response that does not expose it, show the setting as unavailable. Do not assume that absence means “anyone can add” or “verification required.”
+
+See [Send a friend application](/sdk/uniapp/user/friend-applications/add-friend) and [Get received friend applications](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient) for the client-side friend-request flow.
diff --git a/content/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx b/content/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx
new file mode 100644
index 0000000000..2597ae8d4a
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx
@@ -0,0 +1,40 @@
+---
+title: 'Set global message reception'
+description: 'Set the commercial account-wide globalRecvMsgOpt profile field.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/profile/set-global-message-reception'
+---
+
+`globalRecvMsgOpt` is an Enterprise field that defines the account's default message-reception and notification policy. It is not an ordinary nickname, avatar, or display-profile field.
+
+```uts
+import {
+ setSelfInfo,
+ type OpenIMSetSelfInfoRecvMsgOpt,
+} from '@/uni_modules/unix-openim-sdk'
+
+const receiveWithoutNotification : OpenIMSetSelfInfoRecvMsgOpt = 2
+await setSelfInfo({
+ globalRecvMsgOpt: receiveWithoutNotification,
+})
+```
+
+The contract permits these values:
+
+| Value | Meaning |
+| --- | --- |
+| `0` | Receive messages normally and allow offline push or notifications. |
+| `1` | Do not receive messages. Use only when the product explicitly needs to stop delivery and the server policy is understood. |
+| `2` | Receive messages without offline push or notifications, equivalent to all-day do not disturb. |
+
+Pass only `globalRecvMsgOpt` so changing message policy does not overwrite nickname, avatar, or `ex`. The plugin has no separate setter for this field.
+
+A conversation's `recvMsgOpt` is a more specific conversation-level option; see [Set message reception for a conversation](/sdk/uniapp/conversation/managing-conversations/set-message-receive-option). When account and conversation settings coexist, display the final conversation state returned by the server rather than inferring it only from a local switch.
+
+Promise success means that the update request completed, not that `onSelfInfoUpdated` has arrived. See [Update your profile](/sdk/uniapp/user/profile/set-self-info) for the event and `getSelfUserInfo()` reconciliation. Public editions may omit this field; show the control according to capability configuration and do not interpret absence as a particular policy.
diff --git a/content/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx b/content/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx
new file mode 100644
index 0000000000..aa93c7d7dd
--- /dev/null
+++ b/content/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx
@@ -0,0 +1,63 @@
+---
+title: 'Update your profile'
+description: 'Update selected profile fields and process onSelfInfoUpdated.'
+product: 'sdk'
+context: 'chat/sdk/uniapp'
+template: 'guide'
+status: 'published'
+lastUpdated: '2026-08-13'
+version: 'v4'
+platform: 'uniapp'
+sourcePath: '/sdk/uniapp/user/profile/set-self-info'
+---
+
+`setSelfInfo()` updates the signed-in user's basic display profile. Pass only the fields that really need to change; do not use empty strings or `null` to mean “unchanged.”
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+| --- | --- | --- | --- |
+| `nickname` | `string` or `null` | No | New nickname. |
+| `faceURL` | `string` or `null` | No | New avatar URL. |
+| `ex` | `string` or `null` | No | New extension string. It completely replaces the previous value. |
+| `globalRecvMsgOpt` Enterprise | `OpenIMSetSelfInfoRecvMsgOpt` or `null` | No | Account-level message reception option; update it through the corresponding settings flow. |
+
+Pass at least one field that actually needs to change.
+
+```uts
+import { setSelfInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setSelfInfo({
+ nickname: 'OpenIM User',
+ faceURL: 'https://cdn.example.com/avatar.png',
+ ex: mergedExtra,
+})
+```
+
+`ex` is a complete string; the SDK does not merge JSON automatically. If several application modules share it, read the current value first and merge each module's namespace before writing the complete replacement.
+
+`setSelfInfo()` also carries the account-level `globalRecvMsgOpt`, but do not save it together with ordinary profile data. See [Set global message reception](/sdk/uniapp/user/profile/set-global-message-reception). The current Private rc.3 interface has no setter for the policy governing how other users add this account. Do not infer or call a method that exists only in the Wasm page; see [Set friend request permissions](/sdk/uniapp/user/profile/set-friend-add-permission) for the exact contract boundary.
+
+Promise success means that the update request completed, not that the profile event has arrived. Reconcile the final profile through `onSelfInfoUpdated` or another `getSelfUserInfo()` query.
+
+## Listen for current-user profile changes
+
+This page is the complete owner for `onSelfInfoUpdated`. The event carries a complete updated `OpenIMUserInfo`; replace the current user snapshot by `userID`.
+
+```uts
+import {
+ off,
+ onSelfInfoUpdated,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const selfInfoSubscription = onSelfInfoUpdated((user) => {
+ replaceCurrentUser(user.userID, user)
+})
+
+function releaseSelfInfoSubscription() {
+ off(selfInfoSubscription)
+}
+```
+
+Do not update only the local state of the page that sent the request. If several pages need the current profile, let one application user store subscribe, or let each owner keep and release its own handle. Call `releaseSelfInfoSubscription()` on logout, account switch, or destruction of the user state layer.
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx
new file mode 100644
index 0000000000..ecbeba8fcb
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx
@@ -0,0 +1,26 @@
+---
+title: '接受通话'
+description: '商业版接受邀请并取得房间凭据。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/accept-call'
+---
+
+从 `onReceiveNewInvitation` 取得原始 `OpenIMSignalingInvitationInfo` 后,先校验当前 session,并请求麦克风或摄像头权限,再调用 `signalingAccept()`:
+
+```uts
+import { signalingAccept } from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingAccept({ invitation })
+```
+
+`invitation` 必须保留收到的原始 `roomID`、邀请人、被邀请人和会话类型,不能重新构造。权限失败时不得发送 accept,应按产品策略拒绝或提示用户。
+
+Promise 成功后,`roomCredentials` 是 `OpenIMSignalingAcceptResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `roomID` | `string` 或 `null` | 本次通话的媒体房间 ID。 |
+| `token` | `string` 或 `null` | 加入媒体房间使用的短期凭据。 |
+| `liveURL` | `string` 或 `null` | 媒体服务返回的连接地址。 |
+| `invitation` | `OpenIMSignalingInvitationInfo` 或 `null` | 服务端返回的邀请快照。 |
+
+这些字段均为可选值且敏感,只保存在内存中。取得有效的 `token` 和 `roomID` 后再连接媒体房间;Promise 成功、对方收到接受事件和媒体真正连接是不同阶段。后续状态由[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)继续合并。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx
new file mode 100644
index 0000000000..e2da2b429e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx
@@ -0,0 +1,17 @@
+---
+title: '取消通话邀请'
+description: '商业版由主叫取消尚未接通的邀请。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/cancel-call'
+---
+
+主叫在对方接受前使用 `signalingCancel()`。
+
+```uts
+import { signalingCancel } from '@/uni_modules/unix-openim-sdk'
+
+await signalingCancel({ invitation })
+```
+
+必须传本次通话的完整原始 `OpenIMSignalingInvitationInfo`,不能只构造一个 `roomID`。取消与挂断语义不同:取消用于尚未接通的邀请,挂断用于已经建立或正在建立的会话。
+
+Promise 成功表示取消信令请求完成。应用还应结束本地的等待接听状态,并释放尚未使用的媒体资源;远端通过 `onInvitationCancelled` 更新。按钮应防止重复提交,并以取消、接受等竞态事件决定最终状态,完整处理见[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx
new file mode 100644
index 0000000000..760daba130
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx
@@ -0,0 +1,67 @@
+---
+title: '处理通话事件'
+description: '商业版统一接收邀请、接受、拒绝、取消、超时、挂断和房间事件。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/handle-call-events'
+---
+
+通话状态层应集中监听邀请生命周期、参与者连接状态和媒体流变化,并按 `roomID` 合并到同一份本地状态。所有事件返回 raw JSON 字符串;回调应尽快完成,异步展示 UI,并先校验 JSON 再映射到应用自己的通话领域模型。
+
+| 事件 | 用途 |
+| --- | --- |
+| `onReceiveNewInvitation` | 收到新的通话邀请。 |
+| `onInviteeAccepted`、`onInviteeRejected` | 当前邀请被接受或拒绝。 |
+| `onInvitationCancelled`、`onInvitationTimeout` | 邀请被取消或超时。 |
+| `onInviteeAcceptedByOtherDevice`、`onInviteeRejectedByOtherDevice` | 同一账号的其他设备处理邀请。 |
+| `onHangUp` | 通话参与者挂断。 |
+| `onRoomParticipantConnected`、`onRoomParticipantDisconnected` | 房间参与者连接状态变化。 |
+| `onStreamChange` | 参与者媒体流状态变化。 |
+
+```uts
+import {
+ off,
+ onHangUp,
+ onInvitationCancelled,
+ onInvitationTimeout,
+ onInviteeAccepted,
+ onInviteeAcceptedByOtherDevice,
+ onInviteeRejected,
+ onInviteeRejectedByOtherDevice,
+ onReceiveNewInvitation,
+ onRoomParticipantConnected,
+ onRoomParticipantDisconnected,
+ onStreamChange,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+function handleCallPayload(payload : string) {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) routeValidatedCallEvent(value)
+ } catch (_) {
+ console.error('Invalid call event payload')
+ }
+}
+
+const invitationSubscription = onReceiveNewInvitation(handleCallPayload)
+const subscriptions : Array = [
+ invitationSubscription,
+ onInviteeAccepted(handleCallPayload),
+ onInviteeAcceptedByOtherDevice(handleCallPayload),
+ onInviteeRejected(handleCallPayload),
+ onInviteeRejectedByOtherDevice(handleCallPayload),
+ onInvitationCancelled(handleCallPayload),
+ onInvitationTimeout(handleCallPayload),
+ onHangUp(handleCallPayload),
+ onRoomParticipantConnected(handleCallPayload),
+ onRoomParticipantDisconnected(handleCallPayload),
+ onStreamChange(handleCallPayload),
+]
+
+function removeCallListeners() {
+ subscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+本页是以上 11 个通话事件的唯一完整监听归属页。参与者状态还要结合用户 ID 更新;不要按事件顺序、展示名称或数组下标合并。应用应使用 `roomID`、本地 session ID 和运行 generation 去重,过期事件不能打开新页面。退出登录、切换账号或销毁通话状态层时调用 `removeCallListeners()`。
+
+HarmonyOS 当前不支持 `onStreamChange`,注册会返回 `platform-unsupported` subscription,不会伪造媒体流事件;其余本页信令事件支持。raw payload 与 RTC Token 不写入日志或持久化存储。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx
new file mode 100644
index 0000000000..b191f54d1b
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx
@@ -0,0 +1,17 @@
+---
+title: '挂断通话'
+description: '商业版结束已接受的通话。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/hang-up-call'
+---
+
+通话已经建立后,参与者调用 `signalingHungUp()`。`invitation` 是本次通话使用的完整 `OpenIMSignalingInvitationInfo`,其中的 `roomID` 必须与当前媒体房间一致。
+
+```uts
+import { signalingHungUp } from '@/uni_modules/unix-openim-sdk'
+
+await signalingHungUp({ invitation })
+```
+
+Promise 成功只表示挂断信令请求完成。应用还需要停止本地采集、断开媒体房间,并释放摄像头、麦克风和页面资源。
+
+调用前先锁定结束流程,避免本地按钮、远端挂断和网络错误重复执行。取消、拒绝、超时和挂断应进入同一套按 `roomID` 幂等的清理流程,并继续处理 `onHangUp`,完整监听见[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx
new file mode 100644
index 0000000000..c7db7b3f90
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx
@@ -0,0 +1,17 @@
+---
+title: '拒绝通话'
+description: '商业版拒绝当前邀请。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/reject-call'
+---
+
+用户拒绝来电时,将收到的原始 `OpenIMSignalingInvitationInfo` 交给 `signalingReject()`:
+
+```uts
+import { signalingReject } from '@/uni_modules/unix-openim-sdk'
+
+await signalingReject({ invitation })
+```
+
+`invitation` 必须保留完整的原始通话信息,不要自行重建或修改 `roomID`。
+
+Promise 成功只表示 OpenIMServer 已完成拒绝请求。拒绝后可以关闭本地来电 UI,并幂等处理对端和其他设备事件;发起端随后通过 `onInviteeRejected` 更新界面,完整处理见[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx
new file mode 100644
index 0000000000..6caadd6e46
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx
@@ -0,0 +1,52 @@
+---
+title: '发起群通话'
+description: '商业版向群成员发起群组通话邀请。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/start-group-call'
+---
+
+`signalingInviteInGroup()` 商业版 发起群聊通话,只邀请 `inviteeUserIDList` 明确列出的群成员,不会因为填写 `groupID` 自动邀请全群。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `invitation` | `OpenIMSignalingInvitationInfo` | 是 | 本次通话邀请。 |
+| `invitation.inviterUserID` | `string` | 是 | 发起人的用户 ID。 |
+| `invitation.inviteeUserIDList` | `string[]` | 是 | 被邀请的群成员用户 ID;不要包含发起人。 |
+| `invitation.groupID` | `string` | 是 | 群组 ID,群聊通话不能为空。 |
+| `invitation.roomID` | `string` | 是 | 本次通话的唯一房间标识,所有参与端必须一致。 |
+| `invitation.timeout` | `number` | 是 | 邀请等待时长,单位为秒。 |
+| `invitation.mediaType` | `string` | 是 | 媒体类型,业务通常约定为 `audio` 或 `video`。 |
+| `invitation.sessionType` | `number` | 是 | 工作群会话传 `OpenIMSessionTypeWriteGroup`。 |
+| `invitation.platformID` | `number` | 是 | 当前客户端平台;Android/iOS 分别使用对应平台常量。 |
+| `invitation.customData` | `string` | 否 | 随邀请携带的业务扩展字符串。 |
+| `invitation.initiateTime` | `number` | 否 | 邀请发起时间,通常由信令链路维护。 |
+| `invitation.busyLineUserIDList` | `string[]` | 否 | 发起新邀请时通常不填写。 |
+| `offlinePushInfo` | `OpenIMSignalingOfflinePushInfo` | 否 | 被邀请人离线时使用的推送内容。 |
+
+```uts
+import {
+ OpenIMPlatformAndroid,
+ OpenIMSessionTypeWriteGroup,
+ signalingInviteInGroup,
+} from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingInviteInGroup({
+ invitation: {
+ inviterUserID: currentUserID,
+ inviteeUserIDList: selectedGroupMemberIDs,
+ customData: JSON.stringify({ source: 'group-call' }),
+ groupID,
+ roomID: groupID,
+ mediaType: 'video',
+ timeout: 30,
+ sessionType: OpenIMSessionTypeWriteGroup,
+ platformID: OpenIMPlatformAndroid,
+ },
+ offlinePushInfo,
+})
+```
+
+示例沿用群组 ID 作为房间 ID;若业务自行生成 `roomID`,所有参与端必须使用同一个值。iOS 端将 `platformID` 改为 `OpenIMPlatformIOS`。发起前应排除当前用户、空值和重复成员,并确认目标仍在群内。
+
+Promise 成功后,`roomCredentials` 是 `OpenIMSignalingInviteResult | null`,字段含义见[发起单聊通话](/zh/sdk/uniapp/calling/managing-calls/start-single-call)。`busyLineUserIDList` 只表示部分成员忙线,不应中止其他成员的邀请;成功也不代表其他成员已经接听,后续状态由[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)合并。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx
new file mode 100644
index 0000000000..1aa8a9d7b5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx
@@ -0,0 +1,75 @@
+---
+title: '发起单人通话'
+description: '商业版向一个用户发起音频或视频邀请。'
+sourcePath: '/sdk/uniapp/calling/managing-calls/start-single-call'
+---
+
+`signalingInvite()` 商业版 发起单聊通话。`unix-openim-sdk` 负责通话信令,应用仍需使用返回的房间凭据接入实时音视频媒体引擎。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `invitation` | `OpenIMSignalingInvitationInfo` | 是 | 本次通话邀请。 |
+| `invitation.inviterUserID` | `string` | 是 | 当前登录用户 ID。 |
+| `invitation.inviteeUserIDList` | `string[]` | 是 | 被邀请用户列表;单聊只填写对方一个用户。 |
+| `invitation.groupID` | `string` | 是 | 单聊固定传空字符串。 |
+| `invitation.roomID` | `string` | 是 | 本次通话的唯一房间标识,后续状态按它合并。 |
+| `invitation.timeout` | `number` | 是 | 邀请等待时长,单位为秒。 |
+| `invitation.mediaType` | `string` | 是 | 媒体类型,业务通常约定为 `audio` 或 `video`。 |
+| `invitation.sessionType` | `number` | 是 | 单聊传 `OpenIMSessionTypeSingle`。 |
+| `invitation.platformID` | `number` | 是 | 当前客户端平台;Android/iOS 分别使用对应平台常量。 |
+| `invitation.customData` | `string` | 否 | 随邀请携带的业务扩展字符串。 |
+| `invitation.initiateTime` | `number` | 否 | 邀请发起时间,通常由信令链路维护。 |
+| `invitation.busyLineUserIDList` | `string[]` | 否 | 忙线用户列表;发起新邀请时通常不填写。 |
+| `offlinePushInfo` | `OpenIMSignalingOfflinePushInfo` | 否 | 被邀请人离线时使用的推送内容。 |
+| `offlinePushInfo.title` | `string` | 否 | 推送标题。 |
+| `offlinePushInfo.desc` | `string` | 否 | 推送正文。 |
+| `offlinePushInfo.ex` | `string` | 否 | 推送扩展字符串。 |
+| `offlinePushInfo.iOSPushSound` | `string` | 否 | iOS 推送声音。 |
+| `offlinePushInfo.iOSBadgeCount` | `boolean` | 否 | 是否更新 iOS 角标。 |
+
+```uts
+import {
+ OpenIMPlatformAndroid,
+ OpenIMSessionTypeSingle,
+ signalingInvite,
+} from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingInvite({
+ invitation: {
+ inviterUserID: currentUserID,
+ inviteeUserIDList: [peerUserID],
+ customData: JSON.stringify({ source: 'contact-card' }),
+ groupID: '',
+ roomID: createBusinessRoomID(),
+ mediaType: 'video',
+ timeout: 30,
+ sessionType: OpenIMSessionTypeSingle,
+ platformID: OpenIMPlatformAndroid,
+ },
+ offlinePushInfo: {
+ title: '视频通话',
+ desc: '你收到一个视频通话邀请',
+ ex: '',
+ iOSPushSound: 'default',
+ iOSBadgeCount: true,
+ },
+})
+```
+
+iOS 端将 `platformID` 改为 `OpenIMPlatformIOS`。房间 ID 应由业务生成并在本次通话各参与端保持一致。
+
+## 返回结果
+
+Promise 成功后,`roomCredentials` 是 `OpenIMSignalingInviteResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `roomID` | `string` 或 `null` | 本次通话的媒体房间 ID。 |
+| `token` | `string` 或 `null` | 加入媒体房间使用的短期凭据,只应保存在内存中。 |
+| `liveURL` | `string` 或 `null` | 媒体服务返回的房间连接地址。 |
+| `busyLineUserIDList` | `string[]` 或 `null` | 因忙线未能进入邀请流程的用户 ID。 |
+| `invitation` | `OpenIMSignalingInvitationInfo` 或 `null` | 服务端返回的邀请快照。 |
+
+取得有效的 `token` 和 `roomID` 后再连接媒体房间。Promise 成功只表示信令请求完成并取得房间凭据,不表示对方已经接听;后续状态见[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)。邀请成功后若页面展示失败,应主动取消。不要在日志中打印 token 或 liveURL。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/overview-calling.mdx b/content/zh/docs/chat/sdk/uniapp/calling/overview-calling.mdx
new file mode 100644
index 0000000000..185a8eb81a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/overview-calling.mdx
@@ -0,0 +1,49 @@
+---
+title: '音视频信令概览'
+description: '商业版通话邀请、房间凭据、事件和 AV Runtime 的职责边界。'
+sourcePath: '/sdk/uniapp/calling/overview-calling'
+---
+
+本节全部能力属于商业版,要求商业版 OpenIMServer 信令服务。`unix-openim-sdk` 提供发起邀请、接受、拒绝、取消、挂断、查询房间和同步通话状态所需的信令 API。它负责协调参与者、房间信息和通话生命周期,不负责采集摄像头画面、播放远端媒体流或渲染通话界面。
+
+应用需要把返回的 `roomID`、`token` 和 `liveURL` 交给所选的实时音视频媒体引擎,并自行处理设备权限、媒体轨道、弱网策略和界面状态。信令 API 不是一套完整的 WebRTC 媒体 SDK。需要完整通话与会议 UI 时,可另行集成 `openim-av-runtime`;AV Runtime 复用本插件的唯一登录态,不初始化第二套 OpenIM Core。
+
+## 通话流程
+
+1. 应用登录 IM 并注册全部信令事件,调用 `signalingInvite()` 发起单聊通话,或调用 `signalingInviteInGroup()` 发起群聊通话。
+2. 被邀请方从 `onReceiveNewInvitation` 获取 raw JSON 邀请,校验并映射为 `OpenIMSignalingInvitationInfo` 后展示来电。
+3. 接受方先申请媒体权限,再调用 `signalingAccept()`;拒绝则调用 `signalingReject()`。
+4. 双方使用返回的 `roomID`、`token` 和 `liveURL` 接入媒体引擎。
+5. 通话过程中根据参与者、媒体流和自定义信令事件更新本地状态。
+6. 发起方可以取消尚未接通的邀请;任一参与者都可以挂断已经建立的通话。
+
+## 核心数据
+
+| 数据 | 说明 |
+| --- | --- |
+| `OpenIMSignalingInvitationInfo` | 邀请人、被邀请人、群组、房间、媒体类型、超时时间和会话类型。 |
+| `OpenIMSignalingInviteResult` | OpenIMServer 返回的 `roomID`、`token`、`liveURL` 和忙线用户列表。 |
+| `OpenIMSignalingAcceptResult`、`OpenIMSignalingGetTokenByRoomIDResult` | 接受邀请或重新获取 Token 时返回的媒体房间凭据。 |
+| `OpenIMSignalingGetRoomByGroupIDResult` | 按群组查询到的 `roomID` 和原始邀请快照。 |
+
+`customData` 和自定义信令只适合传递业务可公开的协商信息。不要在其中写入长期凭据、管理员密钥或其他敏感数据。
+
+## 状态更新与事件归属
+
+发起、接受、拒绝、取消和挂断等写操作需要分别处理 API 的 Promise 结果与通话事件。Promise 成功表示 OpenIMServer 已接受或完成当前信令请求;事件反映邀请方、被邀请方、其他设备或房间参与者看到的增量状态,两者不是同一个完成信号。
+
+信令事件参数是 raw JSON 字符串,必须先校验再进入应用状态。邀请生命周期、成员进出房间、挂断和媒体流变化的完整监听统一见[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events);自定义信令事件见[发送自定义信令](/zh/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal)。查询房间、重新获取 Token 和恢复待处理邀请只通过 Promise 返回调用时的快照。
+
+概览页不注册事件处理器。通话状态以 `roomID` 为主键,参与者状态还要结合用户 ID;重新登录后的通话变化由事件同步,需要显示当前房间快照时再查询房间信息。
+
+## 按任务查找页面
+
+| 任务 | 页面 |
+| --- | --- |
+| 发起单聊或群聊通话 | [发起单聊通话](/zh/sdk/uniapp/calling/managing-calls/start-single-call)、[发起群聊通话](/zh/sdk/uniapp/calling/managing-calls/start-group-call) |
+| 接受或拒绝邀请 | [接受通话](/zh/sdk/uniapp/calling/managing-calls/accept-call)、[拒绝通话](/zh/sdk/uniapp/calling/managing-calls/reject-call) |
+| 取消邀请或挂断通话 | [取消通话邀请](/zh/sdk/uniapp/calling/managing-calls/cancel-call)、[挂断通话](/zh/sdk/uniapp/calling/managing-calls/hang-up-call) |
+| 恢复房间或待处理邀请 | [查询群组通话房间](/zh/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id)、[获取通话房间 Token](/zh/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id)、[恢复待处理的通话邀请](/zh/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation) |
+| 处理通话事件和业务协商 | [通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)、[发送自定义信令](/zh/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal) |
+
+同一账号/运行时只维护一个活动通话或会议。Token、liveURL 和 raw 信令 payload 不写日志或持久化。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx b/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx
new file mode 100644
index 0000000000..df115d46ee
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx
@@ -0,0 +1,26 @@
+---
+title: '按群查询通话房间'
+description: '商业版查询群当前关联的 roomID 与邀请。'
+sourcePath: '/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id'
+---
+
+`signalingGetRoomByGroupID()` 的参数是群组 ID,不是自定义 `roomID`:
+
+```uts
+import { signalingGetRoomByGroupID } from '@/uni_modules/unix-openim-sdk'
+
+const room = await signalingGetRoomByGroupID({ groupID })
+```
+
+## 返回结果
+
+Promise 成功后,结果是 `OpenIMSignalingGetRoomByGroupIDResult | null` 快照:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `roomID` | `string` 或 `null` | 当前群通话的房间 ID。 |
+| `invitation` | `OpenIMSignalingInvitationInfo` 或 `null` | 当前房间对应的原始邀请信息。 |
+
+当前 uni-app / uni-app x 合同不像 Wasm 结果那样包含参与者资料;成员快照应由媒体引擎或业务状态提供,不要伪造 `participant` 字段。
+
+空结果或空 `roomID` 表示没有可加入房间。查询结果可能在返回后过期,真正加入前继续处理信令事件并通过 `signalingGetTokenByRoomID()` 获取有效 Token。若业务为群通话使用自定义房间 ID,仍需用 `groupID` 调用本方法,再按返回或已保存的 `roomID` 合并通话状态。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx b/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx
new file mode 100644
index 0000000000..88d7459ee2
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx
@@ -0,0 +1,17 @@
+---
+title: '按房间获取 Token'
+description: '商业版为指定 roomID 获取 RTC Token 和 liveURL。'
+sourcePath: '/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id'
+---
+
+已经知道 `roomID`、但需要重新获取入会凭据时,调用 `signalingGetTokenByRoomID()`:
+
+```uts
+import { signalingGetTokenByRoomID } from '@/uni_modules/unix-openim-sdk'
+
+const roomCredentials = await signalingGetTokenByRoomID({ roomID })
+```
+
+Promise 成功后,`roomCredentials` 是 `OpenIMSignalingGetTokenByRoomIDResult | null`,包含可选的 `token` 和 `liveURL`,不重复返回 `roomID`。只有取得有效 Token 后,才能使用本次查询参数中的 `roomID` 连接媒体引擎。
+
+房间 Token 是短期敏感凭据,只保存在内存并立即交给媒体层,不要写入日志、URL、分析事件、文件或持久化 storage。空字段或服务端过期时停止加入流程并重新获取,不复用旧 Token。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx b/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx
new file mode 100644
index 0000000000..f498793cd9
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx
@@ -0,0 +1,22 @@
+---
+title: '恢复启动时邀请'
+description: '商业版在 SDK 启动后查询可能遗漏的当前邀请。'
+sourcePath: '/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation'
+---
+
+事件监听建立后调用一次 `signalingGetInvitationInfoStartApp()`,返回应用启动或恢复时需要处理的邀请快照:
+
+```uts
+import { signalingGetInvitationInfoStartApp } from '@/uni_modules/unix-openim-sdk'
+
+const result = await signalingGetInvitationInfoStartApp()
+if (result?.invitation != null) recoverInvitation(result.invitation)
+```
+
+可选参数 `{ userID }` 只用于明确查询用户;通常由当前登录态决定,不需要传入。
+
+## 返回结果
+
+Promise 成功后,结果是 `OpenIMSignalingGetInvitationInfoStartAppResult | null`,其中 `invitation` 为 `OpenIMSignalingInvitationInfo | null`。无邀请时合法返回 `null` 或 `invitation: null`,不是错误。
+
+该查询只取得当前快照,不会触发通话事件。只在 invitation 非空且 `roomID` 有效时恢复来电界面;恢复结果与实时邀请可能重复,应按 `roomID` 和本地 session 标识去重。每次 runtime 初始化只查询一次,随后仍需监听取消、超时、接受和挂断,完整处理见[通话事件](/zh/sdk/uniapp/calling/managing-calls/handle-call-events)。
diff --git a/content/zh/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx b/content/zh/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx
new file mode 100644
index 0000000000..59bf58ae4b
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx
@@ -0,0 +1,70 @@
+---
+title: '发送自定义信令'
+description: '商业版向房间发送业务自定义信令,并安全解析接收事件。'
+sourcePath: '/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal'
+---
+
+`signalingSendCustomSignaling()` 用于向指定通话房间发送轻量级业务协商数据,例如举手、切换布局提示或业务侧状态同步。它不是聊天消息接口,也不能替代媒体引擎的数据通道。
+
+## 发送信令
+
+`customInfo` 是字符串。需要传递结构化数据时,先定义稳定的数据格式并序列化为 JSON。
+
+```uts
+import {
+ off,
+ onReceiveCustomSignal,
+ onReceiveCustomSignaling,
+ signalingSendCustomSignaling,
+} from '@/uni_modules/unix-openim-sdk'
+
+const signal = {
+ version: 1,
+ eventID: createBusinessEventID(),
+ type: 'hand-raised',
+ userID: currentUserID,
+ sentAt: Date.now(),
+}
+
+await signalingSendCustomSignaling({
+ roomID,
+ customInfo: JSON.stringify(signal),
+})
+```
+
+Promise 成功表示 OpenIMServer 已接受本次发送,不等于其他参与者已经处理该数据。`customInfo` 应保持精简,并包含协议版本和业务幂等 ID。大文件、聊天记录、长期状态和敏感凭据不应放入其中。
+
+## 接收信令
+
+`onReceiveCustomSignal` 和 `onReceiveCustomSignaling` 是兼容不同 Core/商业服务版本的 raw JSON 事件。实际部署只订阅其中真实产生的一种;若为了兼容同时订阅,必须按 `roomID:eventID` 去重。
+
+```uts
+function handleValidatedSignal(payload : string) {
+ try {
+ const event = JSON.parseObject(payload)
+ if (event == null) return
+
+ const eventRoomID = event.getString('roomID')
+ const customInfo = event.getString('customInfo')
+ if (eventRoomID != activeRoomID || customInfo == null) return
+
+ const signal = JSON.parseObject(customInfo)
+ if (signal == null) return
+ applyValidatedCallSignal(eventRoomID, signal)
+ } catch (_) {
+ console.warn('无法解析通话自定义信令')
+ }
+}
+
+const signalSubscription = onReceiveCustomSignal(handleValidatedSignal)
+const signalingSubscription = onReceiveCustomSignaling(handleValidatedSignal)
+
+function removeCustomSignalListeners() {
+ off(signalSubscription)
+ off(signalingSubscription)
+}
+```
+
+解析函数应检查 JSON 结构、协议版本、`eventID`、`type` 和业务字段,再返回已验证的应用内对象。本页是两个兼容事件的完整监听示例归属页。离开通话页、退出登录或切换账号时调用 `removeCustomSignalListeners()`。
+
+自定义信令不承担权限认证。不要信任客户端信令来授予主持人、付费或隐私权限;需要权威校验的状态应由可信后端保存和判断。连接恢复后,通过房间查询或业务后端校准长期状态,不要把自定义信令当作可重放的权威记录。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx
new file mode 100644
index 0000000000..03108ccb66
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx
@@ -0,0 +1,29 @@
+---
+title: '把会话加入分组'
+description: '商业版把多个会话加入一个或多个分组。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups'
+---
+
+`addConversationsToGroups()` 商业版 使用会话 ID 与分组 ID 的集合更新成员关系。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationIDs` | `string[]` | 是 | 要加入分组的会话 ID 列表。 |
+| `conversationGroupIDs` | `string[]` | 是 | 目标会话分组 ID 列表。每个会话会加入每个目标分组。 |
+
+```uts
+import { addConversationsToGroups } from '@/uni_modules/unix-openim-sdk'
+
+await addConversationsToGroups({
+ conversationIDs: [conversationID],
+ conversationGroupIDs: ['group_a'],
+})
+```
+
+两个数组都不能为空,并应先去除空值和重复项。一个会话可以属于多个分组;该操作不会改变会话消息或删除其他分组关系。
+
+## 返回结果
+
+Promise 成功直接返回 Core 的字符串结果,表示成员更新请求已经完成,不等于分组成员事件已经到达。通过 `onConversationGroupMemberAdded` 或重新查询分组确认最终关系;不要在失败时保留仅本地的成员关系。完整 raw 事件处理见[会话分组概览](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups)。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx
new file mode 100644
index 0000000000..7306181217
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx
@@ -0,0 +1,37 @@
+---
+title: '创建会话分组'
+description: '商业版创建自定义会话分组。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group'
+---
+
+`createConversationGroup()` 商业版 创建分组,并可把一个会话作为初始成员。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `name` | `string` | 是 | 分组名称。提交前按产品规则校验空值和长度。 |
+| `order` | `number` | 是 | 分组排序值;排序方向应在业务中保持一致。 |
+| `conversationGroupType` | `OpenIMConversationGroupType` | 是 | 分组类型,使用插件合同允许的值。 |
+| `conversationID` | `string` 或 `null` | 否 | 创建时加入分组的初始会话 ID。 |
+| `ex` | `string` 或 `null` | 否 | 分组扩展字符串,完整覆盖,不会自动合并 JSON。 |
+
+```uts
+import { createConversationGroup } from '@/uni_modules/unix-openim-sdk'
+
+const result = await createConversationGroup({
+ name: '重要会话',
+ order: 100,
+ conversationGroupType: 0,
+ conversationID: conversationID,
+ ex: '',
+})
+
+const group = result?.conversationGroup
+```
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMCreateConversationGroupResult | null`。非空结果的 `conversationGroup` 是新分组快照,也可能为 `null`;先校验非空 `conversationGroupID` 再加入本地索引。
+
+Promise 成功和 `onConversationGroupAdded` 到达是两个阶段。最终列表以 raw 事件触发后的重新查询为准;若指定了初始 `conversationID`,成员关系也应以查询结果校准。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx
new file mode 100644
index 0000000000..f5a55096a9
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx
@@ -0,0 +1,21 @@
+---
+title: '删除会话分组'
+description: '商业版删除指定会话分组。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group'
+---
+
+`deleteConversationGroup()` 商业版 删除一个分组。
+
+参数对象只包含必填的 `conversationGroupID`。删除前应确认该 ID 来自当前账号的分组快照,而不是名称或数组下标。
+
+```uts
+import { deleteConversationGroup } from '@/uni_modules/unix-openim-sdk'
+
+await deleteConversationGroup({ conversationGroupID: groupID })
+```
+
+## 返回结果
+
+Promise 成功直接返回字符串结果,表示删除请求已完成。删除分组不会删除其中的会话或消息,也不会删除会话本身。
+
+UI 应二次确认;成功后通过 `onConversationGroupDeleted` 或重新查询,按 `conversationGroupID` 清理本地分组与成员索引。Promise 失败时不要先行隐藏分组;若事件与本地快照不一致,以重新查询为准。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx
new file mode 100644
index 0000000000..9e5474bad6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx
@@ -0,0 +1,16 @@
+---
+title: '查询会话所属分组'
+description: '商业版按 conversationID 查询其所属会话分组。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id'
+---
+
+`getConversationGroupByConversationID()` 商业版 返回指定会话所属的全部分组。
+
+```uts
+import { getConversationGroupByConversationID } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationGroupByConversationID({ conversationID })
+const groups = result?.conversationGroups ?? []
+```
+
+一个会话可以属于多个分组,不能只读取第一项。按 `conversationGroupID` 去重;空数组表示当前没有所属分组,不是查询失败。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx
new file mode 100644
index 0000000000..d16c842ac8
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx
@@ -0,0 +1,36 @@
+---
+title: '查询分组及会话'
+description: '商业版分页读取一个会话分组及其成员会话。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations'
+---
+
+`getConversationGroupInfoWithConversations()` 商业版 返回分组资料、会话总数和一页会话。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationGroupID` | `string` | 是 | 要查询的会话分组 ID。 |
+| `pagination.pageNumber` | `number` | 是 | 页码;本合同示例从 `1` 开始。 |
+| `pagination.showNumber` | `number` | 是 | 每页会话数量。 |
+
+```uts
+import { getConversationGroupInfoWithConversations } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationGroupInfoWithConversations({
+ conversationGroupID: groupID,
+ pagination: { pageNumber: 1, showNumber: 100 },
+})
+```
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMGetConversationGroupInfoWithConversationsResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `conversationGroup` | `OpenIMConversationGroupItem` 或 `null` | 当前分组资料;为 `null` 时不要继续分页。 |
+| `ConversationTotal` | `number` 或 `null`(可选) | 分组内会话总数;字段名首字母大写,必须按合同读取。 |
+| `conversations` | `OpenIMConversationItem[]` | 当前页会话。 |
+
+分页期间成员可能变化。按 `conversationID` 去重,第一页或成员事件到达时重新建立分页快照;不要用当前数组长度替代 `ConversationTotal`。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx
new file mode 100644
index 0000000000..2c1913aa0a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx
@@ -0,0 +1,24 @@
+---
+title: '查询会话分组'
+description: '商业版按分组查询类型读取会话分组快照。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups'
+---
+
+`getConversationGroups()` 商业版 按 `conversationGroupType` 查询分组。
+
+`conversationGroupType` 是必填的 `OpenIMConversationGroupQueryType`。使用合同允许的查询值,不把分组创建类型、展示 tab 下标或本地枚举直接混用。
+
+```uts
+import { getConversationGroups } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationGroups({ conversationGroupType: 0 })
+const groups = result?.conversationGroups ?? []
+```
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMGetConversationGroupsResult | null`,从 `conversationGroups` 读取分组快照。按非空 `conversationGroupID` 去重并使用 `order` 排序。
+
+### 会话分组字段
+
+`OpenIMConversationGroupItem` 的字段均可空,包括 `conversationGroupID`、`name`、`order`、`ex`、`conversationGroupType`、`hidden`、`unreadCount` 和 `conversationIDs`。先校验 ID 再缓存;`conversationIDs` 可能只是当前快照,需要成员、分页和总数时使用[查询分组及会话](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations)。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx
new file mode 100644
index 0000000000..aeeaf0027c
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx
@@ -0,0 +1,85 @@
+---
+title: '会话分组概览'
+description: '商业版会话分组模型、raw 事件解析和生命周期。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups'
+---
+
+会话分组属于商业版,用于把会话组织为自定义组,并维护名称、顺序、隐藏状态、未读数和成员会话 ID。
+
+## 分组类型
+
+创建分组时使用 `OpenIMConversationGroupType`,查询分组时使用 `OpenIMConversationGroupQueryType`。二者属于不同操作的合同类型,不应把 UI tab 下标直接当作 SDK 类型值。
+
+同一个会话可以属于多个自定义分组。分组只组织会话入口,不复制或移动会话消息;删除分组或移除成员也不会删除会话本身。
+
+## 分组数据
+
+`OpenIMConversationGroupItem` 的字段均可选:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `conversationGroupID` | `string` 或 `null` | 分组稳定标识;非空后才能作为缓存主键。 |
+| `name` | `string` 或 `null` | 分组名称。 |
+| `order` | `number` 或 `null` | 分组排序值。 |
+| `ex` | `string` 或 `null` | 业务扩展字符串,只按已约定格式解析。 |
+| `conversationGroupType` | `number` 或 `null` | 分组类型。 |
+| `hidden` | `boolean` 或 `null` | 当前分组是否隐藏。 |
+| `unreadCount` | `number` 或 `null` | 分组维度的未读数快照。 |
+| `conversationIDs` | `string[]` 或 `null` | 当前返回携带的成员会话 ID;可能不是完整分页结果。 |
+
+读取非空 `conversationGroupID` 后再建立索引;名称、顺序和隐藏状态可以变化,不能用作主键。需要完整成员、会话资料和总数时,调用[查询分组及会话](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations)。
+
+## 可用操作
+
+| 需求 | 页面 |
+| --- | --- |
+| 创建分组并可选加入初始会话 | [创建会话分组](/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group) |
+| 查询分组列表 | [查询会话分组](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups) |
+| 查询分组资料、成员与总数 | [查询分组及会话](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations) |
+| 查询一个会话所属的全部分组 | [查询会话所属分组](/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id) |
+| 加入或移出分组 | [把会话加入分组](/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups)、[把会话移出分组](/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups) |
+| 更新名称、扩展和隐藏状态 | [更新会话分组](/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group) |
+| 调整分组顺序 | [设置会话分组顺序](/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order) |
+| 删除分组 | [删除会话分组](/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group) |
+
+页面首次进入时查询快照,状态变更操作的 Promise 成功后继续等待事件或重新查询。raw 事件没有冻结字段时,不要用本地猜测替代查询结果。
+
+## 监听分组变化
+
+五个分组事件返回 opaque JSON 字符串,不是类型化对象:
+
+```uts
+import {
+ off,
+ onConversationGroupAdded,
+ onConversationGroupChanged,
+ onConversationGroupDeleted,
+ onConversationGroupMemberAdded,
+ onConversationGroupMemberDeleted,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+function refreshFromRawGroupEvent(payload : string) {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) refreshConversationGroups()
+ } catch (_) {
+ console.error('Invalid conversation group event payload')
+ }
+}
+
+const addedSubscription = onConversationGroupAdded(refreshFromRawGroupEvent)
+const subscriptions : Array = [
+ addedSubscription,
+ onConversationGroupChanged(refreshFromRawGroupEvent),
+ onConversationGroupDeleted(refreshFromRawGroupEvent),
+ onConversationGroupMemberAdded(refreshFromRawGroupEvent),
+ onConversationGroupMemberDeleted(refreshFromRawGroupEvent),
+]
+
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+`onConversationGroupAdded`、`onConversationGroupChanged` 和 `onConversationGroupDeleted` 对应分组本身变化;成员新增与删除事件对应会话成员关系。raw payload 没有公开冻结为 DTO,因此这里只验证它是有效 JSON,然后重新查询相关快照。
+
+校验 JSON 后仍不要依赖未冻结字段。事件处理器应快速返回,并以当前登录用户隔离刷新任务;切换账号或 dispose 时先停止旧状态写入,再逐个释放句柄。日志不要输出完整 payload,因为 `ex` 或其他字段可能包含业务数据。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx
new file mode 100644
index 0000000000..b01fadbd12
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx
@@ -0,0 +1,29 @@
+---
+title: '把会话移出分组'
+description: '商业版从一个或多个分组移除多个会话。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups'
+---
+
+`removeConversationsFromGroups()` 商业版 使用与加入相同的成员参数。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationIDs` | `string[]` | 是 | 要移出分组的会话 ID 列表。 |
+| `conversationGroupIDs` | `string[]` | 是 | 要移出的目标分组 ID 列表。 |
+
+```uts
+import { removeConversationsFromGroups } from '@/uni_modules/unix-openim-sdk'
+
+await removeConversationsFromGroups({
+ conversationIDs: [conversationID],
+ conversationGroupIDs: ['group_a'],
+})
+```
+
+两个数组都不能为空,并应先去重。移出分组不会删除会话、消息或该会话在其他分组中的成员关系。
+
+## 返回结果
+
+Promise 成功直接返回字符串结果,表示请求完成,不等于本地分组快照已经更新。随后处理 `onConversationGroupMemberDeleted` 或重新查询分组。重复移除按服务端最终状态处理,不做无限重试,也不在失败时伪造本地成功。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx
new file mode 100644
index 0000000000..9cc520b6d6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx
@@ -0,0 +1,33 @@
+---
+title: '设置会话分组顺序'
+description: '商业版批量更新会话分组排序值。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order'
+---
+
+`setConversationGroupOrder()` 商业版 批量提交分组 ID 与顺序值。
+
+## 参数说明
+
+`conversationGroupOrders` 是非空数组,每项包含:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationGroupID` | `string` | 是 | 要调整的分组 ID。 |
+| `order` | `number` | 是 | 新排序值;同一批次应避免重复值或不稳定规则。 |
+
+```uts
+import { setConversationGroupOrder } from '@/uni_modules/unix-openim-sdk'
+
+await setConversationGroupOrder({
+ conversationGroupOrders: [
+ { conversationGroupID: 'group_a', order: 100 },
+ { conversationGroupID: 'group_b', order: 200 },
+ ],
+})
+```
+
+拖拽结束后一次提交完整受影响集合,避免每次移动都发请求。提交前按 `conversationGroupID` 去重,并用稳定算法计算所有受影响分组的值。
+
+## 返回结果
+
+Promise 成功直接返回字符串结果,表示排序更新请求完成。重新查询分组或等待分组变更事件确认最终排序;并发编辑时以服务端最终 `order` 为准,不只保留本地拖拽顺序。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx
new file mode 100644
index 0000000000..3ce4353023
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx
@@ -0,0 +1,32 @@
+---
+title: '更新会话分组'
+description: '商业版更新分组名称、扩展字段或隐藏状态。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group'
+---
+
+`updateConversationGroup()` 商业版 只更新提供的字段。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationGroupID` | `string` | 是 | 要更新的分组 ID。 |
+| `name` | `string` 或 `null` | 否 | 新分组名称。 |
+| `ex` | `string` 或 `null` | 否 | 新扩展字符串,会完整覆盖旧值。 |
+| `hidden` | `boolean` 或 `null` | 否 | 是否在业务界面隐藏该分组。 |
+
+```uts
+import { updateConversationGroup } from '@/uni_modules/unix-openim-sdk'
+
+const result = await updateConversationGroup({
+ conversationGroupID: groupID,
+ name: '重点跟进',
+ hidden: false,
+})
+```
+
+除 `conversationGroupID` 外,至少提供一个实际更新字段。`ex` 是整段替换,多个模块共用时先读取并合并已有业务字段。
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMUpdateConversationGroupResult | null`,其中 `conversationGroup` 是更新后的分组快照或 `null`。只有非空且带有效 ID 时才立即合并;最终状态通过 `onConversationGroupChanged` 或重新查询校准。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx
new file mode 100644
index 0000000000..e761899491
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx
@@ -0,0 +1,17 @@
+---
+title: '清空会话消息'
+description: '清理指定会话的全部消息并保留会话项。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages'
+---
+
+`clearConversationAndDeleteAllMsg()` 清空指定会话的消息,但保留会话入口。
+
+```uts
+import { clearConversationAndDeleteAllMsg } from '@/uni_modules/unix-openim-sdk'
+
+await clearConversationAndDeleteAllMsg(conversationID)
+```
+
+调用前二次确认,并停止正在进行的历史分页。成功后清空消息 store,再重新查询会话,使用 Core 返回的最新消息、序列与未读状态。
+
+如果连会话也要删除,使用[删除会话及全部消息](/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages)。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx
new file mode 100644
index 0000000000..83d84b96d3
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx
@@ -0,0 +1,15 @@
+---
+title: '清除群聊提及状态'
+description: '通过 setConversation 清除群会话的 groupAtType。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/clear-group-mentions'
+---
+
+群会话中的 @ 提及提示由 `groupAtType` 表示。处理完提及后,通过 `setConversation()` 把它重置为无提及状态。
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, groupAtType: 0 })
+```
+
+使用合同/服务端定义的“无提及”值。该调用只修改会话提示状态,不删除 @ 消息,也不清理未读数。需要标记已读时另调用[标记会话已读](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read)。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx
new file mode 100644
index 0000000000..e7905927c3
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx
@@ -0,0 +1,15 @@
+---
+title: '删除会话及全部消息'
+description: '删除指定会话并清理其全部本地消息。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages'
+---
+
+`deleteConversationAndDeleteAllMsg()` 删除会话及其全部消息。
+
+```uts
+import { deleteConversationAndDeleteAllMsg } from '@/uni_modules/unix-openim-sdk'
+
+await deleteConversationAndDeleteAllMsg(conversationID)
+```
+
+这是不可轻易恢复的操作,调用前必须确认。它不同于隐藏会话,也不同于只清理消息但保留会话。执行期间停止该会话的分页请求,成功后清空对应消息 store 并刷新会话列表。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx
new file mode 100644
index 0000000000..1444f3aebf
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx
@@ -0,0 +1,15 @@
+---
+title: '删除会话'
+description: '删除会话索引并保留其消息数据。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/delete-conversation'
+---
+
+`deleteConversation()` 删除指定会话项。
+
+```uts
+import { deleteConversation } from '@/uni_modules/unix-openim-sdk'
+
+await deleteConversation(conversationID)
+```
+
+该入口与“删除会话并删除全部消息”不同。需要保留本地历史时使用本方法;收到新消息后会话可能再次出现。完成后重新查询或按事件更新会话 store。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx
new file mode 100644
index 0000000000..1e18931166
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx
@@ -0,0 +1,24 @@
+---
+title: '获取总未读数'
+description: '查询总未读快照,并订阅总未读变化事件。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/get-total-unread-count'
+---
+
+`getTotalUnreadMsgCount()` 返回当前账号总未读快照;`onTotalUnreadMessageCountChanged` 持续推送新值。
+
+```uts
+import {
+ getTotalUnreadMsgCount,
+ off,
+ onTotalUnreadMessageCountChanged,
+} from '@/uni_modules/unix-openim-sdk'
+
+const unreadSubscription = onTotalUnreadMessageCountChanged((count) => {
+ setTotalUnread(count)
+})
+
+setTotalUnread((await getTotalUnreadMsgCount()) ?? 0)
+off(unreadSubscription)
+```
+
+先订阅再查询,事件和快照都直接替换总数,不做本地 `+1/-1`。把结果用于 TabBar 与[应用角标](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state)时,仍要考虑系统通知权限。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx
new file mode 100644
index 0000000000..24a5cad623
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx
@@ -0,0 +1,21 @@
+---
+title: '隐藏会话'
+description: '从当前会话列表隐藏一个会话而不删除消息。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/hide-a-conversation'
+---
+
+`hideConversation()` 从会话列表隐藏指定会话。
+
+```uts
+import { hideConversation } from '@/uni_modules/unix-openim-sdk'
+
+await hideConversation(conversationID)
+```
+
+该操作只影响当前登录用户的会话入口,不会删除单聊关系、退出群组或影响其他用户。隐藏不会删除本地或服务端历史消息;后续收到新消息或完成重新同步时,会话可能重新出现在列表中。需要清理会话及消息时选择对应删除 API,并在 UI 中明确差异。
+
+## 调用后的状态变化
+
+Promise 成功表示本次隐藏请求已经完成。调用端可以按 `conversationID` 从当前会话列表移除对应项,但仍需合并 `onConversationChanged`,或重新查询会话列表校准。完整监听见[获取会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)。
+
+不要把隐藏操作描述为删除聊天关系,也不要只操作页面数组而跳过 store;同一会话再次出现时,按 `conversationID` 恢复或更新原状态。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx
new file mode 100644
index 0000000000..52d74b71da
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx
@@ -0,0 +1,17 @@
+---
+title: '隐藏全部会话'
+description: '隐藏当前账号的全部会话但保留消息。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/hide-all-conversations'
+---
+
+`hideAllConversations()` 重置当前账号全部会话的列表状态、未读数、最新消息摘要和草稿,使这些会话不再出现在分页会话列表中。
+
+```uts
+import { hideAllConversations } from '@/uni_modules/unix-openim-sdk'
+
+await hideAllConversations()
+```
+
+这是范围操作,调用前应二次确认。Promise 成功只表示本地会话状态已完成重置;它不会删除本地或服务端消息、群组、好友关系,也不会修改其他客户端的会话。
+
+后续收到新消息或重新建立有效状态时,相应会话仍可能再次出现。完成后重新查询[会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)和[会话总未读数](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count),不要把 Promise 成功当成远端事件或永久删除。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx
new file mode 100644
index 0000000000..69ca3be1c5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx
@@ -0,0 +1,19 @@
+---
+title: '标记全部会话已读'
+description: '清零当前账号的全部会话未读数。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read'
+---
+
+`markAllConversationMessageAsRead()` 标记当前账号的全部会话已读。
+
+```uts
+import { markAllConversationMessageAsRead } from '@/uni_modules/unix-openim-sdk'
+
+await markAllConversationMessageAsRead()
+```
+
+这是范围较大的状态变更,UI 应二次确认。Promise 成功表示 SDK 已完成本次找到的全部未读会话处理,不等于相关会话事件已经到达,也不保证其他客户端界面已同步完成。
+
+完成后不要只把角标设为 0;通过 `onConversationChanged` 按 `conversationID` 合并各会话状态,并通过 `onTotalUnreadMessageCountChanged` 更新总未读数。完整监听分别见[获取会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)和[获取会话总未读数](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count)。必要时重新查询两份快照,处理服务端或其他设备并发产生的新未读消息。
+
+该调用不会删除消息,也不会修改单个会话的消息接收选项。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx
new file mode 100644
index 0000000000..c8f8313c68
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx
@@ -0,0 +1,38 @@
+---
+title: '标记会话已读'
+description: '清理会话未读数,并处理单聊已读回执事件。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/mark-conversation-read'
+---
+
+`markConversationMessageAsRead()` 把指定会话标为已读。本页同时归属单聊已读回执 `onRecvC2CReadReceipt`。
+
+用户打开会话并阅读完当前可见消息后再调用。不要在只预览通知、后台收到消息或尚未展示聊天页时提前标记已读。
+
+```uts
+import {
+ markConversationMessageAsRead,
+ off,
+ onRecvC2CReadReceipt,
+} from '@/uni_modules/unix-openim-sdk'
+
+const receiptSubscription = onRecvC2CReadReceipt((result) => {
+ result.receipts.forEach((receipt) => mergeReadReceipt(receipt))
+})
+
+await markConversationMessageAsRead(conversationID)
+off(receiptSubscription)
+```
+
+商业版还提供 `resetConversationUnread()` 商业版,可把多个会话的未读数重置为指定值:
+
+```uts
+import { resetConversationUnread } from '@/uni_modules/unix-openim-sdk'
+
+await resetConversationUnread({ conversationIDs: [conversationID], num: 0 })
+```
+
+本地会话未读清零与对端收到已读回执不是同一步。Promise、会话变化和回执事件分别处理。
+
+Promise 成功后,通过 `onConversationChanged` 取得最新会话并按 `conversationID` 合并未读数;需要立即校准时重新查询该会话。单聊回执中的 `receipts` 应先定位对端用户对应的单聊,再按每项消息 ID 列表更新已读状态。
+
+群聊中调用本 API 只清理当前账号的会话未读数。需要上报群成员级已读状态时,另见[上报群消息已读](/sdk/uniapp/message/managing-read-status/send-group-read-receipts)。组件卸载、退出登录或切换账号时释放 `receiptSubscription`。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx
new file mode 100644
index 0000000000..215a82190e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx
@@ -0,0 +1,11 @@
+---
+title: '标记会话'
+description: '说明商业版标记会话能力在当前 UTS 合同中的边界。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/mark-conversation'
+---
+
+会话“标记”属于商业版能力,通常与会话分组中的标记组配合使用。锁定的 UTS 合同没有独立 `markConversation` 操作,也没有在 `OpenIMSetConversationParams` 中暴露 `isMarked`。
+
+因此客户端不能通过 `ex` 或其他字段伪造标记。需要修改时应使用商业版业务后端或已确认的上层服务;随后通过[查询会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)和[会话分组](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups)刷新结果。
+
+没有真实写入 API 时,UI 应隐藏或禁用入口,而不是只改本地状态。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx
new file mode 100644
index 0000000000..7f189dfad6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx
@@ -0,0 +1,16 @@
+---
+title: '置顶或取消置顶会话'
+description: '通过 setConversation 修改会话置顶状态。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/pin-conversation'
+---
+
+`setConversation()` 是会话字段的统一更新入口。置顶时只传 `conversationID` 和 `isPinned`。
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, isPinned: true })
+// 取消置顶:isPinned: false
+```
+
+Promise 成功后以 `onConversationChanged` 更新最终会话,不要直接假定本地排序已稳定。未提供的字段保持原值;不要为了置顶而复制并回写整条会话。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx
new file mode 100644
index 0000000000..bceb643137
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx
@@ -0,0 +1,19 @@
+---
+title: '设置阅后即焚时长'
+description: '商业版设置会话的 burnDuration。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-burn-duration'
+---
+
+`burnDuration` 商业版 表示阅后即焚时长,通过 `setConversation()` 更新。
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, burnDuration: 30 })
+```
+
+`burnDuration` 的单位为秒,只描述阅后即焚模式的时长。启用或关闭模式还需要设置 `isPrivateChat`,见[开启或关闭阅后即焚](/sdk/uniapp/conversation/managing-conversations/set-private-chat)。
+
+不要把 `burnDuration` 与服务端消息定期删除周期 `msgDestructTime` 混用,也不要在客户端自行倒计时后直接删除服务端消息;界面应结合消息状态和服务端行为呈现。
+
+Promise 成功表示设置请求完成。通过 `onConversationChanged` 按 `conversationID` 合并最新 `burnDuration`,或重新查询会话确认。关闭能力时按产品协议设置私聊模式和时长,不用本地开关伪造服务端状态。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx
new file mode 100644
index 0000000000..d4e258217b
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx
@@ -0,0 +1,27 @@
+---
+title: '保存会话草稿'
+description: '保存或清空指定会话的本地草稿文本。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-conversation-draft'
+---
+
+`setConversationDraft()` 保存会话草稿;传空字符串清除草稿。
+
+用户离开聊天页、切换会话或输入框内容变化时可以保存草稿。输入过程中先维护编辑器状态并对 SDK 写入做防抖;离开页面前立即提交一次最新文本,避免每次按键写库或旧请求后完成覆盖新草稿。
+
+```uts
+import { setConversationDraft } from '@/uni_modules/unix-openim-sdk'
+
+await setConversationDraft({ conversationID, draftText: editorText })
+```
+
+清空草稿时明确传入空字符串:
+
+```uts
+await setConversationDraft({ conversationID, draftText: '' })
+```
+
+## 调用后的状态变化
+
+Promise 成功表示草稿已经保存。SDK 通过 `onConversationChanged` 同步变化后的会话,按 `conversationID` 合并 `draftText` 和 `draftTextTime`。完整事件注册与清理见[获取会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)。
+
+草稿属于当前设备的会话状态,不应假定同步到其他设备。退出账号时还要清理编辑器内存状态,避免把旧账号草稿带入新账号。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx
new file mode 100644
index 0000000000..ead32260d2
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx
@@ -0,0 +1,20 @@
+---
+title: '设置会话扩展字段'
+description: '通过 setConversation 更新会话 ex。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-conversation-extension'
+---
+
+通过 `setConversation()` 的 `ex` 更新会话扩展字符串。
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({
+ conversationID,
+ ex: JSON.stringify({ color: 'blue' }),
+})
+```
+
+`ex` 是整段替换,不是局部 merge。修改前先读取现值并按业务 schema 合并,避免覆盖其他模块字段。不要存 Token、密钥或仅服务端可见数据。
+
+Promise 成功后以 `onConversationChanged` 或重新查询确认。解析旧版本或未知字段失败时保留原字符串并降级展示。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx
new file mode 100644
index 0000000000..c8dc4fe8ff
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx
@@ -0,0 +1,11 @@
+---
+title: '设置会话备注'
+description: '说明商业版会话备注字段的读取与写入边界。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-conversation-remark'
+---
+
+会话备注属于商业版扩展。当前 `OpenIMConversationItem` 和 `OpenIMSetConversationParams` 没有独立 `remark` 字段,因此本版本插件不能安全写入该能力。
+
+不要把备注编码进 `ex` 冒充标准字段。需要使用时,由商业版业务 API维护,并以业务侧返回作为权威;客户端可在会话 UI 中合并展示。
+
+后续合同若正式增加字段,本页会随 interface/schema 哈希变化重新审核。在此之前,公共和商业客户端都不应调用不存在的 setter。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx
new file mode 100644
index 0000000000..eea7e1d4f6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx
@@ -0,0 +1,15 @@
+---
+title: '设置消息销毁'
+description: '说明商业版会话消息销毁字段的当前写入边界。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-message-destruct'
+---
+
+`OpenIMConversationItem` 包含 `isMsgDestruct` 与 `msgDestructTime` 商业版 状态,但当前 `OpenIMSetConversationParams` 没有这两个写入字段。
+
+服务端消息定期删除由这两个字段共同描述:`isMsgDestruct` 是开关,`msgDestructTime` 是删除周期。它不是阅后即焚;阅后即焚使用 `isPrivateChat` 和 `burnDuration`。
+
+因此本插件版本只能读取并展示服务端返回的销毁状态,不能照搬 Wasm 的 `setConversation({ isMsgDestruct, msgDestructTime })`,也不能通过相近字段或 `ex` 模拟 setter。需要修改时使用已经确认并鉴权的商业业务接口,并在完成后重新查询会话。
+
+达到删除周期后,服务端策略清理的是服务端保存的消息,不代表当前设备或其他已经同步过消息的客户端会立即删除本地副本。客户端卸载重装、清除数据或在新设备同步时,已被服务端清理的消息可能无法再次拉取。
+
+客户端倒计时只负责展示,消息是否真正销毁必须以 Core/服务端状态为准。该页保留与 Wasm 相同的业务边界,但明确记录当前 unix 源码合同没有写入能力,避免发布不存在的 API。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx
new file mode 100644
index 0000000000..70d4e1c6ef
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx
@@ -0,0 +1,19 @@
+---
+title: '设置会话消息接收选项'
+description: '通过 setConversation 修改单个会话的 recvMsgOpt。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-message-receive-option'
+---
+
+`recvMsgOpt` 控制单个会话的消息接收策略,通过 `setConversation()` 更新。
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, recvMsgOpt: 1 })
+```
+
+常用值为 `0`(正常接收并允许通知)和 `2`(接收消息但不通知)。合同类型还允许 `1` 表示不接收消息,但只有产品和服务端明确支持该策略时使用;业务应集中定义含义,不在页面中散落裸数字。
+
+该设置只作用于指定会话。账号级默认策略由 `globalRecvMsgOpt` 设置,见[设置全局消息接收方式](/sdk/uniapp/user/profile/set-global-message-reception)。最终有效行为可能同时受账号级和会话级策略影响。
+
+Promise 成功、`onConversationChanged` 到达和重新查询是三个阶段。更新后按 `conversationID` 合并事件或重新查询确认,不要仅修改当前页面开关。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx
new file mode 100644
index 0000000000..de84660198
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx
@@ -0,0 +1,17 @@
+---
+title: '设置私聊模式'
+description: '商业版通过 setConversation 开启或关闭会话私聊模式。'
+sourcePath: '/sdk/uniapp/conversation/managing-conversations/set-private-chat'
+---
+
+`isPrivateChat` 商业版 通过公共的 `setConversation()` 字段写入。
+
+```uts
+import { setConversation } from '@/uni_modules/unix-openim-sdk'
+
+await setConversation({ conversationID, isPrivateChat: true })
+```
+
+只传本次字段。私聊模式的消息展示、截屏或销毁规则由商业版服务端和客户端产品共同定义;仅设置布尔值不会自动实现所有 UI 安全策略。
+
+最终状态以会话变化事件中的 `isPrivateChat` 为准。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx
new file mode 100644
index 0000000000..0831b772bf
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx
@@ -0,0 +1,82 @@
+---
+title: '会话概览'
+description: '理解会话快照、增量事件、未读数、草稿和会话分组。'
+sourcePath: '/sdk/uniapp/conversation/overview-conversation'
+---
+
+会话是单聊、群聊或其他消息流的本地索引。`conversationID` 是稳定主键;单聊同时有 `userID`,群聊同时有 `groupID`。界面标题、头像和最新消息都是可变快照,不能替代主键。
+
+## 会话标识
+
+`conversationID` 是列表、事件、未读数和消息查询之间的稳定关联键。按目标查询时,单聊使用对端 `userID` 和单聊类型,群聊使用 `groupID` 和对应群会话类型;不要只按 `userID` 或 `groupID` 覆盖其他类型的会话。
+
+会话项中的 `showName` 和 `faceURL` 是当前展示快照。好友备注、群名称或头像变化后它们可能改变;业务不应把展示名称作为缓存主键。
+
+## 会话数据
+
+`OpenIMConversationItem` 主要包含:
+
+| 数据 | 用途 |
+| --- | --- |
+| `conversationType`、`userID`、`groupID` | 判断会话类型和目标。 |
+| `showName`、`faceURL` | 展示标题与头像。 |
+| `unreadCount` | 当前会话未读数。 |
+| `latestMsg`、`latestMsgSendTime` | 最新消息摘要与排序时间。 |
+| `draftText`、`draftTextTime` | 当前设备保存的草稿。 |
+| `isPinned` | 置顶状态。 |
+| `recvMsgOpt` | 会话级消息接收与通知策略。 |
+| `isPrivateChat`、`burnDuration` | 阅后即焚模式和时长。 |
+| `minSeq`、`maxSeq`、`msgDestructTime` | 消息序列与商业版销毁状态边界。 |
+
+`latestMsg` 是序列化消息字符串。解析失败时保留会话并显示降级摘要,不要因为一条未知消息类型删除整个会话。商业版扩展字段在公共环境中可能缺失,使用前判空。
+
+### 排序与展示
+
+会话列表常见排序先处理 `isPinned`,再使用 `latestMsgSendTime`、草稿时间或产品定义的稳定规则。不要使用当前数组下标作为持久顺序;任何新消息、置顶或草稿变化都可能改变位置。
+
+列表摘要应从 `latestMsg` 安全解析已知消息类型。遇到未知 contentType、自定义消息或解析失败时显示通用摘要,并保留未读数、会话目标和进入聊天页的能力。不要把原始 JSON 直接展示给用户或写入公开日志。
+
+### 未读与接收策略
+
+`unreadCount` 是单个会话快照,总未读数由独立 API 与事件维护。标记已读后,分别处理操作 Promise、会话变化和总未读事件;其他设备或服务端并发新消息可能让未读数再次增加。
+
+`recvMsgOpt` 只描述该会话的接收策略,还可能受账号级 `globalRecvMsgOpt` 影响。界面应展示服务端返回的最终会话状态,而不是仅根据用户刚点击的本地开关推断成功。
+
+## 按任务查找页面
+
+| 需求 | 页面 |
+| --- | --- |
+| 分页获取列表并同步新增、变化事件 | [获取会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) |
+| 按用户或群组目标查询会话 | [按目标查询会话](/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target) |
+| 按会话 ID 查询一个或多个会话 | [按会话 ID 查询](/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id) |
+| 搜索本地会话 | [搜索会话](/sdk/uniapp/conversation/retrieving-conversations/search-conversations) |
+| 标记一个或全部会话已读 | [标记会话已读](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read)、[标记全部会话已读](/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read) |
+| 管理草稿、置顶、备注和扩展 | 对应“管理会话”页面 |
+| 使用商业版会话分组 | [会话分组概览](/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups) |
+
+## 删除和清理
+
+隐藏会话、删除会话、删除会话及消息、清空会话消息和清除全部本地消息是不同操作:
+
+- 隐藏只移除列表入口,消息保留,新消息可能让会话重新出现。
+- 删除会话不应被描述为删除好友或退出群组。
+- 删除会话及消息会影响本地会话与消息记录,应在 UI 中二次确认。
+- 清空消息与服务端消息销毁策略也不是同一能力。
+
+选择操作前明确产品语义,Promise 失败时不要先行清除本地状态;完成后用事件或重新查询校准。
+
+## 状态更新
+
+建议数据流如下:
+
+1. 注册 `onNewConversation` 与 `onConversationChanged`,保存各自订阅句柄。
+2. 分页查询会话快照。
+3. 按 `conversationID` 幂等插入或替换事件项。
+4. 按 `isPinned`、时间和业务排序规则展示。
+5. App 恢复、同步完成或重新登录时重新查询,不仅依赖事件。
+
+会话未读数和消息已读是相关但不同的状态。清零会话未读见[标记会话已读](/sdk/uniapp/conversation/managing-conversations/mark-conversation-read),总未读见[获取总未读数](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count)。
+
+查询用于建立快照,事件用于合并增量,Promise 成功只说明当前操作完成。完整监听与句柄清理统一见[获取会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)。
+
+切换账号时先停止旧 store 写入,释放旧订阅并清空会话、未读和草稿内存状态。不要让旧账号分页或事件异步结果写入新账号;商业版依赖插件还应比较 SDK session epoch。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx
new file mode 100644
index 0000000000..3659088783
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx
@@ -0,0 +1,32 @@
+---
+title: '按目标查询会话'
+description: '按目标 ID 和会话类型查询一个会话。'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target'
+---
+
+`getOneConversation()` 使用目标 ID 和 `OpenIMSessionType` 查询单个会话,返回 `OpenIMConversationItem | null`。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `sourceID` | `string` | 是 | 会话目标 ID:单聊为对方 `userID`,群聊为 `groupID`。 |
+| `sessionType` | `OpenIMSessionType` | 是 | 会话类型,使用插件导出的 `OpenIMSessionTypeSingle`、群聊等常量。 |
+
+```uts
+import {
+ OpenIMSessionTypeSingle,
+ getOneConversation,
+} from '@/uni_modules/unix-openim-sdk'
+
+const conversation = await getOneConversation({
+ sourceID: 'user_b',
+ sessionType: OpenIMSessionTypeSingle,
+})
+```
+
+同一个字符串在不同 `sessionType` 下可能表示不同目标,必须同时传入正确类型。不要直接写数字,也不要把 `conversationID` 当成 `sourceID` 传入;已经知道会话 ID 时使用按会话 ID 查询 API。
+
+Promise 成功直接返回 `OpenIMConversationItem | null`。`null` 可能表示本地尚无该会话;发送首条消息或收到消息后,会话可由事件创建。查询本身不会创建会话,也不会触发会话事件。
+
+返回值按 `conversationID` 合并到 store,不要用 `sourceID` 直接覆盖其他会话类型。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx
new file mode 100644
index 0000000000..6c3d4838c0
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx
@@ -0,0 +1,21 @@
+---
+title: '生成会话 ID'
+description: '根据目标 ID 和会话类型取得规范 conversationID。'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id'
+---
+
+`getConversationIDBySessionType()` 返回 Core 使用的规范 `conversationID`,适合在尚未生成会话项时构造路由键。
+
+```uts
+import {
+ OpenIMSessionTypeGroup,
+ getConversationIDBySessionType,
+} from '@/uni_modules/unix-openim-sdk'
+
+const conversationID = await getConversationIDBySessionType({
+ sourceID: 'group_123',
+ sessionType: OpenIMSessionTypeGroup,
+})
+```
+
+不要自行拼接单聊或群聊会话 ID;不同会话类型有各自规则。返回 ID 不代表会话已存在,也不创建服务器数据。需要会话内容时继续调用[按目标查询会话](/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target)或列表查询。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx
new file mode 100644
index 0000000000..ca100ec4bf
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx
@@ -0,0 +1,18 @@
+---
+title: '批量查询会话'
+description: '按 conversationID 列表批量读取会话快照。'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id'
+---
+
+`getMultipleConversation()` 批量查询会话,返回 `OpenIMConversationListResult | null`。
+
+```uts
+import { getMultipleConversation } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getMultipleConversation(['si_user_a_user_b', 'sg_group_123'])
+const conversations = result?.conversations ?? []
+```
+
+结果不保证与输入顺序一致,也可能缺少本地不存在的会话。按 `conversationID` 建立映射。大量 ID 应分批查询,避免一次传入无界数组。
+
+本方法只读取快照,不订阅变化。持续更新仍由[查询会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)归属的事件处理。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx
new file mode 100644
index 0000000000..7ce7c035c1
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx
@@ -0,0 +1,75 @@
+---
+title: '查询会话列表'
+description: '查询完整或分页会话快照,并处理新增与变化事件。'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list'
+---
+
+会话列表应使用 `getConversationListSplit()` 分页建立本地快照。虽然 Private 合同仍导出非分页 `getAllConversationList()` 作为兼容能力,面向真实应用和公开文档的推荐流程统一使用分页,避免会话较多时一次加载全部本地记录。
+
+## 分页获取会话
+
+### 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `offset` | `number` | 是 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` | 是 | 本次读取数量;根据页面和设备性能设置合理上限。 |
+
+```uts
+import {
+ getConversationListSplit,
+ off,
+ onConversationChanged,
+ onNewConversation,
+} from '@/uni_modules/unix-openim-sdk'
+
+const newConversationSubscription = onNewConversation((result) => {
+ result.conversations.forEach((item) => upsertConversation(item.conversationID, item))
+})
+const changedSubscription = onConversationChanged((result) => {
+ result.conversations.forEach((item) => upsertConversation(item.conversationID, item))
+})
+
+const firstPage = await getConversationListSplit({ offset: 0, count: 100 })
+replaceConversationSnapshot(firstPage?.conversations ?? [])
+
+off(newConversationSubscription)
+off(changedSubscription)
+```
+
+Promise 成功直接返回 `OpenIMConversationListResult | null`,从 `conversations` 读取当前页。第一页用于替换当前账号快照;后续页按 `conversationID` 合并。返回 `null` 时不要伪造成功的空列表,应结合登录状态和错误诊断决定保留旧快照还是展示加载失败。
+
+分页时继续增加 `offset`,直到返回数量少于 `count`。在前一页加载期间收到会话事件后,列表排序和分页边界可能变化;应让 store 按主键合并,并在刷新或同步完成时从 offset 0 重新建立快照。不要只把后续页追加到数组后永久依赖旧 offset。
+
+### 会话字段
+
+`OpenIMConversationItem` 中常用字段如下:
+
+| 字段 | 说明 |
+| --- | --- |
+| `conversationID` | 会话稳定主键,列表与事件都按该字段合并。 |
+| `conversationType` | 单聊、群聊或通知会话类型。 |
+| `userID` / `groupID` | 单聊对端用户或群聊群组 ID,根据会话类型使用。 |
+| `showName` / `faceURL` | 当前会话展示名称与头像快照。 |
+| `unreadCount` | 当前会话未读数。 |
+| `latestMsg` | 最新消息序列化字符串;解析失败时保留会话并展示降级摘要。 |
+| `latestMsgSendTime` | 最新消息发送时间,可参与普通会话排序。 |
+| `draftText` / `draftTextTime` | 本地草稿内容和更新时间。 |
+| `isPinned` | 是否置顶。排序时先应用置顶规则,再处理时间。 |
+| `recvMsgOpt` | 会话级消息接收选项。 |
+
+完整字段及商业扩展见[会话概览](/sdk/uniapp/conversation/overview-conversation)。不要根据本地数组位置更新;置顶、最新消息、草稿和未读变化都会改变排序。
+
+### 列表排序
+
+推荐先把分页与事件结果写入以 `conversationID` 为键的映射,再计算展示数组。通常先显示置顶会话,组内按最新消息或草稿时间排序,并为时间相同项提供稳定的 ID 次序。不要直接在事件回调中对页面数组做局部交换。
+
+`latestMsg` 解析失败不影响会话存在。保留该项并显示未知消息摘要;收到后续可识别消息或重新查询时自然更新。
+
+## 保持列表同步
+
+本页是 `onNewConversation` 和 `onConversationChanged` 的完整监听归属页。应先注册事件,再查询第一页,缩小登录同步期间的丢失窗口。两种事件都携带 `OpenIMConversationListResult`,即使通常只变化一个会话,也要遍历全部 `conversations`。
+
+Promise 成功、事件到达和重新查询是不同阶段。App 前台恢复、同步完成、断线重连或切换账号后重新查询快照;退出登录或销毁会话 store 时分别 `off(newConversationSubscription)` 和 `off(changedSubscription)`。
+
+切换账号时,在启动新账号查询前停止旧账号分页请求的状态写入。即使旧 Promise 迟到,也不能把旧 `conversationID` 列表合入新账号;可使用应用账号世代或商业版 `sdkSessionEpoch` 做完成前校验。
diff --git a/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx
new file mode 100644
index 0000000000..51e73a2fc1
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx
@@ -0,0 +1,18 @@
+---
+title: '搜索会话'
+description: '按关键词搜索本地会话。'
+sourcePath: '/sdk/uniapp/conversation/retrieving-conversations/search-conversations'
+---
+
+`searchConversation()` 使用字符串关键词搜索本地会话,返回 `OpenIMConversationListResult | null`。
+
+```uts
+import { searchConversation } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchConversation('Alice')
+renderSearchResults(result?.conversations ?? [])
+```
+
+调用前去除首尾空白,并在输入为空时由 UI 直接展示正常会话列表。搜索结果是查询时快照;会话变化后可重新搜索,或按 `conversationID` 合并最新事件项。
+
+匹配范围由 Core 决定,不要承诺搜索所有消息正文。消息内容搜索使用消息领域的查询 API。
diff --git a/content/zh/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx b/content/zh/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx
new file mode 100644
index 0000000000..8254fdbbe9
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx
@@ -0,0 +1,30 @@
+---
+title: '处理数据迁移事件'
+description: '商业版观察迁移开始、进度、失败与完成事件。'
+sourcePath: '/sdk/uniapp/events/handle-data-migration-events'
+---
+
+四个 migration 事件属于商业版,Android 与 iOS 支持;HarmonyOS 当前全部返回 `platform-unsupported`。它们来自 Core/插件迁移桥,不等同于普通同步事件。
+
+```uts
+import {
+ off,
+ onMigrationFailed,
+ onMigrationFinished,
+ onMigrationProgress,
+ onMigrationStart,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const startSubscription = onMigrationStart(() => showMigrationUI())
+const subscriptions : Array = [
+ startSubscription,
+ onMigrationProgress((payload) => handleValidatedMigrationProgress(payload)),
+ onMigrationFailed((payload) => handleValidatedMigrationFailure(payload)),
+ onMigrationFinished(() => finishMigrationUI()),
+]
+
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+进度和失败 payload 是 opaque 字符串。若为 JSON,先校验再读取;不要向用户或日志暴露内部路径、数据库信息和敏感内容。迁移期间避免并发反初始化或切换账号,完成/失败后重新查询必要快照。
diff --git a/content/zh/docs/chat/sdk/uniapp/events/overview-events.mdx b/content/zh/docs/chat/sdk/uniapp/events/overview-events.mdx
new file mode 100644
index 0000000000..16ecc449e6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/events/overview-events.mdx
@@ -0,0 +1,115 @@
+---
+title: '事件概览'
+description: '注册 uni-app / uni-app x SDK 事件,并按业务生命周期同步连接与数据状态。'
+sourcePath: '/sdk/uniapp/events/overview-events'
+---
+
+`unix-openim-sdk` 通过 `on...()` 函数推送连接、同步、用户、好友、会话、群组、消息和商业信令相关事件。所有事件函数都从 `@/uni_modules/unix-openim-sdk` 扁平导入,不需要为不同领域创建 SDK 实例或原生 listener 对象。
+
+## 注册与移除事件
+
+每次 `on...()` 调用同步返回一个独立的 `OpenIMSDKEventSubscription`,其中包含 `id` 与 `eventName`。应用必须保存该句柄,并在拥有它的页面、状态层或账号作用域结束时传给 `off(subscription)`。
+
+```uts
+import {
+ off,
+ onConnectSuccess,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const connectionSubscription : OpenIMSDKEventSubscription = onConnectSuccess(() => {
+ setConnectionState('connected')
+})
+
+// 拥有该监听的作用域结束时执行。
+off(connectionSubscription)
+```
+
+不要继续使用旧版“监听函数直接返回取消闭包”的写法,也不要调用 `connectionSubscription()`。同一个事件可以有多个订阅者;`off()` 只删除传入句柄对应的处理器,不影响其他模块。
+
+`offAll(eventName)` 会删除指定事件名的全部处理器,只适合应用整体销毁、可控测试重置或明确拥有该事件全部监听的基础设施。普通组件、页面和功能模块不得用它代替局部清理,否则会移除其他消费者的监听。
+
+事件处理器应尽快返回。耗时查询、文件操作和网络请求应进入应用队列,并在写回状态前确认当前登录用户或商业版 session epoch 没有变化。每个事件的完整监听代码只放在下表链接的归属页面,本页不重复其他领域的业务处理器。
+
+## 选择注册时机
+
+| 事件范围 | 建议生命周期 | 对应页面 |
+| --- | --- | --- |
+| 连接和 Token | 在 `login()` 前注册,切换账号时清理 | [认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session) |
+| 用户、好友和黑名单 | 联系人状态层初始化时注册 | [用户概览](/sdk/uniapp/user/overview-user) |
+| 会话列表 | 会话列表状态层初始化时注册 | [获取会话列表](/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list) |
+| 会话未读数 | 应用角标状态层初始化时注册 | [维护总未读数](/sdk/uniapp/conversation/managing-conversations/get-total-unread-count) |
+| 群组列表 | 群组状态层初始化时注册 | [群组概览](/sdk/uniapp/group/overview-group) |
+| 群成员 | 群成员状态层初始化时注册 | [分页查询群成员](/sdk/uniapp/group/retrieving-group-members/get-group-member-list) |
+| 入群申请 | 群申请状态层初始化时注册 | [获取收到的入群申请](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient) |
+| 消息 | 消息状态层初始化时注册 | [接收消息](/sdk/uniapp/message/receiving-messages/receive-messages) |
+| 商业信令 | 通话功能初始化时注册 | [通话事件](/sdk/uniapp/calling/managing-calls/handle-call-events) |
+| SDK session | 依赖唯一 Core 的商业插件初始化时注册 | [更新 Token 与观察 SDK session](/sdk/uniapp/getting-started/update-token-and-observe-sdk-session) |
+
+不要在每次组件渲染、`onShow` 或列表刷新时重复注册。多次注册同一个逻辑会造成重复消息、未读数反复累加,或让旧账号的异步结果写入新账号界面。
+
+查询 API 用于建立页面进入时的快照,事件用于合并后续增量。业务实体应使用稳定标识合并,例如消息使用 `clientMsgID`、会话使用 `conversationID`、好友与黑名单使用 `userID`、群成员使用 `groupID:userID`。不要使用数组下标或展示名称去重。
+
+## 监听初始化同步
+
+登录后 SDK 会同步 OpenIMServer 数据。以下事件适合驱动全局同步状态和进度展示:
+
+| 事件 | 处理器参数 | 含义 |
+| --- | --- | --- |
+| `onSyncServerStart` | `reinstalled: boolean` | 开始同步;布尔值表示本地库是否因重装或等价重建进入同步。 |
+| `onSyncServerProgress` | `progress: number` | 同步进度变化;用于展示,不承诺每个整数都会到达。 |
+| `onSyncServerFinish` | `reinstalled: boolean` | 本轮同步完成,可以重新查询依赖完整数据的页面。 |
+| `onSyncServerFailed` | `reinstalled: boolean` | 本轮同步失败,应记录当前同步上下文并等待重试或连接恢复。 |
+
+```uts
+import {
+ off,
+ onSyncServerFailed,
+ onSyncServerFinish,
+ onSyncServerProgress,
+ onSyncServerStart,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const syncSubscriptions : Array = [
+ onSyncServerStart((reinstalled) => {
+ setSyncState('syncing', 0, reinstalled)
+ }),
+ onSyncServerProgress((progress) => {
+ setSyncProgress(progress)
+ }),
+ onSyncServerFinish((reinstalled) => {
+ setSyncState('ready', 100, reinstalled)
+ refreshVisibleSnapshots()
+ }),
+ onSyncServerFailed((reinstalled) => {
+ setSyncState('failed', 0, reinstalled)
+ }),
+]
+
+function releaseSyncSubscriptions() {
+ syncSubscriptions.forEach((subscription) => off(subscription))
+ syncSubscriptions.length = 0
+}
+```
+
+三个 boolean 回调参数都描述合同定义的重装/同步上下文,不是“操作是否成功”的通用返回值;完成或失败由事件名区分。同步事件描述 Core 的同步生命周期,不是某个查询 API 的 Promise 回调,也没有业务实体合并键;状态应按当前登录用户隔离。
+
+本页是四个同步事件以及 `off()` / `offAll()` 控制语义的归属页。退出登录、切换账号或销毁 SDK 作用域时调用 `releaseSyncSubscriptions()`。同步完成后数据仍会继续变化:重新查询当前页面快照,并继续通过各领域归属页的增量事件更新同一状态层。
+
+## HarmonyOS 不支持事件
+
+商业版 HarmonyOS 的锁定 HAR 缺少以下十个事件,因此订阅会稳定返回 `platform-unsupported`,不会伪造成功回调:
+
+- `onMigrationStart`
+- `onMigrationProgress`
+- `onMigrationFailed`
+- `onMigrationFinished`
+- `onRecvMessageExtensionsAdded`
+- `onRecvMessageExtensionsChanged`
+- `onRecvMessageExtensionsDeleted`
+- `onMessageKvInfoChanged`
+- `onStreamChange`
+- `onGroupApplicationBadgeCountChanged`
+
+平台支持状态和“是否为商业版”是两个独立维度。应用应识别 `platform-unsupported` 并关闭对应入口或采用平台替代方案,不要无限重试,也不要把未发生的事件模拟成成功。
diff --git a/content/zh/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx b/content/zh/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx
new file mode 100644
index 0000000000..9cd32dbd35
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx
@@ -0,0 +1,76 @@
+---
+title: '上传文件'
+description: '上传本地文件、观察进度,并在商业版取消上传。'
+sourcePath: '/sdk/uniapp/file-uploads/upload-file'
+---
+
+`uploadFile()` 是独立上传能力,可用于头像、群头像、资料附件或其他业务文件,不从属于消息,也不会自动创建消息。它上传原生层可读的本地文件,并返回 URL/URI、UUID、大小和媒体信息。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `filepath` | `string` | 是 | 原生层可读取的本地完整路径。 |
+| `name` | `string` | 是 | 文件名。 |
+| `contentType` | `string` | 是 | MIME 类型。 |
+| `uuid` | `string` | 是 | 业务为本次上传生成的稳定任务 ID。 |
+| `cancelID` | `string` 或 `null` | 否 | 用于取消本次上传的稳定 ID。 |
+| `cause` | `string` 或 `null` | 否 | 业务侧记录的上传用途或原因。 |
+
+如果界面需要显示进度,应在调用 `uploadFile()` 前注册进度事件,避免较小文件在监听建立前完成上传。
+
+```uts
+import {
+ off,
+ onUploadFileProgress,
+ uploadFile,
+} from '@/uni_modules/unix-openim-sdk'
+
+const progressSubscription = onUploadFileProgress((event) => {
+ if (event == null) return
+ updateUploadProgress(event.progress)
+})
+
+const result = await uploadFile({
+ filepath: '/data/user/0/app/cache/report.pdf',
+ name: 'report.pdf',
+ contentType: 'application/pdf',
+ uuid: createStableUploadUUID(),
+ cancelID: 'upload-report-1',
+})
+
+function removeUploadListener() {
+ off(progressSubscription)
+}
+```
+
+路径必须是原生可读的完整路径。`unifile://` 先转换为平台沙盒路径;不要把网络 URL 作为 `filepath`。Android 和 iOS 的临时目录、文件授权与生命周期不同,上传完成前不要移动或删除原文件。
+
+## 返回结果
+
+Promise 成功后,结果是 `OpenIMUploadFileResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `url` | `string` 或 `null` | 上传后的远端资源 URL。 |
+| `uri` | `string` 或 `null` | 服务端返回的资源 URI。 |
+| `uuid` | `string` 或 `null` | 本次上传的任务标识。 |
+| `size` | `number` 或 `null` | 文件大小。 |
+| `typ` | `number` 或 `null` | 服务端返回的资源类型。 |
+| `mediaID` | `string` 或 `null` | 媒体资源 ID。 |
+
+使用 `result?.url` 写入头像、群资料或创建对应消息对象。Promise 成功只表示上传请求成功,不表示资料已经更新,也不表示聊天消息已经创建或发送;后续业务写入必须单独完成。
+
+## 监听上传进度
+
+`onUploadFileProgress` 返回 `OpenIMSDKEventSubscription`,事件只包含 `progress`。当前 uni-app / uni-app x 合同不像 Wasm 完成事件那样携带任务 ID,因此不要依赖数组位置关联并行任务;需要精确展示多个并行上传时,应由业务层限制并发或按各自 Promise 状态管理。账号退出或上传状态层销毁时调用 `removeUploadListener()`。
+
+商业版可以通过 `cancelUpload()` 商业版 取消同一 `cancelID`:
+
+```uts
+import { cancelUpload } from '@/uni_modules/unix-openim-sdk'
+
+await cancelUpload({ cancelID: 'upload-report-1' })
+```
+
+取消是异步请求,最终状态以原上传 Promise 和错误码为准。退出页面时不要删除仍被原生层读取的临时文件,先完成或取消上传。
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx
new file mode 100644
index 0000000000..4296c52d19
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx
@@ -0,0 +1,252 @@
+---
+title: '认证与管理登录会话'
+description: '登录 OpenIM、查询登录状态、处理连接与 Token 事件并安全退出当前账号。'
+sourcePath: '/sdk/uniapp/getting-started/authenticate-and-manage-session'
+---
+
+`unix-openim-sdk` 使用 `login()` 建立当前用户的登录会话。开始认证前,请先按照[开始之前](/sdk/uniapp/getting-started/before-you-start)准备 OpenIMServer、用户登录信息、UTS 插件和目标平台原生运行环境,并完成[安装与初始化](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)。
+
+完整登录流程按以下顺序执行:
+
+1. 在 App 作用域初始化唯一的 OpenIM Core。
+2. 在登录前订阅连接、Token 和账号下线事件,避免丢失登录阶段的状态。
+3. 从可信后端取得相互匹配的 `userID` 和 OpenIMSDK Token。
+4. 调用 `login(userID, token)`,等待 Promise 成功,并继续等待 `onConnectSuccess` 确认连接可用。
+5. 连接成功后再查询用户、好友、会话、群组和消息数据。
+6. 用户主动退出或切换账号时调用 `logout()`,然后释放旧账号的订阅并清理应用状态。
+
+## 初始化 SDK
+
+插件安装后,在应用级 service 中调用一次 `initSDK()`。初始化配置、平台常量、`systemType`、SDK 版本和反初始化规则见[安装、初始化与 SDK 信息](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)。
+
+`unix-openim-sdk` 导出扁平函数;业务代码不创建 SDK 实例,也不要让不同页面用不同服务地址重复初始化 Core。OpenIMServer 地址在 `initSDK()` 时固定,当前用户身份在 `login()` 时建立。
+
+### 初始化配置边界
+
+`initSDK()` 接收 `OpenIMInitConfig`,其中包含平台 ID、API 地址、WebSocket 地址、日志选项和必填的 `systemType`。这些字段属于 App 和部署环境,不属于某个用户;切换账号时继续复用同一次初始化,不要把初始化配置拼进 `login()`。
+
+### 理解 UTS 插件
+
+`unix-openim-sdk` 是原生 UTS 插件,不是 JavaScript 单例工厂。插件内部持有唯一 OpenIM Core,uni-app 和 uni-app x 都通过 `@/uni_modules/unix-openim-sdk` 的扁平导出访问它。标准基座未包含插件原生依赖;开发与发布包都必须使用包含该插件的原生构建产物。
+
+## 获取当前用户的登录信息
+
+调用业务后端提供的登录信息接口,取得当前用户的 `userID` 和 Token:
+
+```uts
+const session = await loadOpenIMSDKSession()
+const userID = session.userID
+const token = session.token
+```
+
+`userID` 只是 OpenIMSDK 用户标识,不是认证凭据。Token 必须由可信后端取得并且与该 `userID` 对应;App 不负责创建用户、签发 Token,也不得保存管理员 Token 或服务端 secret。
+
+## 在登录前注册连接事件
+
+连接事件应在 `login()` 前注册。这样可以捕获登录阶段因网络、服务地址、Token 或服务端状态产生的错误,并把连接状态反馈给界面。
+
+```uts
+import {
+ off,
+ onConnectFailed,
+ onConnectSuccess,
+ onConnecting,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const sessionSubscriptions : Array = []
+
+sessionSubscriptions.push(onConnecting(() => {
+ setConnectionState('connecting')
+}))
+
+sessionSubscriptions.push(onConnectSuccess(() => {
+ setConnectionState('connected')
+}))
+
+sessionSubscriptions.push(onConnectFailed((errCode, errMsg) => {
+ setConnectionState('failed')
+ console.error('OpenIM SDK 连接失败', errCode, errMsg)
+}))
+```
+
+`onConnectFailed` 的处理器接收两个独立参数 `errCode` 和 `errMsg`,不是错误对象。每次 `on...()` 调用都返回独立的 `OpenIMSDKEventSubscription`,不能把返回值当作取消函数直接调用。
+
+## 登录当前用户
+
+```uts
+import { login } from '@/uni_modules/unix-openim-sdk'
+
+try {
+ await login(userID, token)
+} catch (error) {
+ console.error('OpenIM SDK 登录失败', userID, error)
+ throw error
+}
+```
+
+### 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `userID` | `string` | 是 | 当前 OpenIMSDK 用户 ID,必须与 Token 对应。它不是昵称、手机号或临时会话 ID。 |
+| `token` | `string` | 是 | 当前用户的 OpenIMSDK Token,由可信后端返回;不要在客户端自行签发。 |
+
+`login()` 的 Promise 成功表示登录请求已经完成;`onConnectSuccess` 表示 SDK 长连接已经可用。两者是不同阶段,不能只因 Promise 成功就立即调用依赖连接的消息、会话、群组或用户 API。
+
+重复点击登录时,应复用正在进行的登录请求及其 Promise,避免并发调用 `login()`。初始化配置中的平台 ID、API 地址和 WebSocket 地址不作为 `login()` 的对象参数重复传入。
+
+## 处理 API 调用结果
+
+插件的异步 API 直接返回 Promise 中的业务值,不使用 Wasm 文档中的 `{ data }` 响应包装。失败时 Promise 会抛出插件错误;业务可记录脱敏后的错误码、方法名和用户 ID,用于与原生日志对应。
+
+```uts
+import { getSelfUserInfo } from '@/uni_modules/unix-openim-sdk'
+
+try {
+ const currentUser = await getSelfUserInfo()
+ if (currentUser != null) {
+ useCurrentUser(currentUser)
+ }
+} catch (error) {
+ console.error('getSelfUserInfo failed', error)
+}
+```
+
+查询 API 的返回值用于建立调用时的快照。状态变更 API 没有可用于刷新界面的业务对象时,应继续根据对应页面说明处理事件或重新查询。Promise 成功、事件到达和重新查询校准是三个不同阶段。
+
+## 查询当前登录状态
+
+`getLoginStatus()` 和 `getLoginUserID()` 都不接收业务参数:
+
+```uts
+import {
+ OpenIMLoginStatusLogged,
+ getLoginStatus,
+ getLoginUserID,
+} from '@/uni_modules/unix-openim-sdk'
+
+const loginStatus = await getLoginStatus()
+if (loginStatus == OpenIMLoginStatusLogged) {
+ const currentUserID = await getLoginUserID()
+ restoreSessionFor(currentUserID)
+}
+```
+
+登录状态常量如下:
+
+| 状态 | 说明 |
+| --- | --- |
+| `OpenIMLoginStatusLogout` | 当前 Core 未登录。 |
+| `OpenIMLoginStatusLogging` | 登录流程正在进行,不要再次发起并行登录。 |
+| `OpenIMLoginStatusLogged` | Core 已登录;仍应结合连接事件判断当前网络连接是否可用。 |
+
+`getLoginUserID()` 返回 Core 当前登录的用户 ID,适合校验应用账号与 SDK 账号是否一致,但不能替代业务身份认证。这两个查询都不会触发连接事件。
+
+切换账号时不要直接用新参数覆盖当前登录。先调用 `logout()` 完成旧账号退出,再清理旧账号的订阅和状态,最后使用新账号调用 `login()`。
+
+## 上报 App 运行状态
+
+Android、iOS 与 HarmonyOS 的前后台和网络状态应在 App 级生命周期中上报。进入后台时向 `setAppBackgroundStatus()` 传 `true`,回到前台时传 `false`;设备网络恢复或网络类型变化时调用 `networkStatusChanged()`。
+
+```uts
+import {
+ networkStatusChanged,
+ setAppBackgroundStatus,
+} from '@/uni_modules/unix-openim-sdk'
+
+async function reportAppBackground() {
+ await setAppBackgroundStatus(true)
+}
+
+async function reportAppForeground() {
+ await setAppBackgroundStatus(false)
+}
+
+async function reportNetworkAvailable() {
+ await networkStatusChanged()
+}
+```
+
+`setAppBackgroundStatus()` 和 `networkStatusChanged()` 只报告运行环境变化,不会建立新的登录会话,也不能替代 `login()` 或 Token 刷新。普通页面进入、退出时不要重复调用这些 App 级操作。
+
+如何把这些函数连接到 uni-app / uni-app x 生命周期,以及如何处理 Badge 和 FCM Token,见[处理 App 生命周期与设备状态](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state)。
+
+## 处理 Token 生命周期
+
+OpenIMSDK Token 由可信后端签发。公共流程在 Token 过期或无效时重新向后端取 Token,并按产品策略重新认证;商业版还可以使用 `updateToken()` 热更新,见[更新 Token 与观察 SDK session](/sdk/uniapp/getting-started/update-token-and-observe-sdk-session)。
+
+```uts
+import {
+ onUserTokenExpired,
+ onUserTokenInvalid,
+} from '@/uni_modules/unix-openim-sdk'
+
+sessionSubscriptions.push(onUserTokenExpired(() => {
+ requestFreshTokenAndRelogin()
+}))
+
+sessionSubscriptions.push(onUserTokenInvalid((errCode, errMsg) => {
+ console.warn('OpenIM SDK Token 无效', errCode, errMsg)
+ redirectToSignIn()
+}))
+```
+
+`onUserTokenInvalid` 与 `onConnectFailed` 一样接收 `(errCode, errMsg)`。这些值只用于诊断和界面提示,不应据此绕过重新认证。不要在日志或事件状态中保存 Token。
+
+### Token 模型
+
+客户端 `login()` 接收的是当前用户的 OpenIMSDK Token。Token 的签发、有效期、刷新、撤销和多端策略由业务后端与 OpenIMServer 配置决定。若产品需要短期会话或一次性登录,应在后端实现,并让 App 根据 Token 生命周期事件重新认证。
+
+## 处理账号被强制下线
+
+还应订阅账号被踢下线事件。该事件通常表示同一账号在其他客户端登录,或服务端策略要求当前端结束会话。
+
+```uts
+import { onKickedOffline } from '@/uni_modules/unix-openim-sdk'
+
+sessionSubscriptions.push(onKickedOffline(() => {
+ clearCurrentAccount()
+ showSignedInElsewhereDialog()
+}))
+```
+
+收到 `onKickedOffline` 时,SDK 已进入下线流程,不要再并发调用 `logout()`。处理器只清理应用保存的当前用户、会话、消息视图和页面状态,再根据产品策略提示重新登录。
+
+## 主动退出 OpenIM
+
+用户主动退出或切换账号时调用 `logout()`,再清理当前用户的会话列表、消息视图、未读数和业务状态。被 `onKickedOffline` 强制下线不属于主动退出,不执行这里的 `logout()` 流程。
+
+```uts
+import { logout } from '@/uni_modules/unix-openim-sdk'
+
+await logout()
+releaseSessionSubscriptions()
+clearCurrentAccount()
+```
+
+`logout()` 的 Promise 成功表示当前 SDK 登录会话已经退出。切换账号时先等待旧账号退出完成,再清理旧状态和订阅,然后注册新账号作用域的事件并调用 `login()`。不要让两个账号的登录与退出流程并发执行。
+
+### 仅断开 WebSocket
+
+插件不提供“仅断开 WebSocket、但保留登录会话”的公共操作。前后台或网络变化通过 App 生命周期 API 上报;需要主动结束用户会话时使用 `logout()`。
+
+## 清理登录相关事件监听
+
+本页是连接、Token 和账号下线事件的完整监听归属页。退出登录、切换账号或销毁拥有这些监听的应用 service 时,逐个传给 `off(subscription)`:
+
+```uts
+function releaseSessionSubscriptions() {
+ sessionSubscriptions.forEach((subscription) => off(subscription))
+ sessionSubscriptions.length = 0
+}
+```
+
+连接事件没有业务实体合并键,应按当前 Core 和登录用户隔离状态。业务页面首次进入时通过查询 API 建立快照,再通过各领域事件合并增量。
+
+## 下一步
+
+- [开始之前](/sdk/uniapp/getting-started/before-you-start)
+- [发送第一条消息](/sdk/uniapp/getting-started/send-first-message)
+- [事件概览](/sdk/uniapp/events/overview-events)
+- [日志](/sdk/uniapp/logger)
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx
new file mode 100644
index 0000000000..399453606e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx
@@ -0,0 +1,93 @@
+---
+title: '开始之前'
+description: '准备 OpenIMServer、用户登录信息、UTS 插件和目标平台原生运行环境,再开始认证或发送消息。'
+sourcePath: '/sdk/uniapp/getting-started/before-you-start'
+---
+
+在 uni-app / uni-app x App 中接入 `unix-openim-sdk` 前,需要先准备设备可访问的 OpenIMServer、可信的用户认证流程、UTS 插件和目标平台原生构建环境。这些条件同时适用于[认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session)和[发送第一条消息](/sdk/uniapp/getting-started/send-first-message)。Web、H5 和小程序不能使用本 UTS 原生插件。
+
+## 准备 OpenIMServer
+
+如果还没有可用的 OpenIMServer,先按 [Docker 部署指南](/docs/guides/quick-deployment/docker)完成部署,并确认实际 Android、iPhone 或 HarmonyOS 设备可以访问 `apiAddr` 与 `wsAddr`。
+
+初始化 SDK 需要以下两个服务地址:
+
+| 字段 | 说明 |
+| --- | --- |
+| `apiAddr` | OpenIMServer 的 HTTP API 地址,用于登录、同步和资源请求。生产 App 应使用设备可访问且证书有效的 HTTPS 地址。 |
+| `wsAddr` | OpenIMServer 的 WebSocket 地址,用于建立长连接和接收实时事件。生产 App 通常使用 WSS 地址。 |
+
+不要只验证服务在服务器本机或开发 Mac 上能够访问。真机不能使用开发机的 `localhost`;还应从实际设备核对局域网或公网路由、TLS 证书、反向代理和 WebSocket 升级。
+
+公共版客户端可以连接公共 OpenIMServer。若要使用信令、session、翻译或其他标记为商业版的能力,服务端也必须部署对应商业能力;不能用公共服务端的失败结果判断商业 API 的客户端实现。
+
+## 准备用户和 Token
+
+`userID` 标识 OpenIMSDK 用户,Token 用于认证当前用户。创建或绑定 OpenIMSDK 用户、签发 Token 和校验业务权限都应由可信后端完成,App 不能保存管理员 Token、secret 或其他服务端凭据。
+
+后端接入 OpenIMServer REST API 前,可先阅读[准备使用 Platform API](/platform-api/prepare-to-use-api)和[签发会话 Token](/platform-api/user/managing-session-tokens/issue-a-session-token)。如果产品已有账号体系,后端应把业务账号与 OpenIMSDK `userID` 建立稳定映射,并确保返回的 Token 与该 `userID` 对应。
+
+建议由业务后端提供登录信息接口,App 只取得 SDK 登录所需的最小数据:
+
+```uts
+type OpenIMSDKSession = {
+ userID : string
+ token : string
+}
+
+async function loadOpenIMSDKSession() : Promise {
+ const response = await uni.request({
+ url: `${businessApiURL}/openim/session`,
+ method: 'POST',
+ })
+
+ if (response.statusCode != 200) {
+ throw new Error('Failed to load OpenIM SDK session')
+ }
+
+ return parseTrustedSessionResponse(response.data)
+}
+```
+
+业务接口必须先验证当前业务账号,再返回与该账号对应的 OpenIMSDK 登录信息;不能接受客户端任意传入的 `userID` 后直接为其签发 Token。`apiAddr` 和 `wsAddr` 通常作为受控的 App 环境配置传给 `initSDK()`,不需要随每次用户登录响应改变。
+
+## 准备 UTS 插件与原生运行环境
+
+把插件安装在项目的 `uni_modules/unix-openim-sdk`。使用 HBuilderX/uni-app `5.23` 系列,并按目标平台准备原生环境:
+
+| 宿主 | Android | iOS | HarmonyOS |
+| --- | --- | --- | --- |
+| uni-app Vue 2 / Vue 3 | 支持,API 21+ | 支持,iOS 14+ | 暂不宣称支持 |
+| uni-app x | 支持,API 21+ | 支持,iOS 14+ | 商业版支持,API 24 |
+| Web / H5 / 小程序 | 不支持 | 不支持 | 不支持 |
+
+- Android 需要匹配的 JDK、Android SDK 和插件声明的 AAR/Maven 依赖,并为目标设备包含正确 ABI。
+- iOS 需要匹配的 Xcode/CocoaPods,最终 App 必须正确链接、嵌入并签名插件 XCFramework。
+- HarmonyOS 仅声明 uni-app x 商业版支持,使用与插件合同一致的 HAR 和 API 24 工程。
+
+标准基座不包含这些原生依赖。开发阶段应构建包含插件的自定义基座,或使用项目提供的本地 Android/iOS 原生构建流程。不要把公共版和商业版的原生制品混装在同一个插件目录,也不要直接修改 SDK 的数据库或原生缓存文件。
+
+不同宿主的生命周期、类型与文件路径差异见[按宿主和平台接入](/sdk/uniapp/getting-started/environment-specific-implementation)。
+
+## 选择平台标识
+
+`initSDK()` 的 `platformID` 使用插件导出的常量,不直接填写数字:Android 使用 `OpenIMPlatformAndroid`,iPhone 使用 `OpenIMPlatformIOS`,HarmonyOS 使用 `OpenIMPlatformHarmony`。
+
+初始化还必须提供 `systemType`,例如 `android`、`ios` 或 `harmony`。平台常量和 `systemType` 应与实际运行目标匹配;它们会参与服务端多端登录策略和原生运行诊断。
+
+## 发布前检查
+
+正式发布前,应在产品实际支持的平台和网络环境中验证:
+
+- `initSDK()` 成功,随后 `login()` 成功并收到 `onConnectSuccess`。
+- App 前后台、网络断开恢复、Token 失效和被踢下线符合产品状态机。
+- Android 安装包没有重复 class/JNI,并包含目标设备 ABI。
+- iOS 真机包可以完成 link/embed/sign,权限说明和隐私清单完整。
+- HarmonyOS 使用精确匹配合同的商业 HAR,并对平台不支持能力返回明确错误。
+- 两个不同账号能完成普通消息收发、历史查询和退出后的状态隔离。
+- 商业版连接对应商业服务端,完成所启用能力的真实链路测试。
+- 日志、截图和自动化证据不包含 Token、secret、完整私聊内容或不必要的本机绝对路径。
+
+## 继续接入
+
+准备完成后,先完成[安装、初始化与 SDK 信息](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)和[认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session)。确认连接成功后,再按照[发送第一条消息](/sdk/uniapp/getting-started/send-first-message)准备单聊用户或群组目标并验证消息链路。
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx
new file mode 100644
index 0000000000..a7f4f7f201
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx
@@ -0,0 +1,170 @@
+---
+title: '按宿主和平台接入'
+description: '区分 uni-app、uni-app x、Android、iOS 与 HarmonyOS 的调用、生命周期和原生构建边界。'
+sourcePath: '/sdk/uniapp/getting-started/environment-specific-implementation'
+---
+
+`unix-openim-sdk` 的业务函数在 uni-app 与 uni-app x 中保持一致,差异主要发生在语言类型、页面生命周期、文件路径和原生构建方式。所有宿主都从同一个插件根路径扁平导入,且共享宿主进程中唯一的 OpenIM Core。
+
+## 支持矩阵
+
+| 宿主 | Android | iOS | HarmonyOS |
+| --- | --- | --- | --- |
+| uni-app Vue 2 / Vue 3 | API 21+ | iOS 14+ | 暂不宣称支持 |
+| uni-app x | API 21+ | iOS 14+ | 商业版 API 24 |
+| Web / H5 / 小程序 | 不支持 | 不支持 | 不支持 |
+
+接入和本地编译使用 HBuilderX/uni-app `5.23` 系列。公共与商业能力是否可用还取决于所安装的插件版本、原生制品和 OpenIMServer 部署,不能只根据宿主名称判断。
+
+## 使用统一插件入口
+
+uni-app 和 uni-app x 都从 `@/uni_modules/unix-openim-sdk` 导入。不要使用裸包名,也不要直接导入 `utssdk/app-android`、`app-ios` 或 HarmonyOS 实现。
+
+```uts
+import {
+ getLoginStatus,
+ off,
+ onConnectSuccess,
+} from '@/uni_modules/unix-openim-sdk'
+```
+
+Promise 成功直接返回业务值,不读取 `{ data }`;事件返回 `OpenIMSDKEventSubscription`,使用 `off(subscription)` 清理。
+
+## uni-app Vue 2 / Vue 3
+
+传统 uni-app 页面可以在 Vue 2 或 Vue 3 生命周期中调用插件。JavaScript 不提供 UTS 的完整静态类型检查,但 Promise 返回值和事件句柄语义相同。建议把 SDK 初始化、登录和全局监听放在应用级 service 中,避免页面反复初始化。
+
+```javascript
+import {
+ getLoginStatus,
+ off,
+ onConnectSuccess,
+} from '@/uni_modules/unix-openim-sdk'
+
+const connectSubscription = onConnectSuccess(() => {
+ console.log('OpenIM connected')
+})
+
+const status = await getLoginStatus()
+
+// 拥有监听的应用 service 销毁时执行。
+off(connectSubscription)
+```
+
+Vue 组件销毁只释放该组件或 service 拥有的订阅,不调用 `unInitSDK()`。若多个页面依赖同一事件,优先由 store 统一订阅并向页面分发状态。
+
+## uni-app x
+
+uni-app x 使用 UTS 类型。初始化参数、消息对象和事件 payload 应直接导入插件公开类型,不要复制一套会随 SDK 漂移的本地接口。
+
+```uts
+import {
+ getLoginStatus,
+ type OpenIMLoginStatus,
+} from '@/uni_modules/unix-openim-sdk'
+
+const status : OpenIMLoginStatus = await getLoginStatus()
+```
+
+UTS 的可空值需要显式处理。若返回类型是 `OpenIMUserInfo | null` 或结果包装中的数组可空,不要用不安全强制转换绕过合同。
+
+商业信令事件返回 raw JSON 字符串。先确认字符串非空,再通过经过校验的 UTS JSON 解析读取已知字段;不要把未经校验的 `UTSJSONObject` 强制转换成完整业务 DTO。
+
+## App 生命周期
+
+SDK Core 在 App 作用域只初始化一次。页面进入和退出只管理该页面拥有的订阅;用户切换账号时先退出旧账号、清理旧订阅与状态,再登录新账号;App 确定不再使用 SDK 时才反初始化。
+
+前后台、网络、Badge 与推送状态应由 App 生命周期统一上报,不要让多个页面重复调用。完整示例见[处理 App 生命周期与设备状态](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state)。
+
+## Android
+
+Android 最低 API 21。构建产物需要包含插件声明的 Maven/AAR 依赖和目标 ABI;标准基座没有这些原生制品,应使用包含插件的自定义基座或本地原生工程。
+
+发布前至少检查:
+
+- manifest merge 后的网络、通知和存储等权限符合产品需求。
+- 每个目标 ABI 只有一套 OpenIM Core native library。
+- release/R8 构建没有 duplicate class、duplicate JNI 或反射裁剪问题。
+- 真机可以访问 `apiAddr` / `wsAddr`,后台恢复符合系统限制。
+
+SDK 不会自动替业务申请相册、相机、麦克风或通知权限。普通 IM 功能按实际使用场景声明;AV Runtime 的媒体权限属于另一个插件边界。
+
+## iOS
+
+iOS 最低版本为 14。构建时需要正确链接、嵌入并签名插件 XCFramework;使用与插件版本匹配的 CocoaPods/Xcode 环境。
+
+发布前在真机检查 framework slice、embed/sign、隐私清单、权限说明和 App Store 构建。模拟器通过不能替代 device arm64 链接。若宿主还安装其他原生插件,应扫描重复 framework 和同名 module。
+
+SDK 日志和数据库位于应用沙盒中。不要把模拟器绝对路径写入业务配置,也不要直接移动或修改 Core 数据库。
+
+## HarmonyOS
+
+HarmonyOS 仅声明 uni-app x 商业版支持,最低 API 24,并要求与插件合同一致的商业 HAR。
+
+当前以下操作稳定返回 `platform-unsupported`:
+
+- `updateFcmToken`
+- `updateToken`
+- `translateText`
+- `translateMessage`
+
+十个不支持事件只返回 unsupported subscription,不会伪造回调,完整清单见[事件概览](/sdk/uniapp/events/overview-events)。平台不支持不等于商业版鉴权失败;业务应按稳定错误区分能力缺失、登录状态、网络和服务端错误。
+
+## 文件路径
+
+图片、语音、视频和文件消息使用本机可读的完整路径。`unifile://`、相册临时地址或页面沙盒虚拟路径应先通过 uni API 转换为原生 Core 可访问的本地路径。
+
+- 不要把 HTTP URL 当作本地路径传给 `by-file` / full-path 创建接口。
+- 确认临时文件在消息创建和上传完成前不会被系统清理。
+- iOS 与 Android 沙盒路径不同,不要把一个平台的绝对路径持久化后交给另一平台。
+- 文件访问、相册和媒体权限由宿主申请并向用户解释。
+
+对应消息页会分别说明 URL 创建与本地完整路径创建的区别。
+
+## 本地构建与自定义基座
+
+原生 UTS 插件必须进入原生编译。开发时可选择:
+
+1. 使用 HBuilderX 5.23 构建包含插件的自定义基座。
+2. 使用项目维护的 Android/iOS 本地原生工程完成编译、安装和自动化测试。
+
+本地流程应锁定 HBuilderX、DCloud 原生 SDK、JDK/Android SDK、Xcode/CocoaPods 和插件版本,避免“开发机能跑但发布包使用另一套依赖”。标准基座只能用于不含该原生插件的页面,不能据此判断 SDK 能力。
+
+### 共享 SDK service
+
+建议在业务代码中封装一个 App 级 SDK service,统一负责初始化状态、当前登录用户、全局订阅句柄和销毁顺序。页面只调用这个 service 的业务方法并订阅应用状态,不自行决定 Core 是否需要重新初始化。
+
+该 service 仍应暴露插件的真实 Promise 与错误语义:不要重新包装成 Wasm 的 `{ data }`,不要吞掉 `platform-unsupported`,也不要用 `offAll()` 清理并非自己拥有的监听。切换账号时先停止旧账号写入,再等待 `logout()`、释放旧句柄、清空状态,最后登录新账号。
+
+## 不适用范围
+
+本插件不支持 Web、H5 和小程序。它依赖 Android、iOS 或 HarmonyOS 原生 Core、本地数据库和原生网络生命周期,不能通过条件编译把同一导入直接运行在浏览器。
+
+若同一项目还有 H5 或小程序端,应在业务适配层选择相应 Web/Wasm/小程序 SDK,并分别管理初始化、登录、事件和存储,不要让两个 SDK 实例竞争同一 App 端登录状态。
+
+## 验证与排查
+
+- 在目标平台确认 `initSDK()` 成功,`login()` 后收到 `onConnectSuccess`。
+- 验证查询 API 直接返回业务值,事件句柄可以在异步使用后通过 `off()` 清理。
+- 真机验证网络断开恢复、前后台、被踢、Token 失效和重新登录。
+- 文件消息在 release 包中使用真实相册/文件路径测试,不只验证固定沙盒样例。
+- 商业 API 连接商业服务端;HarmonyOS 对不支持能力明确返回错误。
+- Android/iOS 最终安装包执行重复原生依赖、签名和 ABI/slice 扫描。
+
+## 常见问题
+
+| 现象 | 可能原因 | 处理方式 |
+| --- | --- | --- |
+| 标准基座提示原生插件不可用 | 基座未包含插件原生依赖 | 构建自定义基座或使用本地原生工程。 |
+| 真机无法连接、模拟器可以 | 服务地址使用 `localhost`、TLS 或局域网路由不通 | 从真机验证 API/WSS 地址、证书和反向代理。 |
+| 事件重复执行 | 页面或 `onShow` 重复注册,旧句柄未释放 | 把监听提升到稳定 service,并逐个 `off(subscription)`。 |
+| 文件创建失败 | 传入 `unifile://`、临时 URL 或 Core 无权读取的路径 | 转换为原生可读完整路径并保证文件生命周期。 |
+| HarmonyOS 某 API 始终失败 | 锁定 HAR 没有该能力 | 识别 `platform-unsupported`,关闭入口或采用替代流程。 |
+| iOS 模拟器成功、真机链接失败 | device slice、embed、签名或最低版本不匹配 | 用 iPhone device 构建检查 XCFramework 与签名。 |
+
+## 下一步
+
+- [开始之前](/sdk/uniapp/getting-started/before-you-start)
+- [安装、初始化与 SDK 信息](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)
+- [认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [处理 App 生命周期与设备状态](/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state)
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx
new file mode 100644
index 0000000000..43cda709c1
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx
@@ -0,0 +1,48 @@
+---
+title: '处理 App 生命周期、角标与推送 Token'
+description: '把 App 前后台、网络、角标和 FCM Token 接入 OpenIM SDK。'
+sourcePath: '/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state'
+---
+
+生命周期上报应由应用级 service 统一负责,而不是每个聊天页面分别调用。前后台和网络变化使用认证页说明的 `setAppBackgroundStatus()` 与 `networkStatusChanged()`;本页说明应用角标和 FCM Token。
+
+## 设置应用未读角标
+
+```uts
+import { setAppBadge } from '@/uni_modules/unix-openim-sdk'
+
+await setAppBadge(totalUnreadCount)
+```
+
+`setAppBadge()` 把当前应用总未读数同步给 SDK/平台侧。业务仍应订阅总未读事件维护自己的 UI;Promise 成功不代表桌面角标在所有系统设置下都可见。传 `0` 清除角标。
+
+## 更新 FCM Token
+
+```uts
+import { updateFcmToken } from '@/uni_modules/unix-openim-sdk'
+
+await updateFcmToken({
+ fcmToken: deviceFcmToken,
+ expireTime: tokenExpireUnixSeconds,
+})
+```
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `fcmToken` | `string` | 推送服务为当前设备签发的 Token。 |
+| `expireTime` | `number` | Token 到期 Unix 时间;按服务端协议使用秒级时间。 |
+
+只在取得或刷新有效设备 Token 后调用。不要把 FCM Token 写入公开日志,也不要用 IM Token 代替设备推送 Token。
+
+HarmonyOS 当前不实现 `updateFcmToken`,调用会返回 `platform-unsupported`。这属于平台能力缺失,不是商业版鉴权问题;Harmony 推送应由业务使用其平台方案接入。
+
+## 推荐时序
+
+1. App 启动并初始化 SDK。
+2. 注册账号与消息事件,登录当前用户。
+3. 推送服务返回设备 Token 后调用 `updateFcmToken()`。
+4. 总未读事件到达时更新应用状态并调用 `setAppBadge()`。
+5. App 前后台、网络变化时调用对应生命周期 API。
+6. 退出账号时清空业务角标与推送关联,再清理账号作用域监听。
+
+推送到达只表示系统通知链路工作;消息列表仍应通过 SDK 新消息事件和历史查询恢复,不能只依赖通知 payload。
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx
new file mode 100644
index 0000000000..e51e392ac1
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx
@@ -0,0 +1,77 @@
+---
+title: '安装、初始化与 SDK 信息'
+description: '安装 UTS 插件,初始化唯一 OpenIM Core,并查询 SDK 版本和数据目录。'
+sourcePath: '/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk'
+---
+
+项目安装 `uni_modules/unix-openim-sdk` 后,在应用级 service 中初始化一次。插件导出扁平函数,不需要也不允许创建第二个 SDK 实例。
+
+## 初始化
+
+```uts
+import {
+ OpenIMLogLevelInfo,
+ OpenIMPlatformAndroid,
+ initSDK,
+ type OpenIMInitConfig,
+} from '@/uni_modules/unix-openim-sdk'
+
+const config : OpenIMInitConfig = {
+ platformID: OpenIMPlatformAndroid,
+ apiAddr: 'https://im-api.example.com',
+ wsAddr: 'wss://im-ws.example.com',
+ logLevel: OpenIMLogLevelInfo,
+ isLogStandardOutput: true,
+ systemType: 'android',
+}
+
+const initialized = await initSDK(config)
+if (!initialized) {
+ throw new Error('OpenIM SDK initialization was not accepted')
+}
+```
+
+iOS 改用 `OpenIMPlatformIOS` 和 `systemType: 'ios'`;HarmonyOS 改用 `OpenIMPlatformHarmony` 和 `systemType: 'harmony'`。生产环境建议关闭标准输出或降低日志级别,并按合规要求配置 `logFilePath`。
+
+### `OpenIMInitConfig`
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `platformID` | `OpenIMPlatform` | 使用插件导出的平台常量。 |
+| `apiAddr` | `string` | OpenIMServer HTTP API 地址。 |
+| `wsAddr` | `string` | OpenIMServer WebSocket 地址。 |
+| `dataDir` | `string` 或 `null`(可选) | Core 数据目录;通常让插件使用平台默认值。 |
+| `logFilePath` | `string` 或 `null`(可选) | 日志目录或文件路径,按平台产物约定配置。 |
+| `logLevel` | `OpenIMLogLevel` | 使用 `OpenIMLogLevelError`、`OpenIMLogLevelInfo` 等常量。 |
+| `isLogStandardOutput` | `boolean` | 是否把 SDK 日志输出到系统控制台。 |
+| `systemType` | `string` | 必填的系统说明,初始化示例不得省略。 |
+
+同一进程不要用不同服务地址并发初始化。切换环境应先退出账号、清理业务状态并反初始化,再用新配置启动。
+
+## 查询版本与数据路径
+
+`getSdkVersion()` 和 `getOpenIMDataPath()` 是同步本地操作:
+
+```uts
+import {
+ getOpenIMDataPath,
+ getSdkVersion,
+} from '@/uni_modules/unix-openim-sdk'
+
+const version = getSdkVersion()
+const dataPath = getOpenIMDataPath()
+```
+
+数据路径仅用于诊断、备份策略和空间排查。不要直接打开、迁移或修改其中的数据库文件,也不要把完整沙盒路径作为公开日志字段。
+
+## 反初始化
+
+```uts
+import { unInitSDK } from '@/uni_modules/unix-openim-sdk'
+
+unInitSDK()
+```
+
+`unInitSDK()` 返回 `void`。调用前先停止新的业务请求、退出当前账号并释放全部订阅。普通页面卸载、AV Runtime 关闭或暂时进入后台都不应反初始化 IM SDK。
+
+初始化完成后,进入[认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session)。
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx
new file mode 100644
index 0000000000..0d5aefb97c
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx
@@ -0,0 +1,153 @@
+---
+title: '发送第一条消息'
+description: '在 uni-app / uni-app x App 中初始化 SDK、登录并验证单聊或群聊的首条文本消息。'
+sourcePath: '/sdk/uniapp/getting-started/send-first-message'
+---
+
+本页说明如何在 uni-app / uni-app x App 中安装并初始化 `unix-openim-sdk`,登录后发送第一条文本消息。开始前,请先完成[开始之前](/sdk/uniapp/getting-started/before-you-start)列出的服务、用户、Token、插件和原生构建环境准备。
+
+OpenIMSDK 消息的发送对象可以是用户或群组。单聊消息使用目标用户 `recvID`;群聊消息使用目标群组 `groupID`。
+
+## 准备消息目标
+
+单聊测试需要一个已存在的接收方用户。群聊测试需要一个已存在并且当前用户有权发言的 `groupID`;发送群聊消息时不再传接收方用户 ID,也不需要指定某个群成员。
+
+| 场景 | 需要准备的目标标识 |
+| --- | --- |
+| 单聊 | 已存在的接收方用户 ID,发送时写入 `recvID`,`groupID` 为空字符串。 |
+| 群聊 | 已存在的群 ID,发送时写入 `groupID`,`recvID` 为空字符串。 |
+
+### 确认目标可用
+
+首条消息通常用于验证客户端、OpenIMServer 和另一客户端之间的完整链路。发送前确认:
+
+- 单聊接收方用户已存在,且服务端策略允许当前用户向其发送消息。
+- 群聊目标 `groupID` 已存在,当前用户已加入该群,并且没有被群状态或禁言策略禁止发言。
+- 两个测试客户端使用不同用户登录;不要用同一账号的界面现象代替对端收件验证。
+
+## 开始使用
+
+按照下面步骤发送首条文本消息。
+
+### 第 1 步:安装 UTS 插件
+
+把 `unix-openim-sdk` 安装到项目的 `uni_modules/unix-openim-sdk` 目录。插件包含原生依赖,标准基座不能直接加载;运行前需要构建包含该插件的自定义基座,或使用项目的本地 Android/iOS 原生构建流程。
+
+业务页面统一从插件根路径扁平导入函数与类型:
+
+```uts
+import {
+ createTextMessage,
+ sendMessage,
+} from '@/uni_modules/unix-openim-sdk'
+```
+
+不需要创建 SDK 实例,也不要导入或直接调用 Android、iOS、HarmonyOS 平台目录中的实现文件。
+
+### 第 2 步:初始化 OpenIM SDK
+
+在 App 作用域调用一次 `initSDK()`。下面以 Android 为例;iOS 和 HarmonyOS 使用各自的平台常量与 `systemType`。
+
+```uts
+import {
+ OpenIMLogLevelInfo,
+ OpenIMPlatformAndroid,
+ initSDK,
+ type OpenIMInitConfig,
+} from '@/uni_modules/unix-openim-sdk'
+
+const config : OpenIMInitConfig = {
+ platformID: OpenIMPlatformAndroid,
+ apiAddr: 'https://im-api.example.com',
+ wsAddr: 'wss://im-ws.example.com',
+ logLevel: OpenIMLogLevelInfo,
+ isLogStandardOutput: true,
+ systemType: 'android',
+}
+
+const initialized = await initSDK(config)
+if (!initialized) {
+ throw new Error('OpenIM SDK initialization was not accepted')
+}
+```
+
+`apiAddr` 和 `wsAddr` 必须能从实际设备访问,`systemType` 不可省略。完整字段、iOS/HarmonyOS 常量、版本查询和反初始化规则见[安装、初始化与 SDK 信息](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)。
+
+### 第 3 步:连接到 OpenIMServer
+
+使用[开始之前](/sdk/uniapp/getting-started/before-you-start)约定的业务接口取得当前用户的 `userID` 和 Token。登录前先按[认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session)注册连接与 Token 事件;本页只保留首条消息主流程,不重复定义完整监听器。
+
+```uts
+import { login } from '@/uni_modules/unix-openim-sdk'
+
+const session = await loadOpenIMSDKSession()
+await login(session.userID, session.token)
+```
+
+`login()` 的 Promise 成功表示登录请求完成;收到由认证页面统一处理的 `onConnectSuccess` 后,再调用依赖连接的消息 API。uni-app / uni-app x 的 `login()` 使用两个位置参数,不接受 Wasm 的对象式登录参数。
+
+### 第 4 步:确定消息目标
+
+单聊只需要接收方用户 ID。把已经确认存在的用户 ID 写入 `recvID`:
+
+```uts
+const recvID = 'user_b'
+const groupID = ''
+```
+
+群聊只使用群 ID。可以复用业务系统已有的 `groupID`,也可以先通过管理后台、业务后端或群组 API 创建测试群,并保存返回的群 ID:
+
+```uts
+const recvID = ''
+const groupID = 'group_123'
+```
+
+创建群组时可以设置初始成员,但发送群消息本身不再传某个接收用户 ID。
+
+### 第 5 步:创建并发送消息
+
+发送文本消息分两步:先用 `createTextMessage()` 创建本地 `OpenIMMessageItem`,再通过 `sendMessage()` 发送到目标用户或群组。
+
+```uts
+import {
+ createTextMessage,
+ sendMessage,
+ type OpenIMMessageItem,
+} from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextMessage('你好,OpenIMSDK')
+if (message == null) {
+ throw new Error('Failed to create text message')
+}
+
+const sentMessage : OpenIMMessageItem = await sendMessage({
+ recvID,
+ groupID,
+ message,
+})
+
+appendOutgoingMessage(sentMessage)
+```
+
+`createTextMessage()` 的 Promise 只返回待发送消息对象,不会发送消息,也不会触发新消息事件。`sendMessage()` 直接返回发送后的 `OpenIMMessageItem`,不需要读取 Wasm 响应中的 `{ data }`。
+
+发送端应按 `clientMsgID` 用 `sentMessage` 替换本地待发送项;另一已登录客户端通过新消息事件获得消息对象。完整事件、批量与单条回调、清理和会话路由见[接收消息](/sdk/uniapp/message/receiving-messages/receive-messages),本页不重复注册。
+
+## 验证发送结果
+
+使用两个账号和两个独立客户端验证以下阶段:
+
+1. A 端 `sendMessage()` 成功并返回非空 `clientMsgID`。
+2. A 端按 `clientMsgID` 合并返回消息,而不是向列表重复追加一条。
+3. B 端收到新消息事件,并能读取相同业务内容。
+4. A、B 重新进入会话后,都能从历史消息中查询到该消息。
+
+Promise 成功和对端事件到达是两个阶段,应分别验证。排查失败时记录脱敏后的错误码、当前用户 ID、目标用户或群组 ID、`clientMsgID`,并与 OpenIMServer 日志对应;不要记录 Token 或完整私聊内容。
+
+## 下一步
+
+- [开始之前](/sdk/uniapp/getting-started/before-you-start)
+- [用户认证](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [按宿主和平台接入](/sdk/uniapp/getting-started/environment-specific-implementation)
+- [发送消息](/sdk/uniapp/message/sending-messages/send-message)
+- [接收消息](/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/zh/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx b/content/zh/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx
new file mode 100644
index 0000000000..8206f260c3
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx
@@ -0,0 +1,62 @@
+---
+title: '更新 Token 与观察 SDK session'
+description: '商业版更新登录 Token,并通过合成 session 快照防止账号与异步请求串线。'
+sourcePath: '/sdk/uniapp/getting-started/update-token-and-observe-sdk-session'
+---
+
+本页能力属于商业版。它用于宿主与 AV Runtime 等插件共享唯一 OpenIM Core 时,读取当前登录快照、更新 Token,并在账号或 SDK 生命周期变化时取消旧请求。
+
+`onSDKSessionChanged` 是 `unix-openim-sdk` 的插件层合成事件,不是 OpenIM Core 原生 listener。Android、iOS 与 HarmonyOS 都由统一 session tracker 生成该事件。
+
+## 读取 session 快照
+
+```uts
+import {
+ getSDKSessionSnapshot,
+ type OpenIMSDKSessionSnapshot,
+} from '@/uni_modules/unix-openim-sdk'
+
+const snapshot : OpenIMSDKSessionSnapshot = await getSDKSessionSnapshot()
+```
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `loginStatus` | `OpenIMLoginStatus` | 当前登录状态。 |
+| `userID` | `string` 或 `null` | 当前 SDK 用户;未登录时为 `null`。 |
+| `sdkSessionEpoch` | `number` | session 世代。生命周期或账号成功变化后递增。 |
+| `sdkVersion` | `string` | 当前插件所连接 Core 的版本。 |
+
+快照不包含 IM Token、API 地址或 WebSocket 地址。异步流程开始时保存 `userID` 与 `sdkSessionEpoch`,完成前再次读取并比较;不一致时丢弃旧结果,不要写入新账号状态。
+
+## 订阅 session 变化
+
+```uts
+import {
+ off,
+ onSDKSessionChanged,
+} from '@/uni_modules/unix-openim-sdk'
+
+const sessionSubscription = onSDKSessionChanged((snapshot) => {
+ cancelRequestsFromOlderEpoch(snapshot.sdkSessionEpoch)
+ replaceActiveSdkUser(snapshot.userID)
+})
+
+// 应用或依赖插件销毁时执行。
+off(sessionSubscription)
+```
+
+初始化、登录、退出、反初始化、被踢下线、Token 无效或过期,以及当前用户变化,都可能推动 epoch。处理器必须幂等,不能在事件中记录 Token 或反复触发并行登录。
+
+## 热更新 Token
+
+```uts
+import { updateToken } from '@/uni_modules/unix-openim-sdk'
+
+await updateToken({ token: freshToken })
+```
+
+Token 由可信后端签发。`updateToken()` 只在 Android 和 iOS 可用;HarmonyOS 当前稳定返回 `platform-unsupported`,应按产品策略重新登录或等待后续平台实现。更新成功后继续以 session 事件和连接状态判断当前会话,不要把 Promise 成功等同于所有网络请求都已恢复。
+
+## 与其他插件协作
+
+AV Runtime 等依赖插件应在初始化前后各读取一次快照,确认用户与 epoch 未变化;dispose 时只取消自己的订阅和请求,不调用 IM SDK 的 `logout()` 或 `unInitSDK()`。用户切换时先销毁依赖插件,再退出并登录新账号。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/change-group-mute.mdx b/content/zh/docs/chat/sdk/uniapp/group/change-group-mute.mdx
new file mode 100644
index 0000000000..386524f7b7
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/change-group-mute.mdx
@@ -0,0 +1,30 @@
+---
+title: '开启或关闭全员禁言'
+description: '修改群组全员禁言状态。'
+sourcePath: '/sdk/uniapp/group/change-group-mute'
+---
+
+`changeGroupMute()` 控制群组整体禁言。群主和管理员可以按 OpenIMServer 权限执行该操作。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 要修改的群 ID。 |
+| `isMute` | `boolean` | 是 | `true` 开启全员禁言,`false` 关闭。 |
+
+```uts
+import { changeGroupMute } from '@/uni_modules/unix-openim-sdk'
+
+await changeGroupMute({ groupID, isMute: true })
+```
+
+只有群主或具备服务端权限的管理员可以操作,最终权限和群状态由服务端校验。不要仅根据本地角色显示结果;服务端仍可能因群状态、角色变化或并发操作拒绝。群主和管理员通常仍可发送消息,因此群组禁言不表示所有用户都无法发言。
+
+Wasm 文档中的 `muteBypassUserIDs` 商业扩展没有进入当前 uni-app / uni-app x 合同,请勿向 `changeGroupMute()` 传入该字段。商业服务端即使支持例外用户,也应以当前插件公开的类型和后续群资料为准。
+
+## 返回结果
+
+Promise 成功直接返回字符串结果,表示服务端完成本次群禁言设置,不等于所有成员界面已经更新。群资料随后可能通过 `onGroupInfoChanged` 到达,应按 `groupID` 合并;完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。需要立即校准时重新查询群资料。
+
+全员禁言与单个成员禁言是不同能力。商业版群资料可能包含禁言例外用户列表;公共客户端把缺失扩展视为“没有可用扩展数据”,不能自行推断例外权限。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx b/content/zh/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx
new file mode 100644
index 0000000000..c65d8dce58
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx
@@ -0,0 +1,23 @@
+---
+title: '检查群组 full-sync 状态'
+description: '商业版检查群列表或指定群成员是否完成全量同步。'
+sourcePath: '/sdk/uniapp/group/check-full-sync-state'
+---
+
+两个检查接口属于商业版,用于诊断本地数据是否已经完成全量同步。
+
+```uts
+import {
+ checkGroupMemberFullSync,
+ checkLocalGroupFullSync,
+} from '@/uni_modules/unix-openim-sdk'
+
+const groups = await checkLocalGroupFullSync()
+const members = await checkGroupMemberFullSync({ groupID })
+
+if (groups?.IsFullSync == true && members?.IsFullSync == true) {
+ enableCompleteGroupManagement()
+}
+```
+
+返回字段真实名称是 `IsFullSync`。`null` 或字段缺失不能当作 `true`。这些方法只检查状态,不触发同步;未完成时继续观察 SDK 同步事件或稍后查询,避免高频轮询。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/create-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/create-group.mdx
new file mode 100644
index 0000000000..58974a65a6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/create-group.mdx
@@ -0,0 +1,38 @@
+---
+title: '创建群组'
+description: '创建群资料并设置初始成员与管理员。'
+sourcePath: '/sdk/uniapp/group/create-group'
+---
+
+`createGroup()` 接收群资料、初始成员和可选管理员,返回 `OpenIMGroupItem | null`。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupInfo.groupName` | `string` | 是 | 群名称。 |
+| `groupInfo.groupType` | `2` | 是 | 当前合同支持的群类型固定为 `2`。 |
+| `groupInfo.notification` | `string` 或 `null` | 否 | 初始群公告。 |
+| `groupInfo.introduction` | `string` 或 `null` | 否 | 群简介。 |
+| `groupInfo.faceURL` | `string` 或 `null` | 否 | 群头像 URL。 |
+| `groupInfo.ex` | `string` 或 `null` | 否 | 群扩展字符串,完整写入。 |
+| `memberUserIDs` | `string[]` | 是 | 初始普通成员用户 ID。 |
+| `adminUserIDs` | `string[]` 或 `null` | 否 | 初始管理员用户 ID。 |
+
+```uts
+import { createGroup } from '@/uni_modules/unix-openim-sdk'
+
+const group = await createGroup({
+ groupInfo: { groupName: '项目群', groupType: 2 },
+ memberUserIDs: ['user_b', 'user_c'],
+ adminUserIDs: ['user_b'],
+})
+```
+
+成员与管理员列表应先去除空值和重复 ID。管理员必须同时符合服务端的成员与权限规则;不要把当前用户或同一用户重复放入冲突角色列表。`ex` 不会自动合并 JSON。
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMGroupItem | null`。非空结果可以按 `groupID` 合入群组 store;返回 `null` 时不要创建仅本地群。
+
+Promise 成功只表示创建请求完成。群列表最终通过 `onJoinedGroupAdded`、指定群查询或已加入群列表校准;初始成员与管理员则通过群成员查询确认。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/dismiss-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/dismiss-group.mdx
new file mode 100644
index 0000000000..1e3839dc78
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/dismiss-group.mdx
@@ -0,0 +1,19 @@
+---
+title: '解散群组'
+description: '群主解散指定群组。'
+sourcePath: '/sdk/uniapp/group/dismiss-group'
+---
+
+`dismissGroup()` 解散群组。
+
+```uts
+import { dismissGroup } from '@/uni_modules/unix-openim-sdk'
+
+await dismissGroup(groupID)
+```
+
+这是不可逆的高风险操作,只允许有权限的群主执行。成功后所有成员会收到群解散/已加入群删除相关事件;关闭聊天与管理页面,不再发送群消息。
+
+Promise 成功表示解散请求完成,不代表每个客户端都已处理事件。当前客户端继续等待 `onGroupDismissed` / `onJoinedGroupDeleted` 或重新查询,按 `groupID` 移除群、成员和聊天入口。
+
+提交前展示群名和成员影响范围,并防止重复点击。Promise 失败时保留当前群状态;权限和群状态最终由服务端校验,不能只依赖本地 `ownerUserID`。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx
new file mode 100644
index 0000000000..e7ed2c605f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx
@@ -0,0 +1,25 @@
+---
+title: '接受入群申请'
+description: '接受指定用户加入指定群。'
+sourcePath: '/sdk/uniapp/group/group-applications/accept-group-application'
+---
+
+`acceptGroupApplication()` 由有权限的群成员处理申请。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 申请目标群 ID。 |
+| `fromUserID` | `string` | 是 | 申请人的用户 ID。 |
+| `handleMsg` | `string` | 是 | 处理说明;可能向申请人展示,不写内部风控信息。 |
+
+```uts
+import { acceptGroupApplication } from '@/uni_modules/unix-openim-sdk'
+
+await acceptGroupApplication({ groupID, fromUserID: 'user_b', handleMsg: '已通过' })
+```
+
+Promise 成功表示接受请求已经完成,不等于申请事件和成员事件都已到达。成功后分别刷新申请列表和群成员列表,或等待 `onGroupApplicationAccepted` 与 `onGroupMemberAdded` 按各自主键合并。
+
+UI 在请求期间锁定该申请,避免接受与拒绝并发。处理权限、申请状态、群人数和重复成员由服务端校验;失败时保留原申请并重新查询,不只改本地 `handleResult`。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx
new file mode 100644
index 0000000000..314a22ba08
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx
@@ -0,0 +1,28 @@
+---
+title: '删除入群申请记录'
+description: '商业版批量删除指定入群申请。'
+sourcePath: '/sdk/uniapp/group/group-applications/delete-group-requests'
+---
+
+`deleteGroupRequests()` 商业版 删除明确指定的申请记录。
+
+## 参数说明
+
+`groupRequests` 是非空数组,每项 `OpenIMSimpleGroupRequest` 包含:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 申请目标群 ID。 |
+| `fromUserID` | `string` | 是 | 申请人的用户 ID。 |
+
+```uts
+import { deleteGroupRequests } from '@/uni_modules/unix-openim-sdk'
+
+await deleteGroupRequests({
+ groupRequests: [{ groupID, fromUserID: 'user_b' }],
+})
+```
+
+使用 `groupID:fromUserID` 精确定位,提交前去重。删除申请记录不等于拒绝申请,也不会移除已经加入的成员;移除成员应使用群成员 API。
+
+Promise 成功表示删除请求完成,随后可能收到申请删除事件。完整监听见[查询收到的入群申请](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient)。批量失败时不要假定每一项都已删除;重新查询申请列表与数量。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx
new file mode 100644
index 0000000000..dbe8d630ec
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx
@@ -0,0 +1,29 @@
+---
+title: '查询发出的入群申请'
+description: '分页查询当前账号发出的入群申请。'
+sourcePath: '/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant'
+---
+
+`getGroupApplicationListAsApplicant()` 返回 `OpenIMGroupApplicationListResult | null`。
+
+## 参数说明
+
+参数可省略;显式分页时使用:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `offset` | `number` 或 `null` | 否 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` 或 `null` | 否 | 本次读取数量。 |
+
+```uts
+import { getGroupApplicationListAsApplicant } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getGroupApplicationListAsApplicant({ offset: 0, count: 50 })
+renderSentGroupApplications(result?.applications ?? [])
+```
+
+## 返回结果
+
+Promise 成功后,从 `applications` 读取当前账号发出的 `OpenIMGroupApplicationItem[]`。字段含义见[查询收到的入群申请](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient)。查询本身不会触发申请事件。
+
+按 `groupID:userID` 建立稳定 key;事件按当前账号在申请中的角色分流到收到或发出的列表。分页期间状态变化时重置分页,断线恢复、重新登录或事件可能遗漏时重新查询。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx
new file mode 100644
index 0000000000..bf09fc2093
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx
@@ -0,0 +1,70 @@
+---
+title: '查询收到的入群申请'
+description: '分页查询待管理的入群申请,并处理申请事件。'
+sourcePath: '/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient'
+---
+
+`getGroupApplicationListAsRecipient()` 查询当前账号有权处理的入群申请。本页归属新增、接受、拒绝和删除事件。
+
+## 参数说明
+
+参数对象可以省略;显式分页时使用可选的 `offset` 和 `count`。`offset` 首页为 `0`,`count` 是本次读取数量。unix SDK 的参数不包含 Wasm 页面中的 `handleResults` 筛选,需要在返回后按 `handleResult` 过滤。
+
+```uts
+import {
+ getGroupApplicationListAsRecipient,
+ off,
+ onGroupApplicationAccepted,
+ onGroupApplicationAdded,
+ onGroupApplicationDeleted,
+ onGroupApplicationRejected,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const addedSubscription = onGroupApplicationAdded((item) => upsertGroupApplication(item))
+const subscriptions : Array = [
+ addedSubscription,
+ onGroupApplicationAccepted((item) => upsertGroupApplication(item)),
+ onGroupApplicationRejected((item) => upsertGroupApplication(item)),
+ onGroupApplicationDeleted((item) => removeGroupApplication(item)),
+]
+
+const result = await getGroupApplicationListAsRecipient({ offset: 0, count: 50 })
+replaceReceivedGroupApplications(result?.applications ?? [])
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMGroupApplicationListResult | null`,从 `applications` 读取当前页。
+
+返回 `null` 时不要伪造成“没有申请”的空状态;结合登录状态和错误诊断决定保留旧快照或展示加载失败。空 `applications` 才表示当前页没有记录。分页加载期间若处理了申请,应重置 offset 并重新查询,避免同一记录跨页重复。
+
+### 入群申请字段
+
+`OpenIMGroupApplicationItem` 同时包含群快照和申请人信息:
+
+| 字段 | 说明 |
+| --- | --- |
+| `groupID`、`groupName`、`groupFaceURL` | 目标群 ID、名称和头像快照。 |
+| `notification`、`introduction` | 群公告和简介快照。 |
+| `ownerUserID`、`creatorUserID` | 群主和创建人用户 ID。 |
+| `groupType`、`status`、`memberCount` | 群类型、状态和成员数快照。 |
+| `userID`、`nickname`、`userFaceURL` | 申请人 ID、昵称和头像快照。 |
+| `handleResult` | 当前处理结果:待处理、已同意或已拒绝。 |
+| `reqMsg`、`reqTime` | 申请说明和申请时间。 |
+| `joinSource`、`inviterUserID` | 入群来源和邀请人。 |
+| `handleUserID`、`handledMsg`、`handledTime` | 处理人、处理说明和处理时间。 |
+| `ex`、`attachedInfo` | 扩展与附加信息,只按已确认协议解析。 |
+
+使用 `groupID:userID` 作为申请合并标识。昵称、头像和群名都是申请同步时的快照;需要最新资料时重新查询群或用户。
+
+## 监听申请变化
+
+本页是 `onGroupApplicationAdded`、`onGroupApplicationAccepted`、`onGroupApplicationRejected` 和 `onGroupApplicationDeleted` 的完整归属页。查询和事件按 `groupID:userID` 幂等合并,删除事件移除对应记录。
+
+处理权限和申请状态由服务端校验,不要只修改本地 `handleResult` 冒充成功。管理员或群主身份变化后重新查询;分页期间收到事件时可重置分页。退出登录、切换账号或销毁申请 store 时逐个释放句柄。
+
+按当前用户是否拥有处理权限,把收到的申请与自己发出的申请分开存储。事件中的群资料和申请人资料都是快照;群资料变化或用户改名时,不依赖旧申请记录刷新其他页面。
+
+接受或拒绝操作的 Promise 成功后仍等待相应事件,或重新查询本页确认最终 `handleResult`。申请被同意后,群列表和成员列表分别由自己的事件与查询更新;不要仅从申请项推断当前用户已经加入群。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx
new file mode 100644
index 0000000000..64940291da
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx
@@ -0,0 +1,16 @@
+---
+title: '查询未处理入群申请数'
+description: '查询群管理入口的未处理申请数量。'
+sourcePath: '/sdk/uniapp/group/group-applications/get-group-application-unhandled-count'
+---
+
+`getGroupApplicationUnhandledCount()` 返回数量或 `null`。
+
+```uts
+import { getGroupApplicationUnhandledCount } from '@/uni_modules/unix-openim-sdk'
+
+const count = await getGroupApplicationUnhandledCount({ offset: 0, count: 100 })
+setGroupApplicationCount(count ?? 0)
+```
+
+多端处理会让本地增减漂移,申请事件到达后重新查询权威数量。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx
new file mode 100644
index 0000000000..cf17d4a1bb
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx
@@ -0,0 +1,22 @@
+---
+title: '观察群申请角标变化'
+description: '商业版订阅群申请 badge 数量事件。'
+sourcePath: '/sdk/uniapp/group/group-applications/observe-group-application-badge-count'
+---
+
+`onGroupApplicationBadgeCountChanged` 商业版 直接提供新的角标数量。
+
+```uts
+import {
+ off,
+ onGroupApplicationBadgeCountChanged,
+} from '@/uni_modules/unix-openim-sdk'
+
+const badgeSubscription = onGroupApplicationBadgeCountChanged((count) => {
+ setGroupApplicationCount(count)
+})
+
+off(badgeSubscription)
+```
+
+用事件值替换本地数量,不做 `+1/-1`。当前没有“清除群申请 badge”的 API;处理申请后通过查询和后续事件刷新,不能调用不存在的方法。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx b/content/zh/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx
new file mode 100644
index 0000000000..237d426d08
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx
@@ -0,0 +1,25 @@
+---
+title: '拒绝入群申请'
+description: '拒绝指定用户加入指定群。'
+sourcePath: '/sdk/uniapp/group/group-applications/refuse-group-application'
+---
+
+`refuseGroupApplication()` 使用与接受相同的定位字段。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 申请目标群 ID。 |
+| `fromUserID` | `string` | 是 | 申请人的用户 ID。 |
+| `handleMsg` | `string` | 是 | 拒绝说明;可能向申请人展示。 |
+
+```uts
+import { refuseGroupApplication } from '@/uni_modules/unix-openim-sdk'
+
+await refuseGroupApplication({ groupID, fromUserID: 'user_b', handleMsg: '暂不通过' })
+```
+
+处理说明可能对申请人可见,不写内部风控信息、内部账号或敏感审核依据。UI 在请求期间锁定该申请,避免接受与拒绝并发。
+
+Promise 成功表示拒绝请求完成,不等于 `onGroupApplicationRejected` 已经到达。最终状态以申请事件或重新查询为准;失败时不要仅在本地隐藏申请。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/join-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/join-group.mdx
new file mode 100644
index 0000000000..cc9ef5b32a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/join-group.mdx
@@ -0,0 +1,31 @@
+---
+title: '申请加入群组'
+description: '向指定群发送加入申请。'
+sourcePath: '/sdk/uniapp/group/join-group'
+---
+
+`joinGroup()` 提交入群申请。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 要申请加入的群 ID。 |
+| `reqMsg` | `string` | 是 | 申请说明,可能向群主或管理员展示。 |
+| `joinSource` | `number` | 是 | 入群来源值,使用产品与服务端约定。 |
+| `ex` | `string` 或 `null` | 否 | 申请扩展字符串,只按已确认协议填写。 |
+
+```uts
+import { joinGroup } from '@/uni_modules/unix-openim-sdk'
+
+await joinGroup({
+ groupID,
+ reqMsg: '申请加入项目群',
+ joinSource: 2,
+ ex: '',
+})
+```
+
+申请文案和 `ex` 可能进入申请记录,不包含 Token、内部风控信息或不必要的个人数据。提交前确认群存在,且当前用户尚未加入。
+
+Promise 成功不等于已入群:免验证群可能直接加入,需要验证时等待管理员处理。通过申请事件、`onJoinedGroupAdded` 或重新查询群列表判断最终结果,不在本地先行创建群成员状态。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx
new file mode 100644
index 0000000000..4abea02410
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx
@@ -0,0 +1,27 @@
+---
+title: '设置成员禁言'
+description: '按秒设置指定群成员的禁言时长。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/change-group-member-mute'
+---
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 目标群组 ID。 |
+| `userID` | `string` | 是 | 目标成员用户 ID。 |
+| `mutedSeconds` | `number` | 是 | 禁言时长,单位为秒;传 `0` 解除禁言。 |
+
+```uts
+import { changeGroupMemberMute } from '@/uni_modules/unix-openim-sdk'
+
+await changeGroupMemberMute({
+ groupID,
+ userID: targetUserID,
+ mutedSeconds: 3600,
+})
+```
+
+群主可以禁言管理员和普通成员;管理员只能禁言普通成员,最终权限由 OpenIMServer 校验。
+
+Promise 成功表示服务端完成设置。最终状态以成员资料中的 `muteEndTime` 为准,不要只按提交的秒数推算。`onGroupMemberInfoChanged` 的处理见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx
new file mode 100644
index 0000000000..84ad92d499
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx
@@ -0,0 +1,29 @@
+---
+title: '邀请用户入群'
+description: '邀请一个或多个用户加入指定群。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/invite-user-to-group'
+---
+
+群主和管理员可以在 OpenIMServer 授予的权限范围内管理群成员。客户端可以根据成员资料中的 `roleLevel` 控制操作入口,但服务端仍负责最终权限校验。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 目标群组 ID。 |
+| `reason` | `string` | 是 | 邀请说明;没有说明时传空字符串。 |
+| `userIDList` | `string[]` | 是 | 要邀请的用户 ID。 |
+
+```uts
+import { inviteUserToGroup } from '@/uni_modules/unix-openim-sdk'
+
+await inviteUserToGroup({
+ groupID,
+ reason: '邀请加入项目讨论组',
+ userIDList: ['user-002', 'user-003'],
+})
+```
+
+提交前应先对 `userIDList` 去重。邀请原因可能对目标用户可见,不要写入 Token 等敏感信息。
+
+Promise 成功表示服务端接受了邀请请求,不代表所有用户已经出现在成员列表。需要审核时可能先产生申请事件;成员真正加入后再按 `onGroupMemberAdded` 合并。成员事件的完整监听见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx
new file mode 100644
index 0000000000..7bcbd680b6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx
@@ -0,0 +1,29 @@
+---
+title: '移除群成员'
+description: '把一个或多个成员移出指定群。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/kick-group-member'
+---
+
+有权限的群主或管理员可以调用 `kickGroupMember()`。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 要移除成员的群组 ID。 |
+| `reason` | `string` | 是 | 移除原因;没有补充说明时传空字符串。 |
+| `userIDList` | `string[]` | 是 | 要移除的成员用户 ID 列表。 |
+
+```uts
+import { kickGroupMember } from '@/uni_modules/unix-openim-sdk'
+
+await kickGroupMember({
+ groupID,
+ reason: '已离开项目',
+ userIDList: [targetUserID],
+})
+```
+
+不能用该方法移除群主;应先转让群主身份。服务端会校验管理员能否操作目标成员。
+
+Promise 成功表示移除请求已经完成。`onGroupMemberDeleted` 随后可能到达,应按 `groupID:userID` 移除成员;完整监听见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx
new file mode 100644
index 0000000000..1d7acf1d4a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx
@@ -0,0 +1,21 @@
+---
+title: '设置群成员头像'
+description: '通过 setGroupMemberInfo 更新成员在群内的头像。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-avatar'
+---
+
+`faceURL` 是群成员资料中的头像地址,只作用于指定群组。
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupMemberInfo({
+ groupID,
+ userID: targetUserID,
+ faceURL: avatarURL,
+})
+```
+
+群内头像与用户账号头像是不同数据。需要修改当前用户的账号头像时,使用[更新当前用户资料](/zh/sdk/uniapp/user/profile/set-self-info)。先把本地图片上传到业务可访问的 HTTPS 地址,不要把 `unifile://` 或沙盒路径写入远端资料。
+
+Promise 成功后,通过 `onGroupMemberInfoChanged` 按 `groupID:userID` 合并;完整监听见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx
new file mode 100644
index 0000000000..69a51cf311
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx
@@ -0,0 +1,26 @@
+---
+title: '设置群成员扩展字段'
+description: '通过 setGroupMemberInfo 更新成员 ex。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-extension'
+---
+
+`ex` 是完整字符串,SDK 不会自动合并 JSON。写入前应保留其他业务模块的命名空间。
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+const previous = JSON.parse(member.ex || '{}')
+
+await setGroupMemberInfo({
+ groupID,
+ userID: targetUserID,
+ ex: JSON.stringify({
+ ...previous,
+ title: 'maintainer',
+ }),
+})
+```
+
+扩展字段对有权查看成员资料的用户可见,不要存放 Token 等秘密。
+
+Promise 成功后,通过 `onGroupMemberInfoChanged` 按 `groupID:userID` 合并;完整监听见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx
new file mode 100644
index 0000000000..9c1236f215
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx
@@ -0,0 +1,21 @@
+---
+title: '设置群成员昵称'
+description: '更新成员在指定群内的昵称。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-nickname'
+---
+
+群内昵称只影响指定群组中的成员资料,不会修改用户的账号昵称。
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupMemberInfo({
+ groupID,
+ userID: targetUserID,
+ nickname: '项目负责人',
+})
+```
+
+`groupID` 和 `userID` 共同定位目标成员。当前用户是否可以修改本人或其他成员的群内昵称,由 OpenIMServer 根据群角色和策略校验。
+
+Promise 成功表示服务端完成请求;随后可能收到 `onGroupMemberInfoChanged`,应按 `groupID:userID` 合并。完整监听见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx
new file mode 100644
index 0000000000..37e98da810
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx
@@ -0,0 +1,27 @@
+---
+title: '设置群成员角色'
+description: '通过 setGroupMemberInfo 更新成员角色等级。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/set-group-member-role-level'
+---
+
+通过 `roleLevel` 将普通群成员设置为管理员,或取消其管理员身份。
+
+```uts
+import { setGroupMemberInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupMemberInfo({
+ groupID,
+ userID: targetUserID,
+ roleLevel: 60,
+})
+```
+
+| `roleLevel` | 含义 |
+| --- | --- |
+| `20` | 普通群成员。 |
+| `60` | 群管理员。 |
+| `100` | 群主,只用于识别当前角色。 |
+
+传入 `60` 可设置管理员,传入 `20` 可取消管理员身份。`OpenIMGroupMemberRoleLevel` 的类型范围是 `20 | 60 | 100`,但不能通过写入 `100` 完成群主变更;请使用[转让群主](/zh/sdk/uniapp/group/managing-group-members/transfer-group-owner)。高风险角色变更应在 UI 中二次确认,最终权限由服务端校验。
+
+Promise 成功后,通过 `onGroupMemberInfoChanged` 按 `groupID:userID` 合并,完整监听见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx
new file mode 100644
index 0000000000..280ef92832
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx
@@ -0,0 +1,24 @@
+---
+title: '转让群主'
+description: '把群主权限转让给指定成员。'
+sourcePath: '/sdk/uniapp/group/managing-group-members/transfer-group-owner'
+---
+
+只有当前群主可以调用 `transferGroupOwner()`。`groupID` 是目标群组 ID,`newOwnerUserID` 是新群主的用户 ID;目标用户必须是该群组中的有效成员。
+
+```uts
+import { transferGroupOwner } from '@/uni_modules/unix-openim-sdk'
+
+await transferGroupOwner({
+ groupID,
+ newOwnerUserID: targetUserID,
+})
+```
+
+## 调用后的状态变化
+
+Promise 成功表示 OpenIMServer 已完成群主转让:原群主变为普通成员,新群主获得群主角色。成员角色变化通过 `onGroupMemberInfoChanged` 增量同步,事件参数是单个 `OpenIMGroupMemberItem`;一次转让可能涉及原群主和新群主两条成员记录,均按 `groupID:userID` 合并。
+
+完整监听和清理代码见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。不要只依赖事件数量判断转让结果;需要确认当前角色时,应重新调用 `getSpecifiedGroupMembersInfo()` 获取相关成员快照。
+
+群主需要退出群组时,必须先完成转让,再调用 `quitGroup()`。如果群组不再需要,群主也可以选择 `dismissGroup()`,但解散会影响所有成员,不能替代普通转让。UI 应提供二次确认并说明角色变化。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/overview-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/overview-group.mdx
new file mode 100644
index 0000000000..3f73470d7f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/overview-group.mdx
@@ -0,0 +1,62 @@
+---
+title: '群组概览'
+description: '理解群资料、成员、申请、权限和群组事件。'
+sourcePath: '/sdk/uniapp/group/overview-group'
+---
+
+群组领域以 `groupID` 为稳定主键,包含群资料、成员、申请和权限。群名、头像、公告、群主和成员数都是可变快照。
+
+## 核心数据类型
+
+| 类型 | 用途 |
+| --- | --- |
+| `OpenIMGroupItem` | 已加入群组列表、群资料页和群状态。 |
+| `OpenIMCreateGroupInfo` | 创建群时提交的群名、类型、公告、简介、头像和扩展字段。 |
+| `OpenIMGroupMemberItem` | 群成员资料、角色、入群来源和禁言结束时间。 |
+| `OpenIMGroupApplicationItem` | 入群申请及其申请人与处理状态。 |
+
+`OpenIMGroupItem` 常用字段包括 `groupID`、`groupName`、`notification`、`introduction`、`faceURL`、`ownerUserID`、`memberCount`、`status`、`groupType`、`needVerification`、`lookMemberInfo`、`applyMemberFriend` 和 `ex`。`attachedInfo` 是商业版字段,只按已确认协议解析。
+
+成员对象使用 `groupID:userID` 作为稳定合并标识。群内 `nickname` 和 `faceURL` 属于成员快照,不应被写回为用户账号级资料。
+
+## 按任务查找页面
+
+| 需求 | 页面 |
+| --- | --- |
+| 创建、更新、解散或退出群组 | [创建群组](/sdk/uniapp/group/create-group)、[更新群资料](/sdk/uniapp/group/update-group-profile)、[解散群组](/sdk/uniapp/group/dismiss-group)、[退出群组](/sdk/uniapp/group/quit-group) |
+| 分页查询已加入群组或指定群资料 | [分页查询已加入群组](/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page)、[查询指定群资料](/sdk/uniapp/group/retrieving-groups/get-specified-groups-info) |
+| 查询、搜索和管理群成员 | [查询群成员列表](/sdk/uniapp/group/retrieving-group-members/get-group-member-list)、[搜索群成员](/sdk/uniapp/group/retrieving-group-members/search-group-members) |
+| 邀请或移除成员、转让群主 | [邀请用户入群](/sdk/uniapp/group/managing-group-members/invite-user-to-group)、[移除群成员](/sdk/uniapp/group/managing-group-members/kick-group-member)、[转让群主](/sdk/uniapp/group/managing-group-members/transfer-group-owner) |
+| 发送、查询和处理入群申请 | [申请加入群组](/sdk/uniapp/group/join-group)、[查询收到的入群申请](/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient) |
+| 设置群禁言、验证和成员权限 | 对应群设置与成员管理页面 |
+
+## 状态更新
+
+本页归属群资料与已加入群列表的四个事件:
+
+```uts
+import {
+ off,
+ onGroupDismissed,
+ onGroupInfoChanged,
+ onJoinedGroupAdded,
+ onJoinedGroupDeleted,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const infoSubscription = onGroupInfoChanged((group) => upsertGroup(group.groupID, group))
+const subscriptions : Array = [
+ infoSubscription,
+ onGroupDismissed((group) => removeGroup(group.groupID)),
+ onJoinedGroupAdded((group) => upsertGroup(group.groupID, group)),
+ onJoinedGroupDeleted((group) => removeGroup(group.groupID)),
+]
+
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+先订阅事件,再查询已加入群组快照。按 `groupID` 幂等合并;群解散、退出和被移出群的事件语义不同,但都可能要求关闭当前聊天页。
+
+`onGroupInfoChanged` 更新资料,`onGroupDismissed` 表示群已解散,`onJoinedGroupAdded` / `onJoinedGroupDeleted` 更新当前账号的已加入群列表。Promise 成功、事件到达和重新查询是三个阶段;App 恢复、同步完成或重新登录后重新查询快照。
+
+群解散、当前用户退出和被移出群的业务原因不同,但都可能要求关闭聊天页、停止发送并清理成员 store。字段缺失时降级,不伪造默认权限。退出账号或销毁群组 store 时逐个 `off(subscription)`。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/quit-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/quit-group.mdx
new file mode 100644
index 0000000000..d3e04e8a67
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/quit-group.mdx
@@ -0,0 +1,19 @@
+---
+title: '退出群组'
+description: '当前用户主动退出指定群。'
+sourcePath: '/sdk/uniapp/group/quit-group'
+---
+
+`quitGroup()` 让当前用户退出群组。
+
+```uts
+import { quitGroup } from '@/uni_modules/unix-openim-sdk'
+
+await quitGroup(groupID)
+```
+
+群主通常不能直接退出,需先转让群主或解散群。UI 应二次确认;成功后关闭群聊页,并以已加入群删除事件或重新查询清理状态。
+
+Promise 成功表示退出请求完成,不等于群列表和成员事件已经到达。当前用户退出后,按 `groupID` 清理群聊天入口、成员分页和发送权限;其他成员仍保留群组。
+
+群主转让与退出应串行执行:先确认新群主事件或重新查询结果,再调用退出。失败时保留聊天与群状态,不要仅因用户点击确认就删除本地数据。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx
new file mode 100644
index 0000000000..56d7370b38
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx
@@ -0,0 +1,64 @@
+---
+title: '查询群成员列表'
+description: '分页查询群成员,并处理成员新增、删除和资料变化事件。'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/get-group-member-list'
+---
+
+`getGroupMemberList()` 按过滤条件分页读取成员。本页归属三个成员事件。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 目标群 ID。 |
+| `filter` | `number` | 是 | 服务端定义的成员过滤值;不要用 UI 下标替代。 |
+| `offset` | `number` | 是 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` | 是 | 本次读取成员数量。 |
+
+```uts
+import {
+ getGroupMemberList,
+ off,
+ onGroupMemberAdded,
+ onGroupMemberDeleted,
+ onGroupMemberInfoChanged,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const addedSubscription = onGroupMemberAdded((member) => upsertMember(member))
+const subscriptions : Array = [
+ addedSubscription,
+ onGroupMemberDeleted((member) => removeMember(member.groupID, member.userID)),
+ onGroupMemberInfoChanged((member) => upsertMember(member)),
+]
+
+const result = await getGroupMemberList({ groupID, filter: 0, offset: 0, count: 100 })
+replaceMembers(result?.members ?? [])
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+Promise 成功直接返回 `OpenIMGroupMemberListResult | null`,从 `members` 读取当前页。
+
+### 群成员字段
+
+| 字段 | 说明 |
+| --- | --- |
+| `groupID`、`userID` | 成员稳定标识,组合为 `groupID:userID`。 |
+| `nickname`、`faceURL` | 群内成员展示资料。 |
+| `roleLevel` | 群主、管理员或普通成员角色值。 |
+| `joinTime`、`joinSource`、`inviterUserID` | 入群时间、来源和邀请人。 |
+| `muteEndTime` | 禁言结束时间;结合当前时间判断是否仍在禁言。 |
+| `operatorUserID` | 最近相关操作人。 |
+| `ex`、`attachedInfo` | 扩展信息,只按业务约定解析。 |
+
+群内昵称与用户账号昵称可以不同。成员列表使用成员对象展示,不要用 `getUsersInfo()` 返回的账号资料覆盖 `nickname`。角色和禁言状态也只属于该群,不能跨群复用。
+
+分页时继续增加 offset,直到返回数量少于 count。成员加入、退出、被移除或角色变化会改变分页边界;事件到达时按主键合并,并在需要完整顺序时从 offset 0 重新查询。
+
+## 监听成员变化
+
+本页是 `onGroupMemberAdded`、`onGroupMemberDeleted` 和 `onGroupMemberInfoChanged` 的完整监听归属页。按 `groupID:userID` 新增、删除或替换;分页与事件并发时不要按数组位置更新。
+
+成员变化可能影响权限、成员数和当前聊天页。删除事件若指向当前用户,应停止发送并刷新群列表;角色或禁言变化应重新计算可用操作。退出登录、切换账号或销毁成员 store 时逐个释放订阅句柄。
+
+查询 Promise 成功只建立当前页快照,不触发成员事件。邀请、移除和资料修改操作则分别等待 Promise、成员事件或重新查询,不能把本地对象修改当作服务端确认。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx
new file mode 100644
index 0000000000..faf236c1a2
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx
@@ -0,0 +1,28 @@
+---
+title: '查询指定群成员资料'
+description: '按用户 ID 列表批量读取指定群成员。'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info'
+---
+
+`getSpecifiedGroupMembersInfo()` 批量查询指定用户在目标群组中的成员资料。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 目标群组 ID。 |
+| `userIDList` | `string[]` | 是 | 要查询的成员用户 ID。 |
+
+```uts
+import { getSpecifiedGroupMembersInfo } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSpecifiedGroupMembersInfo({
+ groupID,
+ userIDList,
+})
+const members = result?.members ?? []
+```
+
+Promise 成功后,`result?.members` 是匹配的 `OpenIMGroupMemberItem[]`,字段含义见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。返回数组不保证与输入 ID 按位置一一对应;结果也可能少于输入,未返回用户可能不在群内或不可访问。
+
+同一用户在不同群中的昵称、角色和禁言状态可能不同,应按 `groupID:userID` 缓存,不要使用普通用户资料替代群成员资料。查询不会触发成员事件;后续增量见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx
new file mode 100644
index 0000000000..3cf68499c6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx
@@ -0,0 +1,15 @@
+---
+title: '筛选群内用户'
+description: '从给定用户列表中返回属于指定群的用户 ID。'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/get-users-in-group'
+---
+
+`getUsersInGroup()` 判断一批用户中哪些属于指定群,返回 `string[] | null`。
+
+```uts
+import { getUsersInGroup } from '@/uni_modules/unix-openim-sdk'
+
+const members = await getUsersInGroup({ groupID, userIDList: candidateUserIDs })
+```
+
+结果是用户 ID,不含成员资料。需要群昵称和角色时再调用指定成员查询。输入去重,并把 `null` 与空数组分别作为“无有效结果”和“没有匹配成员”处理。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx
new file mode 100644
index 0000000000..f10d0fd497
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx
@@ -0,0 +1,32 @@
+---
+title: '搜索群成员'
+description: '按用户 ID 或群昵称搜索群成员。'
+sourcePath: '/sdk/uniapp/group/retrieving-group-members/search-group-members'
+---
+
+`searchGroupMembers()` 适合在指定群组中搜索成员或获取 @ 候选人。当前接口只使用 `keywordList` 的第一个关键词。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 目标群组 ID。 |
+| `keywordList` | `string[]` | 是 | 搜索关键词数组。 |
+| `isSearchUserID` | `boolean` | 是 | 是否匹配用户 ID。 |
+| `isSearchMemberNickname` | `boolean` | 是 | 是否匹配群内昵称。 |
+
+```uts
+import { searchGroupMembers } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchGroupMembers({
+ groupID,
+ keywordList: [keyword.trim()],
+ isSearchUserID: true,
+ isSearchMemberNickname: true,
+})
+const members = result?.members ?? []
+```
+
+uni-app / uni-app x 接口没有 Wasm 版的 `offset` 和 `count` 参数,返回当前匹配结果。空关键词应由 UI 拦截,关键词变化时替换搜索快照。
+
+Promise 成功后,`result?.members` 是匹配的 `OpenIMGroupMemberItem[]`,字段含义见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。结果按 `groupID:userID` 去重,只用于当前关键词下的成员快照,不应替换完整成员列表;它也不是全局用户搜索。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx
new file mode 100644
index 0000000000..4a4281c641
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx
@@ -0,0 +1,54 @@
+---
+title: '分页查询已加入群组'
+description: '按 offset 和 count 分页读取已加入群组。'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page'
+---
+
+`getJoinedGroupListPage()` 适合群数量较大的账号。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `offset` | `number` | 是 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` | 是 | 本次读取的群数量。 |
+
+```uts
+import { getJoinedGroupListPage } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getJoinedGroupListPage({ offset: 0, count: 100 })
+appendGroups(result?.groups ?? [])
+```
+
+## 返回结果
+
+Promise 成功直接返回 `OpenIMGroupListResult | null`,从 `groups` 读取当前页 `OpenIMGroupItem[]`。`offset` 从 0 开始,直到返回数量小于 `count`。
+
+### 群资料字段
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `groupID` | `string` | 群稳定标识。 |
+| `groupName` | `string` | 群名称。 |
+| `notification` | `string` | 群公告。 |
+| `introduction` | `string` | 群简介。 |
+| `faceURL` | `string` | 群头像地址。 |
+| `ownerUserID` | `string` | 当前群主用户 ID。 |
+| `creatorUserID` | `string` | 群创建人用户 ID。 |
+| `createTime` | `number` | 群创建时间。 |
+| `memberCount` | `number` | 当前成员数快照。 |
+| `status` | `number` | 群状态。 |
+| `groupType` | `number` | 群类型。 |
+| `needVerification` | `number` | 入群验证策略。 |
+| `lookMemberInfo` | `number` | 普通成员查看成员资料的策略。 |
+| `applyMemberFriend` | `number` | 群成员之间申请好友的策略。 |
+| `notificationUpdateTime` | `number` | 群公告更新时间。 |
+| `notificationUserID` | `string` | 最近更新群公告的用户 ID。 |
+| `ex` | `string` | 群扩展字符串。 |
+| `attachedInfo` 商业版 | `string` | 商业附加信息,只按已确认协议解析。 |
+
+`memberCount` 和权限字段都是查询时快照,不能替代成员分页或服务端权限校验。完整模型与事件见[群组概览](/sdk/uniapp/group/overview-group)。
+
+分页期间群事件可能改变列表,应先把结果写入以 `groupID` 为键的映射,再计算排序;不要依赖页内位置。App 恢复、同步完成或群新增/删除事件到达后,可从 offset 0 重建快照。
+
+第一页应替换当前账号快照,后续页按 `groupID` 合并。切换账号时停止旧分页结果写入并清空群 store,避免把旧账号群列表追加到新账号。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx
new file mode 100644
index 0000000000..af96ae4423
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx
@@ -0,0 +1,16 @@
+---
+title: '查询已加入群组'
+description: '一次性读取当前账号已加入的群组快照。'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/get-joined-group-list'
+---
+
+`getJoinedGroupList()` 返回当前账号已加入群组的完整本地快照。
+
+```uts
+import { getJoinedGroupList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getJoinedGroupList()
+replaceJoinedGroups(result?.groups ?? [])
+```
+
+按 `groupID` 去重,并配合[群组概览](/sdk/uniapp/group/overview-group)的事件维护增量。群较多时改用分页入口。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx
new file mode 100644
index 0000000000..8565ad3b9a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx
@@ -0,0 +1,22 @@
+---
+title: '查询指定群资料'
+description: '按 groupID 列表批量查询群资料。'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/get-specified-groups-info'
+---
+
+群组查询只建立调用时的快照,不会触发群组事件。公开群发现、跨业务目录和复杂权限过滤应由业务后端提供;SDK 查询面向已知群组和当前账号已加入的群组。
+
+`getSpecifiedGroupsInfo()` 接收群组 ID 数组:
+
+```uts
+import { getSpecifiedGroupsInfo } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSpecifiedGroupsInfo(groupIDs)
+const groups = result?.groups ?? []
+```
+
+读取单个群组时仍传数组,并检查 `groups[0]` 是否存在。群组没有 URL 或 slug 字段,业务路由应先解析为稳定的 `groupID`。
+
+Promise 成功后,`result?.groups` 是匹配的 `OpenIMGroupItem[]`,字段含义见[分页获取已加入群组](/zh/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page)。结果不保证与输入 ID 按位置一一对应,应按 `groupID` 合并;未返回群可能不存在、已解散或当前无权访问。大量 ID 应分批查询。
+
+后续变化按 `groupID` 合并,完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx
new file mode 100644
index 0000000000..d593e71075
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx
@@ -0,0 +1,15 @@
+---
+title: '检查是否已加入群组'
+description: '判断当前账号是否属于指定群。'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/is-join-group'
+---
+
+`isJoinGroup()` 返回布尔值。
+
+```uts
+import { isJoinGroup } from '@/uni_modules/unix-openim-sdk'
+
+const joined = await isJoinGroup(groupID)
+```
+
+该结果是查询时快照。群状态变化后用群事件或重新查询刷新,不把一次 `true` 永久缓存。未加入时可按群验证策略发起申请。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx
new file mode 100644
index 0000000000..5ea681701f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx
@@ -0,0 +1,32 @@
+---
+title: '搜索已加入群组'
+description: '按群 ID 或群名称搜索本地群组。'
+sourcePath: '/sdk/uniapp/group/retrieving-groups/search-groups'
+---
+
+`searchGroups()` 只搜索当前用户已加入且已经同步到本地的群组。当前接口只使用 `keywordList` 的第一个关键词。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `keywordList` | `string[]` | 是 | 搜索关键词数组;传一个去除首尾空格的非空关键词。 |
+| `isSearchGroupID` | `boolean` | 是 | 是否匹配 `groupID`。 |
+| `isSearchGroupName` | `boolean` | 是 | 是否匹配群名称。 |
+
+```uts
+import { searchGroups } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchGroups({
+ keywordList: [keyword.trim()],
+ isSearchGroupID: true,
+ isSearchGroupName: true,
+})
+const groups = result?.groups ?? []
+```
+
+## 返回结果
+
+Promise 成功后,`result?.groups` 是匹配的 `OpenIMGroupItem[]`,字段含义见[分页获取已加入群组](/zh/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page)。空关键词应由 UI 拦截;结果按 `groupID` 去重,只建立当前关键词下的快照,不应覆盖完整的已加入群组列表。
+
+公开群发现、复杂分类和权限过滤不属于该方法,应由业务后端实现。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/set-group-announcement.mdx b/content/zh/docs/chat/sdk/uniapp/group/set-group-announcement.mdx
new file mode 100644
index 0000000000..b263926e2f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/set-group-announcement.mdx
@@ -0,0 +1,17 @@
+---
+title: '设置群公告'
+description: '通过 setGroupInfo 更新群公告。'
+sourcePath: '/sdk/uniapp/group/set-group-announcement'
+---
+
+群公告使用 `setGroupInfo()` 的 `notification` 字段更新。
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, notification: '周五 17:00 发布版本' })
+```
+
+只传公告字段,避免覆盖群名、头像或策略。公告可能触发群资料事件;以事件或重新查询确认 `notificationUpdateTime` 与 `notificationUserID`。
+
+公告会展示给群成员,不应包含 Token 或内部密钥。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/set-group-extension.mdx b/content/zh/docs/chat/sdk/uniapp/group/set-group-extension.mdx
new file mode 100644
index 0000000000..da236d91da
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/set-group-extension.mdx
@@ -0,0 +1,25 @@
+---
+title: '设置群扩展字段'
+description: '通过 setGroupInfo 更新群组 ex。'
+sourcePath: '/sdk/uniapp/group/set-group-extension'
+---
+
+群组业务扩展使用 `setGroupInfo()` 的 `ex` 字符串。`ex` 是完整字符串,SDK 不会按 JSON 字段自动合并。
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+const previous = JSON.parse(group.ex || '{}')
+
+await setGroupInfo({
+ groupID,
+ ex: JSON.stringify({
+ ...previous,
+ projectID: 'project-42',
+ }),
+})
+```
+
+多个模块共用时,应划分稳定命名空间,并在写入前保留其他模块的数据。解析失败时不要覆盖原值;扩展数据对有权读取群资料的成员可见,不要存放秘密。
+
+Promise 成功后,通过 `onGroupInfoChanged` 按 `groupID` 合并最新群资料;完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx b/content/zh/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx
new file mode 100644
index 0000000000..73a2bdaad5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx
@@ -0,0 +1,23 @@
+---
+title: '设置入群验证'
+description: '设置群成员加入时的验证策略。'
+sourcePath: '/sdk/uniapp/group/set-group-join-verification'
+---
+
+通过 `setGroupInfo()` 的 `needVerification` 更新申请和邀请用户加入群组时的验证策略。
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, needVerification: 1 })
+```
+
+| `needVerification` | 含义 |
+| --- | --- |
+| `0` | 用户申请需要审核;群成员邀请可直接入群。 |
+| `1` | 申请和普通成员邀请都需要审核;群主或管理员邀请除外。 |
+| `2` | 申请或邀请均可直接入群。 |
+
+`OpenIMGroupNeedVerification` 的类型范围是 `0 | 1 | 2`。客户端应根据该策略展示申请提示,但最终是否允许加入仍由 OpenIMServer 判断。策略只影响后续申请;已有申请和成员不会自动重新处理。
+
+Promise 成功后,通过 `onGroupInfoChanged` 合并最新群资料,完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx b/content/zh/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx
new file mode 100644
index 0000000000..2b18951d00
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx
@@ -0,0 +1,22 @@
+---
+title: '设置群成员加好友权限'
+description: '控制群成员之间是否可以发起好友申请。'
+sourcePath: '/sdk/uniapp/group/set-group-member-friend-permission'
+---
+
+通过 `setGroupInfo()` 的 `applyMemberFriend` 控制群成员能否通过群组向其他成员发送好友申请。
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, applyMemberFriend: 1 })
+```
+
+| `applyMemberFriend` | 含义 |
+| --- | --- |
+| `0` | 允许通过群成员关系发起好友申请。 |
+| `1` | 不允许通过群成员关系发起好友申请。 |
+
+`OpenIMGroupOption` 的类型范围是 `0 | 1`。该字段只控制从群成员关系发起好友申请的入口,不等同于隐藏成员资料。设置由服务端执行,客户端 UI 不是安全边界。
+
+Promise 成功表示设置请求完成。最新状态通过 `onGroupInfoChanged` 按 `groupID` 合并,完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx b/content/zh/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx
new file mode 100644
index 0000000000..5622fdb130
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx
@@ -0,0 +1,22 @@
+---
+title: '设置群成员资料可见性'
+description: '控制群成员是否可以查看其他成员资料。'
+sourcePath: '/sdk/uniapp/group/set-group-member-profile-access'
+---
+
+`lookMemberInfo` 控制群成员能否通过群组查看其他成员资料。
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({ groupID, lookMemberInfo: 1 })
+```
+
+| `lookMemberInfo` | 含义 |
+| --- | --- |
+| `0` | 允许成员查看其他成员资料。 |
+| `1` | 不允许成员查看其他成员资料。 |
+
+`OpenIMGroupOption` 的类型范围是 `0 | 1`。不要把这组值当作常见的布尔型 `0 = false、1 = true`。
+
+该设置与“是否允许通过群组添加好友”相互独立,也不替代业务后端的隐私与权限校验。Promise 成功后,通过 `onGroupInfoChanged` 合并最新群资料,完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。
diff --git a/content/zh/docs/chat/sdk/uniapp/group/update-group-profile.mdx b/content/zh/docs/chat/sdk/uniapp/group/update-group-profile.mdx
new file mode 100644
index 0000000000..fcdf9a4fb3
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/group/update-group-profile.mdx
@@ -0,0 +1,35 @@
+---
+title: '更新群资料'
+description: '通过 setGroupInfo 更新群名、公告、介绍、头像和策略字段。'
+sourcePath: '/sdk/uniapp/group/update-group-profile'
+---
+
+群名称、群简介和群头像都属于面向成员展示的基础资料,可以由同一个资料编辑表单提交。`setGroupInfo()` 只更新本次提供的可选字段。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `groupID` | `string` | 是 | 要更新的群组 ID。 |
+| `groupName` | `string` 或 `null` | 否 | 新群名称。 |
+| `introduction` | `string` 或 `null` | 否 | 新群简介。 |
+| `faceURL` | `string` 或 `null` | 否 | 新群头像地址。 |
+
+除 `groupID` 外,至少传入一个实际要修改的资料字段。未传字段保持原值。
+
+```uts
+import { setGroupInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setGroupInfo({
+ groupID,
+ groupName: groupName.trim(),
+ introduction: introduction.trim(),
+ faceURL,
+})
+```
+
+不要把公告、入群验证或成员权限字段混入普通资料保存操作,否则用户编辑群名称时可能意外覆盖其他设置。群主和管理员权限由服务端校验。
+
+Promise 成功表示 OpenIMServer 已完成请求。群资料变化通过 `onGroupInfoChanged` 按 `groupID` 合并;完整监听见[群组概览](/zh/sdk/uniapp/group/overview-group)。需要立即校准时调用 `getSpecifiedGroupsInfo()`,不要直接覆盖未提交字段。
+
+`displayIsRead` 商业版 是字段级扩展;公共服务端不支持时不要发送。
diff --git a/content/zh/docs/chat/sdk/uniapp/logger.mdx b/content/zh/docs/chat/sdk/uniapp/logger.mdx
new file mode 100644
index 0000000000..76fe6f7bc3
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/logger.mdx
@@ -0,0 +1,151 @@
+---
+title: '日志与诊断'
+description: '配置 UTS 插件日志级别,使用 operationID 关联调用链路,并在用户同意后上传脱敏日志。'
+sourcePath: '/sdk/uniapp/logger'
+---
+
+`unix-openim-sdk` 的日志用于定位 Android、iOS、HarmonyOS 上的初始化、登录和业务 API 调用问题。开发与预发布环境可以输出更详细的 SDK 日志;生产环境应只保留必要的错误与追踪字段,避免记录 Token、消息正文、文件 URL、服务端凭据或其他用户隐私。
+
+日志链路通常包含 `OpenIMInitConfig` 中的日志配置、单次调用可选的 `operationID`、插件抛出的诊断信息、上传进度事件,以及应用自己的结构化日志。
+
+## 日志级别
+
+日志级别在 `initSDK()` 时通过 `OpenIMInitConfig.logLevel` 配置。从最详细到最简略依次为:
+
+| 常量 | 数值 | 说明 |
+| --- | --- | --- |
+| `OpenIMLogLevelVerbose` | `6` | 最详细的运行跟踪,只用于短期深度诊断。 |
+| `OpenIMLogLevelDebug` | `5` | 开发与联调信息。 |
+| `OpenIMLogLevelInfo` | `4` | 常规运行信息。 |
+| `OpenIMLogLevelWarn` | `3` | 警告信息。 |
+| `OpenIMLogLevelError` | `2` | 错误信息。 |
+| `OpenIMLogLevelFatal` | `1` | 严重错误。 |
+| `OpenIMLogLevelPanic` | `0` | 最严重级别。 |
+
+生产环境不建议长期使用 `Verbose` 或 `Debug`。更稳妥的方式是按环境、灰度开关或用户主动提交诊断信息时临时提高日志级别。
+
+### 日志级别建议
+
+| 场景 | 建议配置 | 说明 |
+| --- | --- | --- |
+| 本地开发 | `OpenIMLogLevelDebug`,`isLogStandardOutput: true` | 在 Logcat 或 Xcode 控制台查看 SDK 调用细节。 |
+| 联调或预发布 | 根据问题临时使用更详细级别 | 配合用户 ID、会话 ID、错误码和 OpenIMServer 日志定位。 |
+| 生产默认 | `OpenIMLogLevelWarn` 或 `OpenIMLogLevelError`,关闭不必要的标准输出 | 降低噪声和敏感信息泄露风险。 |
+| 用户诊断模式 | 临时提高级别,并说明收集范围 | 取得用户同意,遵守隐私、保留与删除策略。 |
+
+## 配置日志
+
+日志选项属于 SDK 初始化配置,不是 `login()` 参数。下面以 Android 为例:
+
+```uts
+import {
+ OpenIMLogLevelDebug,
+ OpenIMPlatformAndroid,
+ initSDK,
+ type OpenIMInitConfig,
+} from '@/uni_modules/unix-openim-sdk'
+
+const config : OpenIMInitConfig = {
+ platformID: OpenIMPlatformAndroid,
+ apiAddr: 'https://im-api.example.com',
+ wsAddr: 'wss://im-ws.example.com',
+ logLevel: OpenIMLogLevelDebug,
+ isLogStandardOutput: true,
+ systemType: 'android',
+}
+
+await initSDK(config)
+```
+
+### 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `logLevel` | `OpenIMLogLevel` | 是 | 控制 Core 运行日志的详细程度。 |
+| `isLogStandardOutput` | `boolean` | 是 | 是否把 SDK 日志写到平台标准输出;开发与短期诊断时使用。 |
+| `logFilePath` | `string` 或 `null` | 否 | 自定义日志路径;通常让插件使用平台默认目录,只有明确管理沙盒路径时才覆盖。 |
+
+`apiAddr`、`wsAddr`、平台和 `systemType` 仍是初始化必需配置,但不是日志字段。插件错误中的错误码与错误信息也不是初始化日志参数。
+
+## 使用 operationID 定位一次调用
+
+`operationID` 是单次 SDK 调用的可选链路标识。多数异步 API 把它作为最后一个参数;日常调用可以省略,由插件生成或交给 Core 处理。只有需要把一次具体调用与原生日志、OpenIMServer 日志精确对应时,才显式创建并传入。
+
+```uts
+import { getConversationListSplit } from '@/uni_modules/unix-openim-sdk'
+
+const operationID = createDiagnosticOperationID()
+
+try {
+ const result = await getConversationListSplit(
+ { offset: 0, count: 50 },
+ operationID,
+ )
+
+ appLogger.info('openim_api_success', {
+ operationID,
+ action: 'get_conversation_page',
+ count: result?.conversations.length ?? 0,
+ })
+} catch (error) {
+ appLogger.error('openim_api_failed', {
+ operationID,
+ action: 'get_conversation_page',
+ error: sanitizeOpenIMError(error),
+ })
+ throw error
+}
+```
+
+每次调用使用新的 `operationID`,不要让多个无关请求共享同一个值。它不是用户身份、权限凭据、会话 ID 或业务幂等键,不能替代 Token、`conversationID` 或 `clientMsgID`。一个业务流程包含多次 SDK 调用时,为每次调用生成独立 operationID,另用业务侧 trace ID 串联整个流程。
+
+## 记录业务上下文
+
+应用日志可以保留页面路由、业务动作、operationID、脱敏错误码和必要的目标标识,例如 `conversationID` 或 `clientMsgID`。不要记录:
+
+- 用户 Token、管理员 Token、secret 或商业业务凭据。
+- 完整消息正文、原始自定义消息 payload、私人文件 URL。
+- 不必要的用户资料、通讯录、群成员清单。
+- SDK 数据库内容和完整本机沙盒路径。
+
+日志中的目标标识也应按支持与隐私策略处理。公开 issue 或跨团队传递前再次脱敏。
+
+## 上传日志
+
+`uploadLogs()` 接收上传行数和扩展说明。上传前必须取得用户同意,并说明收集范围、用途和保留策略。
+
+```uts
+import { uploadLogs } from '@/uni_modules/unix-openim-sdk'
+
+const operationID = createDiagnosticOperationID()
+
+await uploadLogs(
+ {
+ line: 2000,
+ ex: JSON.stringify({ scene: 'login-timeout' }),
+ },
+ operationID,
+)
+```
+
+### 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `line` | `number` | 是 | 本次上传的日志行数。应设置上限,避免无界上传。 |
+| `ex` | `string` | 是 | 脱敏后的诊断扩展信息,例如场景名称;不要放 Token、消息或凭据。 |
+
+Promise 成功表示日志上传请求已经完成,不代表问题已经提交给支持团队或已经得到处理。失败时限制重试次数,避免后台持续消耗流量与电量。
+
+## 观察上传进度
+
+`onUploadLogsProgress()` 返回独立订阅句柄。进度事件的完整业务归属在[消息概览](/sdk/uniapp/message/overview-message);日志页面只说明诊断上传时的使用边界。拥有该监听的诊断 service 结束时,必须通过 `off(subscription)` 释放。
+
+上传进度用于界面展示,不代表服务端已经完成问题分析。不要把原始日志内容或 Token 塞入进度状态。
+
+## 相关页面
+
+- [安装、初始化与 SDK 信息](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)
+- [用户认证](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [发送第一条消息](/sdk/uniapp/getting-started/send-first-message)
+- [发送消息](/sdk/uniapp/message/sending-messages/send-message)
diff --git a/content/zh/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx
new file mode 100644
index 0000000000..31111e31c5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx
@@ -0,0 +1,27 @@
+---
+title: '检查语音转文字能力'
+description: '商业版查询当前语音转写能力。'
+sourcePath: '/sdk/uniapp/message/composing-messages/check-speech-to-text'
+---
+
+`getSpeechToTextCapabilities()` 商业版 返回能力信息。
+
+```uts
+import { getSpeechToTextCapabilities } from '@/uni_modules/unix-openim-sdk'
+
+const capabilities = await getSpeechToTextCapabilities()
+```
+
+Promise 成功后,结果是 `OpenIMSpeechToTextCapabilitiesResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `format` | `string[]` 或 `null` | 支持的音频格式。 |
+| `sampleRateHz` | `number[]` 或 `null` | 支持的音频采样率,单位为赫兹。 |
+| `maxRecordTimeMs` | `number` 或 `null` | 最大录音时长,单位为毫秒。 |
+| `maxFileSize` | `number` 或 `null` | 最大文件大小,单位为字节。 |
+| `provider` | `string` 或 `null` | 当前语音识别服务提供方。 |
+| `requestType` | `string` 或 `null` | 服务端要求的请求类型。 |
+| `crossDomain` | `boolean` 或 `null` | 是否允许跨域处理。 |
+
+在展示转写入口前查询并缓存当前 session 的结果。录音完成后按能力字段校验格式、采样率、时长和字节数;能力可能随服务端、语言或账号变化,重新登录后应刷新。查询失败或没有能力时停用入口,不要猜测限制。查询不会触发消息事件。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx
new file mode 100644
index 0000000000..5fcc76591f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx
@@ -0,0 +1,15 @@
+---
+title: '查询输入状态'
+description: '商业版查询指定会话和用户的输入状态。'
+sourcePath: '/sdk/uniapp/message/composing-messages/get-typing-status'
+---
+
+`getInputStates()` 商业版 查询当前快照。
+
+```uts
+import { getInputStates } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getInputStates({ conversationID, userID: peerUserID })
+```
+
+输入状态是短时提示,不持久化为业务事实。以事件更新 UI,并设置本地超时自动清除,避免断线后永久显示“正在输入”。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx
new file mode 100644
index 0000000000..889c894838
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx
@@ -0,0 +1,15 @@
+---
+title: '保存本地转写内容'
+description: '商业版把更新后的消息内容保存到本地消息。'
+sourcePath: '/sdk/uniapp/message/composing-messages/save-local-transcript'
+---
+
+`setMessageLocalContent()` 商业版 把完整消息对象保存到指定会话的本地存储。
+
+```uts
+import { setMessageLocalContent } from '@/uni_modules/unix-openim-sdk'
+
+await setMessageLocalContent({ conversationID, message: updatedMessage })
+```
+
+先在原消息副本中合并转写字段,不覆盖 `clientMsgID`、路由和其他业务 elem。该修改是本地内容,不应假定同步到其他设备或服务端。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx
new file mode 100644
index 0000000000..f89aa1d5bb
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx
@@ -0,0 +1,21 @@
+---
+title: '将音频转为文字'
+description: '商业版提交音频文件名和数据进行语音转写。'
+sourcePath: '/sdk/uniapp/message/composing-messages/transcribe-audio'
+---
+
+`speechToText()` 商业版 使用文件名和音频数据。原生文件不能直接作为 UTS 跨层参数,需按商业服务协议编码为字符串再提交。
+
+```uts
+import { speechToText } from '@/uni_modules/unix-openim-sdk'
+
+const result = await speechToText({
+ filename: 'voice.m4a',
+ data: audioBase64,
+})
+if (result?.text != null) setTranscript(result.text)
+```
+
+Promise 成功返回 `OpenIMSpeechToTextResult | null`,其中 `text` 是可选的识别文本。调用前先[查询语音识别能力](/zh/sdk/uniapp/message/composing-messages/check-speech-to-text),限制音频大小、格式、采样率和时长。
+
+`data` 的编码以商业服务协议为准;不要记录完整音频或 Base64。转写不会自动修改原语音消息,也不触发消息事件。转写结果需要用户确认,不用于高风险自动决策;需要本地保存结果时见[保存语音转写结果](/zh/sdk/uniapp/message/composing-messages/save-local-transcript)。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx
new file mode 100644
index 0000000000..4d56a78665
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx
@@ -0,0 +1,29 @@
+---
+title: '翻译文本和消息'
+description: '商业版翻译文本或指定消息,并说明 HarmonyOS 不支持。'
+sourcePath: '/sdk/uniapp/message/composing-messages/translate-text-and-messages'
+---
+
+两个接口均属于商业版,Android 与 iOS 支持,HarmonyOS 当前返回 `platform-unsupported`。
+
+```uts
+import {
+ translateMessage,
+ translateText,
+} from '@/uni_modules/unix-openim-sdk'
+
+const textResult = await translateText({
+ content: 'Hello',
+ sourceLanguageCode: 'en',
+ targetLanguageCode: 'zh',
+})
+
+const translatedMessage = await translateMessage({
+ conversationID,
+ clientMsgID,
+ sourceLanguageCode: 'en',
+ targetLanguageCode: 'zh',
+})
+```
+
+语言代码使用商业服务支持的标准。翻译内容可能包含隐私,应遵守服务端数据处理政策。原文始终保留,翻译失败或平台不支持时降级显示原文。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx
new file mode 100644
index 0000000000..a2002a99be
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx
@@ -0,0 +1,24 @@
+---
+title: '更新输入状态'
+description: '上报会话输入焦点并处理输入状态变化事件。'
+sourcePath: '/sdk/uniapp/message/composing-messages/update-typing-status'
+---
+
+公共入口 `changeInputStates()` 以会话和焦点状态上报输入状态。本页归属 `onConversationUserInputStatusChanged`。
+
+```uts
+import {
+ changeInputStates,
+ off,
+ onConversationUserInputStatusChanged,
+} from '@/uni_modules/unix-openim-sdk'
+
+const inputSubscription = onConversationUserInputStatusChanged((status) => {
+ updateConversationInputStatus(status)
+})
+
+await changeInputStates({ conversationID, userID: peerUserID, focus: true })
+off(inputSubscription)
+```
+
+进入输入框上报 true,失焦或离开页面上报 false,并做节流。商业版兼容入口 `typingStatusUpdate()` 商业版 使用 `recvID` 和 `msgTip`;同一流程不要同时调用两个入口。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx
new file mode 100644
index 0000000000..68dc7ca9c6
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx
@@ -0,0 +1,29 @@
+---
+title: '创建名片消息'
+description: '使用 OpenIMCardElem 创建用户名片消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-card-message'
+---
+
+## 参数说明
+
+`createCardMessage()` 接收 `OpenIMCardElem`。合同字段都是可选值,但创建可展示名片时应提供以下完整快照:
+
+| 参数 | 类型 | 建议 | 说明 |
+| --- | --- | --- | --- |
+| `userID` | `string` 或 `null` | 必填 | 名片对应的用户 ID。 |
+| `nickname` | `string` 或 `null` | 必填 | 名片中保存的展示名称。 |
+| `faceURL` | `string` 或 `null` | 必填 | 名片中保存的头像地址。 |
+| `ex` | `string` 或 `null` | 必填 | 名片扩展信息;没有内容时传空字符串。 |
+
+```uts
+import { createCardMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createCardMessage({
+ userID: 'user_b',
+ nickname: 'Alex',
+ faceURL: 'https://example.com/avatar.png',
+ ex: '',
+})
+```
+
+Promise 成功只创建 `OpenIMMessageItem | null`,不会自动发送。名片是创建时快照,不会随用户资料自动更新;接收方点击后应按 `userID` 查询最新资料,也不要把名片字段当作可信身份认证。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx
new file mode 100644
index 0000000000..e31d04e645
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx
@@ -0,0 +1,33 @@
+---
+title: '创建自定义或高级文本消息'
+description: '创建业务自定义消息或带实体范围的高级文本。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-custom-message'
+---
+
+`createCustomMessage()` 适合订单、任务、邀请或投票等双方已约定 schema 的业务消息。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `data` | `string` | 是 | 业务载荷的完整字符串,通常保存序列化后的 JSON。 |
+| `extension` | `string` | 是 | 业务扩展信息的完整字符串。 |
+| `descriptionText` | `string` | 是 | 消息类型说明或不支持该类型时的降级展示文本。 |
+
+```uts
+import { createCustomMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createCustomMessage({
+ data: JSON.stringify({ type: 'task', taskID: 'task_42' }),
+ extension: JSON.stringify({ schemaVersion: 1 }),
+ descriptionText: '任务卡片',
+})
+```
+
+`data` 是业务载荷,`extension` 是扩展信息,`descriptionText` 用于类型说明或降级展示。三者都会发给接收方,不能包含秘密;接收端应校验协议版本、大小和字段,再映射业务模型,不要执行不可信内容。
+
+当前 uni-app / uni-app x 合同没有 Wasm 商业扩展中的 `searchText` 参数,不要传入该字段。Promise 成功只返回待发送的 `OpenIMMessageItem | null`;发送与自定义业务事件是不同链路。
+
+## 高级文本消息
+
+`createAdvancedTextMessage()` 使用 `OpenIMCreateAdvancedTextMessageParams` 创建带文本实体/样式范围的消息。范围必须对应原始文本索引,越界数据应在调用前拒绝。两种入口都只创建消息,不发送。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx
new file mode 100644
index 0000000000..73f630b257
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx
@@ -0,0 +1,15 @@
+---
+title: '创建表情消息'
+description: '使用表情索引和业务数据创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-face-message'
+---
+
+`createFaceMessage()` 接收 `index` 与 `data`。
+
+```uts
+import { createFaceMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createFaceMessage({ index: 1, data: 'smile' })
+```
+
+发送与接收端必须共享表情包版本和索引约定。未知索引应显示降级占位,不让解析错误阻断消息列表。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx
new file mode 100644
index 0000000000..97b0110b80
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx
@@ -0,0 +1,33 @@
+---
+title: '从 URL 创建文件消息'
+description: '使用已上传文件的 OpenIMFileElem 创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-file-message-by-url'
+---
+
+`createFileMessageByURL()` 使用已经上传的文件信息创建消息。
+
+## 参数说明
+
+| 参数 | 类型 | 说明 |
+| --- | --- | --- |
+| `filePath` | `string` 或 `null` | 文件的本地名称或业务路径;只有远端资源时传空字符串。 |
+| `fileName` | `string` 或 `null` | 对外展示的文件名。 |
+| `uuid` | `string` 或 `null` | 文件资源的唯一标识。 |
+| `sourceUrl` | `string` 或 `null` | 已上传文件的可访问地址。 |
+| `fileSize` | `number` 或 `null` | 文件大小,单位为字节。 |
+
+```uts
+import { createFileMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createFileMessageByURL({
+ filePath: '',
+ fileName: 'report.pdf',
+ uuid: createBusinessUUID(),
+ sourceUrl: uploaded.url,
+ fileSize: uploaded.size,
+})
+```
+
+文件 URL、名称、UUID 和大小必须来自真实上传结果;URL 需要接收方可访问,不能直接暴露私有存储凭据。当前 `OpenIMFileElem` 不包含 Wasm 版的 `fileType` 字段,不要传入未公开字段。
+
+Promise 成功只创建待发送的 `OpenIMMessageItem | null`。由于资源已经上传,发送时使用 `sendMessageNotOss()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx
new file mode 100644
index 0000000000..f21bc7d00b
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx
@@ -0,0 +1,18 @@
+---
+title: '从完整路径创建文件消息'
+description: '使用本地文件完整路径和文件名创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-file-message-from-full-path'
+---
+
+公共入口 `createFileMessageFromFullPath()`:
+
+```uts
+import { createFileMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createFileMessageFromFullPath({
+ filePath: '/data/user/0/app/cache/report.pdf',
+ fileName: 'report.pdf',
+})
+```
+
+商业版 `createFileMessage()` 商业版 可携带来源路径。调用前校验存在性、大小、扩展名和权限;文件名只用于展示,不能作为路径拼接依据。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx
new file mode 100644
index 0000000000..e2ba6b32f7
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx
@@ -0,0 +1,15 @@
+---
+title: '创建逐条转发消息'
+description: '基于现有消息创建可发送的转发消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-forward-message'
+---
+
+`createForwardMessage()` 接收一条完整消息并创建转发对象。
+
+```uts
+import { createForwardMessage } from '@/uni_modules/unix-openim-sdk'
+
+const forward = await createForwardMessage(sourceMessage)
+```
+
+创建后仍需向新目标发送。转发前检查原内容、权限与隐私;本地扩展、发送状态等设备字段不应作为接收方权威数据。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx
new file mode 100644
index 0000000000..136235f8b2
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx
@@ -0,0 +1,40 @@
+---
+title: '从 URL 创建图片消息'
+description: '使用已上传图片的 elem 信息创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-image-message-by-url'
+---
+
+`createImageMessageByURL()` 使用已经上传的图片信息创建消息。原图、大图和缩略图可以指向不同资源;示例仅在三者相同时复用同一个对象。
+
+## 参数说明
+
+| 参数 | 类型 | 说明 |
+| --- | --- | --- |
+| `sourcePicture` | `OpenIMPicture` 或 `null` | 原图信息。 |
+| `bigPicture` | `OpenIMPicture` 或 `null` | 大图信息。 |
+| `snapshotPicture` | `OpenIMPicture` 或 `null` | 缩略图信息。 |
+| `sourcePath` | `string` 或 `null` | 原始文件的本地名称或业务路径;只有远端资源时传空字符串。 |
+
+三个图片对象使用相同字段:`uuid`、`type`、`size`、`width`、`height` 和 `url`,均为可选值;创建完整可展示消息时应填写真实上传结果。
+
+```uts
+import { createImageMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const picture = {
+ uuid: createBusinessUUID(),
+ type: 'image/jpeg',
+ size: 120000,
+ width: 1280,
+ height: 720,
+ url: uploaded.url,
+}
+
+const message = await createImageMessageByURL({
+ sourcePicture: picture,
+ bigPicture: picture,
+ snapshotPicture: picture,
+ sourcePath: '',
+})
+```
+
+URL 必须能被消息参与者访问,尺寸、大小和类型要与真实资源一致,不要把本地路径填入 URL 字段。Promise 成功只创建待发送对象;资源已经上传时使用 `sendMessageNotOss()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx
new file mode 100644
index 0000000000..b07fc79368
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx
@@ -0,0 +1,17 @@
+---
+title: '从完整路径创建图片消息'
+description: '使用原生可读的本地完整路径创建图片消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-image-message-from-full-path'
+---
+
+公共入口 `createImageMessageFromFullPath()` 接收本地完整路径:
+
+```uts
+import { createImageMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createImageMessageFromFullPath('/data/user/0/app/cache/photo.jpg')
+```
+
+商业版还提供结构化 `createImageMessage()` 商业版,参数可包含平台来源路径。两者都要求原生层有读取权限。
+
+`unifile://`、相册临时对象或 content URI 应先通过 uni 平台 API转成插件可读路径。文件不存在或权限不足时,不要进入发送阶段。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx
new file mode 100644
index 0000000000..201b698bef
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx
@@ -0,0 +1,25 @@
+---
+title: '创建位置消息'
+description: '使用经纬度和描述创建位置消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-location-message'
+---
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `descriptionText` | `string` | 是 | 位置名称或地址描述。 |
+| `longitude` | `number` | 是 | 经度。 |
+| `latitude` | `number` | 是 | 纬度。 |
+
+```uts
+import { createLocationMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createLocationMessage({
+ descriptionText: '上海市浦东新区',
+ longitude: 121.4737,
+ latitude: 31.2304,
+})
+```
+
+业务层应在获得用户授权后获取定位,并根据产品隐私规则控制精度。位置属于敏感数据,发送前明确提示接收范围,不要在日志中记录精确坐标。Promise 成功只返回待发送的 `OpenIMMessageItem | null`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx
new file mode 100644
index 0000000000..2ecf9316d5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx
@@ -0,0 +1,15 @@
+---
+title: '创建 Markdown 消息'
+description: '商业版创建 Markdown 内容消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-markdown-message'
+---
+
+`createMarkdownMessage()` 商业版 使用 `OpenIMCreateMarkdownMessageParams`。
+
+```uts
+import { createMarkdownMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createMarkdownMessage({ content: '**发布完成**' })
+```
+
+具体字段以锁定合同为准。接收端渲染 Markdown 前进行安全过滤,禁用危险 HTML、脚本和不受信任 URL;原始内容不是可信 HTML。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx
new file mode 100644
index 0000000000..ff0a336099
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx
@@ -0,0 +1,25 @@
+---
+title: '创建合并转发消息'
+description: '把多条消息合并为摘要与消息列表。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-merger-message'
+---
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `messageList` | `OpenIMMessageItem[]` | 是 | 要合并的已发送消息列表。 |
+| `title` | `string` | 是 | 合并消息卡片标题。 |
+| `abstractList` | `string[]` | 是 | 卡片摘要列表。 |
+
+```uts
+import { createMergerMessage } from '@/uni_modules/unix-openim-sdk'
+
+const merger = await createMergerMessage({
+ messageList: selectedMessages,
+ title: '项目讨论记录',
+ abstractList: selectedMessages.slice(0, 4).map(buildSummary),
+})
+```
+
+Promise 成功只返回新的待发送对象,不修改原消息。摘要由业务生成但不可与实际消息矛盾,应为无法解析的消息类型提供降级文本。转发前检查每条消息的可分享权限和敏感信息;大型列表还应限制条数与总大小。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx
new file mode 100644
index 0000000000..9b916db35f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx
@@ -0,0 +1,18 @@
+---
+title: '创建引用回复消息'
+description: '创建普通或高级引用消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-quote-message'
+---
+
+`createQuoteMessage()` 使用文本和被引用消息的 JSON 字符串:
+
+```uts
+import { createQuoteMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createQuoteMessage({
+ text: '同意',
+ message: JSON.stringify(quotedMessage),
+})
+```
+
+`createAdvancedQuoteMessage()` 还支持高级文本实体。引用的是消息快照;原消息撤回或删除后,UI 应显示不可用提示而不是崩溃。序列化前使用插件返回的完整消息,不要只复制 `clientMsgID` 伪造引用对象。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx
new file mode 100644
index 0000000000..8e40921ddb
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx
@@ -0,0 +1,33 @@
+---
+title: '从 URL 创建语音消息'
+description: '使用已上传音频的 OpenIMSoundElem 创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-sound-message-by-url'
+---
+
+`createSoundMessageByURL()` 使用已经上传的音频信息创建消息。
+
+## 参数说明
+
+| 参数 | 类型 | 说明 |
+| --- | --- | --- |
+| `uuid` | `string` 或 `null` | 音频资源的唯一标识。 |
+| `soundPath` | `string` 或 `null` | 音频文件的本地名称或业务路径;只有远端资源时传空字符串。 |
+| `sourceUrl` | `string` 或 `null` | 已上传音频的可访问地址。 |
+| `dataSize` | `number` 或 `null` | 音频大小,单位为字节。 |
+| `duration` | `number` 或 `null` | 音频时长,单位按服务端协议约定。 |
+
+```uts
+import { createSoundMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createSoundMessageByURL({
+ uuid: createBusinessUUID(),
+ soundPath: '',
+ sourceUrl: uploaded.url,
+ dataSize: uploaded.size,
+ duration,
+})
+```
+
+URL、UUID、大小和时长应与上传结果一致。资源需对接收方可访问,不要把本地沙盒路径当成远端 URL。当前 `OpenIMSoundElem` 不包含 Wasm 版的 `soundType` 字段,不要传入未公开字段。
+
+Promise 成功只创建待发送的 `OpenIMMessageItem | null`;发送时使用 `sendMessageNotOss()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx
new file mode 100644
index 0000000000..7da1d5959e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx
@@ -0,0 +1,18 @@
+---
+title: '从完整路径创建语音消息'
+description: '使用本地音频路径和时长创建语音消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path'
+---
+
+公共入口 `createSoundMessageFromFullPath()` 接收 `soundPath` 与 `duration`:
+
+```uts
+import { createSoundMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createSoundMessageFromFullPath({
+ soundPath: '/data/user/0/app/cache/voice.m4a',
+ duration: 8,
+})
+```
+
+商业版 `createSoundMessage()` 商业版 使用同一结构。时长单位以合同/服务端约定为准,并与真实媒体一致。录音完成、文件关闭且权限可读后再调用。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx
new file mode 100644
index 0000000000..8427643d29
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx
@@ -0,0 +1,45 @@
+---
+title: '创建 @ 文本消息'
+description: '在群聊中创建带 @ 用户信息的文本消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-text-at-message'
+---
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `text` | `string` | 是 | 消息正文;建议使用稳定的 `@userID` 标记。 |
+| `atUserIDList` | `string[]` | 是 | 被提及用户 ID;@ 全体时先调用 `getAtAllTag()` 获取专用标记。 |
+| `atUsersInfo` | `OpenIMAtUsersInfoItem[]` 或 `null` | 否 | 用户 ID 与群内展示名信息。 |
+| `quoteMessage` | `OpenIMMessageItem` 或 `null` | 否 | 被引用的原消息。 |
+
+```uts
+import { createTextAtMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextAtMessage({
+ text: '@user_a 请确认',
+ atUserIDList: ['user_a'],
+ atUsersInfo: [{ atUserID: 'user_a', groupNickname: 'Alex' }],
+})
+```
+
+Promise 成功只返回待发送的 `OpenIMMessageItem | null`。该消息只能发送到群聊;创建本身不会改变会话的 @ 状态,也不会触发新消息事件。`atUserIDList` 与 `atUsersInfo` 中的用户应保持一致。
+
+## 提及全体成员
+
+不要在业务代码中写死全体成员标记。商业版先调用 `getAtAllTag()` 商业版 取得当前标记,再将它同时放入正文和 `atUserIDList`:
+
+```uts
+import { getAtAllTag } from '@/uni_modules/unix-openim-sdk'
+
+const atAllResult = await getAtAllTag()
+const atAllTag = atAllResult?.tag
+if (atAllTag != null) {
+ const message = await createTextAtMessage({
+ text: `${atAllTag} 请查看群公告`,
+ atUserIDList: [atAllTag],
+ })
+}
+```
+
+`getAtAllTag()` 只读取 SDK 约定,不创建消息,也不触发事件。创建后仍需调用发送 API 并填写目标群 ID。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx
new file mode 100644
index 0000000000..3c9a4c5430
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx
@@ -0,0 +1,16 @@
+---
+title: '创建文本消息'
+description: '创建待发送的普通文本消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-text-message'
+---
+
+`createTextMessage()` 返回 `OpenIMMessageItem | null`,不发送消息。
+
+```uts
+import { createTextMessage } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextMessage('你好,OpenIMSDK')
+if (message == null) throw new Error('Failed to create text message')
+```
+
+文本应先按产品限制校验长度。创建成功后把消息传给[发送消息](/sdk/uniapp/message/sending-messages/send-message);不要手工拼 `OpenIMMessageItem`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx
new file mode 100644
index 0000000000..0f449ba0ab
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx
@@ -0,0 +1,47 @@
+---
+title: '从 URL 创建视频消息'
+description: '使用已上传视频和封面的 OpenIMVideoElem 创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-video-message-by-url'
+---
+
+`createVideoMessageByURL()` 使用已经上传的视频和快照信息创建消息。
+
+## 参数说明
+
+| 参数 | 类型 | 说明 |
+| --- | --- | --- |
+| `videoPath` | `string` 或 `null` | 视频文件的本地名称或业务路径;只有远端资源时传空字符串。 |
+| `duration` | `number` 或 `null` | 视频时长。 |
+| `videoType` | `string` 或 `null` | 视频 MIME 类型。 |
+| `videoUUID` | `string` 或 `null` | 视频资源的唯一标识。 |
+| `videoUrl` | `string` 或 `null` | 已上传视频的可访问地址。 |
+| `videoSize` | `number` 或 `null` | 视频大小,单位为字节。 |
+| `snapshotPath` | `string` 或 `null` | 快照文件的本地名称或业务路径。 |
+| `snapshotUUID` | `string` 或 `null` | 快照资源的唯一标识。 |
+| `snapshotSize` | `number` 或 `null` | 快照大小,单位为字节。 |
+| `snapshotUrl` | `string` 或 `null` | 已上传快照的可访问地址。 |
+| `snapshotWidth` | `number` 或 `null` | 快照宽度,单位为像素。 |
+| `snapshotHeight` | `number` 或 `null` | 快照高度,单位为像素。 |
+
+```uts
+import { createVideoMessageByURL } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createVideoMessageByURL({
+ videoPath: '',
+ duration,
+ videoType: uploadedVideo.contentType,
+ videoUUID: createBusinessUUID(),
+ videoUrl: uploadedVideo.url,
+ videoSize: uploadedVideo.size,
+ snapshotPath: '',
+ snapshotUUID: createBusinessUUID(),
+ snapshotSize: uploadedSnapshot.size,
+ snapshotUrl: uploadedSnapshot.url,
+ snapshotWidth,
+ snapshotHeight,
+})
+```
+
+视频 URL、封面 URL、UUID、大小、时长和类型必须使用上传后的真实值,接收方必须能访问两个资源。当前 `OpenIMVideoElem` 不包含 Wasm 版的 `snapShotType` 字段,不要传入未公开字段。
+
+Promise 成功只创建待发送的 `OpenIMMessageItem | null`;发送时使用 `sendMessageNotOss()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx
new file mode 100644
index 0000000000..9804e8be7d
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx
@@ -0,0 +1,20 @@
+---
+title: '从完整路径创建视频消息'
+description: '使用视频、封面完整路径和媒体信息创建消息。'
+sourcePath: '/sdk/uniapp/message/creating-messages/create-video-message-from-full-path'
+---
+
+公共入口 `createVideoMessageFromFullPath()` 使用 `OpenIMCreateVideoMessageParams`:
+
+```uts
+import { createVideoMessageFromFullPath } from '@/uni_modules/unix-openim-sdk'
+
+const message = await createVideoMessageFromFullPath({
+ videoPath: '/data/user/0/app/cache/video.mp4',
+ videoType: 'mp4',
+ duration: 12,
+ snapshotPath: '/data/user/0/app/cache/video-cover.jpg',
+})
+```
+
+商业版 `createVideoMessage()` 商业版 还可使用来源路径字段。视频和封面都必须真实存在并可读;时长、类型与文件一致。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx
new file mode 100644
index 0000000000..a2c7cf94c1
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx
@@ -0,0 +1,15 @@
+---
+title: '清空全部本地消息'
+description: '删除当前账号在本设备的全部消息。'
+sourcePath: '/sdk/uniapp/message/managing-messages/clear-all-local-messages'
+---
+
+`deleteAllMsgFromLocal()` 清空当前账号本地消息。
+
+```uts
+import { deleteAllMsgFromLocal } from '@/uni_modules/unix-openim-sdk'
+
+await deleteAllMsgFromLocal()
+```
+
+这是高风险范围操作,二次确认并停止所有消息查询。它不保证删除服务端数据;重新同步可能恢复部分消息。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx
new file mode 100644
index 0000000000..47a27c1cdd
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx
@@ -0,0 +1,15 @@
+---
+title: '清空本地与服务端消息'
+description: '删除当前账号的全部本地及服务端消息。'
+sourcePath: '/sdk/uniapp/message/managing-messages/clear-all-messages'
+---
+
+`deleteAllMsgFromLocalAndSvr()` 是更高风险的全局删除。
+
+```uts
+import { deleteAllMsgFromLocalAndSvr } from '@/uni_modules/unix-openim-sdk'
+
+await deleteAllMsgFromLocalAndSvr()
+```
+
+调用前明确影响范围和恢复策略,并进行强确认。成功后重建会话与消息 store;失败时重新查询,不假定原子完成。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx
new file mode 100644
index 0000000000..d8dd61681f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx
@@ -0,0 +1,15 @@
+---
+title: '删除本地消息'
+description: '按会话和 clientMsgID 删除当前设备中的消息。'
+sourcePath: '/sdk/uniapp/message/managing-messages/delete-local-message'
+---
+
+`deleteMessageFromLocalStorage()` 删除本地消息;兼容入口 `deleteMessage()` 使用同一参数。
+
+```uts
+import { deleteMessageFromLocalStorage } from '@/uni_modules/unix-openim-sdk'
+
+await deleteMessageFromLocalStorage({ conversationID, clientMsgID })
+```
+
+该操作不会撤回对端消息,也不应伪装为服务端删除。成功后从当前设备 store 移除;需要通知对端使用撤回或商业版删除能力。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx
new file mode 100644
index 0000000000..bfe3b055cf
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx
@@ -0,0 +1,42 @@
+---
+title: '删除已保存消息'
+description: '商业版批量删除消息,并处理 onMsgDeleted。'
+sourcePath: '/sdk/uniapp/message/managing-messages/delete-saved-messages'
+---
+
+`deleteMessages()` 商业版 批量删除当前账号在同一会话中明确指定的消息。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | 是 | 要删除消息所在的会话 ID。 |
+| `clientMsgIDs` | `string[]` | 是 | 要删除的消息 ID;同一批 ID 必须属于同一会话。 |
+| `IsSync` | `boolean` | 是 | 是否把删除动作同步到当前账号的其他客户端;字段名首字母为大写。 |
+
+```uts
+import {
+ deleteMessages,
+ off,
+ onMsgDeleted,
+} from '@/uni_modules/unix-openim-sdk'
+
+const deletedSubscription = onMsgDeleted((message) => {
+ if (message == null) return
+ removeMessage(resolveConversationID(message), message.clientMsgID)
+})
+
+await deleteMessages({
+ conversationID,
+ clientMsgIDs: selectedMessageIDs,
+ IsSync: true,
+})
+
+function removeMessageDeletedListener() {
+ off(deletedSubscription)
+}
+```
+
+`IsSync: false` 删除当前设备及当前账号服务端记录;`true` 还请求把删除动作同步到其他客户端。它不会删除其他会话成员的副本,也不会产生撤回提示。
+
+Promise 成功表示删除请求已经完成;同步开启时,这不代表其他客户端已经收到事件或完成界面更新。公共事件 `onMsgDeleted` 是本页归属事件,参数是 `OpenIMMessageItem | null`;结合消息路由确定会话后按 `clientMsgID` 幂等移除。组件卸载、退出登录或切换账号时调用 `removeMessageDeletedListener()`;需要校准时重新查询对应会话的历史消息。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx
new file mode 100644
index 0000000000..4ec4209658
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx
@@ -0,0 +1,27 @@
+---
+title: '删除用户在会话中的全部消息'
+description: '商业版删除指定用户在一个会话中的消息并处理 raw 事件。'
+sourcePath: '/sdk/uniapp/message/managing-messages/delete-user-messages'
+---
+
+`deleteUserAllMessagesInConv()` 与事件 `onDeleteUserAllMsgsInConv` 均属于商业版。
+
+```uts
+import {
+ deleteUserAllMessagesInConv,
+ off,
+ onDeleteUserAllMsgsInConv,
+} from '@/uni_modules/unix-openim-sdk'
+
+const deleteSubscription = onDeleteUserAllMsgsInConv((payload) => {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) refreshConversationMessages()
+ } catch (_) {}
+})
+
+await deleteUserAllMessagesInConv({ conversationID, userID: targetUserID })
+off(deleteSubscription)
+```
+
+这是高风险范围删除,需权限与二次确认。raw payload 校验后重新查询,不依赖未冻结字段。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx
new file mode 100644
index 0000000000..c81562db89
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx
@@ -0,0 +1,15 @@
+---
+title: '查询置顶消息'
+description: '商业版查询一个会话的置顶消息。'
+sourcePath: '/sdk/uniapp/message/managing-messages/get-pinned-messages'
+---
+
+`getConversationPinnedMsg()` 商业版 按会话查询置顶消息。
+
+```uts
+import { getConversationPinnedMsg } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getConversationPinnedMsg({ conversationID })
+```
+
+以返回 DTO 的消息列表/分页字段为准,按 `clientMsgID` 去重。置顶变化后重新查询,避免依赖 raw 事件内部字段。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx
new file mode 100644
index 0000000000..dbd1dbefc2
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx
@@ -0,0 +1,25 @@
+---
+title: '插入本地群聊消息'
+description: '把业务生成的消息插入群聊本地历史。'
+sourcePath: '/sdk/uniapp/message/managing-messages/insert-local-group-message'
+---
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `message` | `OpenIMMessageItem` | 是 | 要写入本地数据库的完整消息对象。 |
+| `groupID` | `string` | 是 | 目标群组 ID。 |
+| `sendID` | `string` | 是 | 消息发送方的用户 ID。 |
+
+```uts
+import { insertGroupMessageToLocalStorage } from '@/uni_modules/unix-openim-sdk'
+
+await insertGroupMessageToLocalStorage({
+ message,
+ groupID,
+ sendID: currentUserID,
+})
+```
+
+Promise 成功只修改当前设备的本地数据库,不发送给群成员,也不触发新消息事件。适合迁移或本地提示,不应用于伪造服务端已投递消息;需要服务端投递、离线推送或多端同步时使用发送 API。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx
new file mode 100644
index 0000000000..9ee9ed2578
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx
@@ -0,0 +1,31 @@
+---
+title: '插入本地单聊消息'
+description: '把业务生成的消息插入单聊本地历史。'
+sourcePath: '/sdk/uniapp/message/managing-messages/insert-local-single-message'
+---
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `message` | `OpenIMMessageItem` | 是 | 要写入本地数据库的完整消息对象。 |
+| `recvID` | `string` | 是 | 单聊接收方的用户 ID。 |
+| `sendID` | `string` | 是 | 消息发送方的用户 ID。 |
+
+```uts
+import {
+ createTextMessage,
+ insertSingleMessageToLocalStorage,
+} from '@/uni_modules/unix-openim-sdk'
+
+const message = await createTextMessage('本地提示')
+if (message != null) {
+ await insertSingleMessageToLocalStorage({
+ message,
+ recvID: targetUserID,
+ sendID: currentUserID,
+ })
+}
+```
+
+Promise 成功只表示当前设备本地数据库已写入,不发送消息,也不触发新消息事件。`createTextMessage()` 只是准备参数,其正文归属[创建文本消息](/zh/sdk/uniapp/message/creating-messages/create-text-message)页面。该能力适合系统迁移或本地提示,不用于伪造已发送消息,并应确保消息 ID 不与现有记录冲突。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx
new file mode 100644
index 0000000000..03d44656f5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx
@@ -0,0 +1,57 @@
+---
+title: '修改消息'
+description: '商业版修改消息,并处理 modified/edited raw 事件。'
+sourcePath: '/sdk/uniapp/message/managing-messages/modify-a-message'
+---
+
+`modifyMessage()` 商业版 用于修改一条已存在消息的内容。它和[批量删除消息](/zh/sdk/uniapp/message/managing-messages/delete-saved-messages)、[撤回消息](/zh/sdk/uniapp/message/managing-messages/revoke-a-message)不同:删除影响当前账号可见性,撤回让会话成员看到撤回态,修改则替换消息内容并同步给其他客户端。
+
+## 修改消息内容
+
+### 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | 是 | 消息所属的会话 ID。 |
+| `message` | `OpenIMMessageItem` | 是 | 修改后的完整消息对象;必须保留原 `clientMsgID`。 |
+
+```uts
+import {
+ modifyMessage,
+ off,
+ onMessageEdited,
+ onMessageModified,
+} from '@/uni_modules/unix-openim-sdk'
+
+const modifiedSubscription = onMessageModified((payload) => refreshModifiedMessage(payload))
+const editedSubscription = onMessageEdited((payload) => refreshModifiedMessage(payload))
+
+const result = await modifyMessage({
+ conversationID,
+ message: buildEditedMessage(message, editedText),
+})
+if (result?.message != null) replaceMessage(result.message)
+
+function removeMessageModifiedListeners() {
+ off(modifiedSubscription)
+ off(editedSubscription)
+}
+```
+
+该方法不是局部更新。应从当前消息复制并只修改目标内容,保留 `clientMsgID` 和其他消息字段。允许修改的发送者、时间窗口和消息类型由 OpenIMServer 校验;失败时不要只在本地保留编辑结果。
+
+## 返回结果
+
+Promise 成功后,`result?.message` 是服务端确认的修改后 `OpenIMMessageItem | null`。调用端可先用返回值替换当前列表中的同 `clientMsgID` 消息;这不代表所有端界面已经更新。
+
+## 监听消息修改
+
+`onMessageModified` 和 `onMessageEdited` 都属于商业版,参数是 raw JSON 字符串。部署可能按版本使用其中一种,若同时监听必须按稳定消息 ID 和版本去重。先验证 JSON,再查询或替换消息;不要记录完整正文。组件卸载、退出登录或切换账号时调用 `removeMessageModifiedListeners()`,多端编辑按服务端最终版本解决冲突。
+
+## 相关页面
+
+- [批量删除消息](/zh/sdk/uniapp/message/managing-messages/delete-saved-messages)
+- [撤回消息](/zh/sdk/uniapp/message/managing-messages/revoke-a-message)
+- [发送消息](/zh/sdk/uniapp/message/sending-messages/send-message)
+- [按 ID 查找消息](/zh/sdk/uniapp/message/retrieving-messages/find-messages-by-id)
+- [接收消息](/zh/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx
new file mode 100644
index 0000000000..8795a3b939
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx
@@ -0,0 +1,51 @@
+---
+title: '撤回消息'
+description: '撤回指定消息,并处理消息撤回事件。'
+sourcePath: '/sdk/uniapp/message/managing-messages/revoke-a-message'
+---
+
+如果界面需要让其他会话成员看到“消息已撤回”,使用 `revokeMessage()`,不要用普通删除替代。删除只影响当前账号侧可见性,见[批量删除消息](/zh/sdk/uniapp/message/managing-messages/delete-saved-messages)。修改已发送消息内容见[修改消息](/zh/sdk/uniapp/message/managing-messages/modify-a-message)。
+
+## 撤回一条消息
+
+`revokeMessage()` 接收消息所在的 `conversationID` 和目标 `clientMsgID`:
+
+```uts
+import {
+ off,
+ onNewRecvMessageRevoked,
+ revokeMessage,
+} from '@/uni_modules/unix-openim-sdk'
+
+const revokedSubscription = onNewRecvMessageRevoked((info) => {
+ if (info == null) return
+ markMessageRevoked(info.clientMsgID, info)
+})
+await revokeMessage({ conversationID, clientMsgID })
+
+function removeRevokeListener() {
+ off(revokedSubscription)
+}
+```
+
+Promise 成功后,调用端可以先把当前列表中的同 `clientMsgID` 消息更新为撤回态。在线客户端随后通过 `onNewRecvMessageRevoked` 收到撤回信息,接收端应更新对应气泡,而不是直接从列表中删除。
+
+允许撤回的发送者、时间窗口和消息类型由 OpenIMServer 校验;调用失败时不要只在本地保留撤回展示。Promise 成功代表当前请求已完成,不代表所有端界面已经更新。
+
+## 返回结果
+
+`revokeMessage()` 成功直接返回字符串结果,不返回被撤回消息对象。调用端继续使用请求中的 `clientMsgID` 更新本地气泡,并以撤回事件校准其他客户端状态。
+
+## 监听撤回事件
+
+本页是 `onNewRecvMessageRevoked` 的完整监听示例归属页。事件参数是 `OpenIMMessageRevokedItem | null`,使用 `clientMsgID` 合并;`isAdminRevoke` 表示是否由管理员撤回,可用于选择系统提示文案。事件可能先于 Promise 到达,处理必须幂等。
+
+组件卸载、退出登录或切换账号时调用 `removeRevokeListener()`;重新登录后的撤回变化由消息事件同步。
+
+## 相关页面
+
+- [批量删除消息](/zh/sdk/uniapp/message/managing-messages/delete-saved-messages)
+- [修改消息](/zh/sdk/uniapp/message/managing-messages/modify-a-message)
+- [发送消息](/zh/sdk/uniapp/message/sending-messages/send-message)
+- [按 ID 查找消息](/zh/sdk/uniapp/message/retrieving-messages/find-messages-by-id)
+- [接收消息](/zh/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx
new file mode 100644
index 0000000000..779a38e7e5
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx
@@ -0,0 +1,27 @@
+---
+title: '设置消息本地扩展'
+description: '更新一条消息在当前设备的 localEx。'
+sourcePath: '/sdk/uniapp/message/managing-messages/set-message-local-ex'
+---
+
+`localEx` 只保存在当前客户端,适合折叠、选中或本地来源标记,不会同步给其他用户或设备。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | 是 | 目标消息所在的会话 ID。 |
+| `clientMsgID` | `string` | 是 | 目标消息 ID。 |
+| `localEx` | `string` | 是 | 要写入的完整字符串。 |
+
+```uts
+import { setMessageLocalEx } from '@/uni_modules/unix-openim-sdk'
+
+await setMessageLocalEx({
+ conversationID,
+ clientMsgID,
+ localEx: JSON.stringify({ selected: true }),
+})
+```
+
+Promise 成功表示本地数据已更新。该方法不会自动合并旧 JSON,也不会触发共享消息事件;需要保留旧字段时先在业务层合并,并限制大小。不要在 `localEx` 中存放 Token 或不可恢复的重要业务数据。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx
new file mode 100644
index 0000000000..bcb7a42946
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx
@@ -0,0 +1,40 @@
+---
+title: '置顶或取消置顶消息'
+description: '商业版修改会话消息置顶状态并处理变化事件。'
+sourcePath: '/sdk/uniapp/message/managing-messages/set-message-pinned'
+---
+
+`setConversationPinnedMsg()` 与 `onChangedPinnedMsg` 属于商业版。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | 是 | 消息所在的会话 ID。 |
+| `clientMsgID` | `string` | 是 | 要置顶或取消置顶的消息 ID。 |
+| `pinned` | `boolean` | 是 | `true` 表示置顶,`false` 表示取消置顶。 |
+
+```uts
+import {
+ off,
+ onChangedPinnedMsg,
+ setConversationPinnedMsg,
+} from '@/uni_modules/unix-openim-sdk'
+
+const pinnedSubscription = onChangedPinnedMsg((payload) => {
+ refreshPinnedMessagesAfterValidJson(payload)
+})
+await setConversationPinnedMsg({
+ conversationID,
+ clientMsgID: message.clientMsgID,
+ pinned: true,
+})
+
+function removePinnedListener() {
+ off(pinnedSubscription)
+}
+```
+
+权限、消息类型和数量限制由 OpenIMServer 校验。Promise 成功表示置顶请求已完成,不表示变化事件已经到达。
+
+本页唯一归属 `onChangedPinnedMsg`。事件是 raw JSON 字符串,应先校验,再按 `conversationID` 替换置顶集合并按消息 `clientMsgID` 去重;不要把未验证 payload 强转为消息对象。组件卸载、退出登录或切换账号时调用 `removePinnedListener()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx
new file mode 100644
index 0000000000..5ef93a612c
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx
@@ -0,0 +1,34 @@
+---
+title: '查询群消息已读成员'
+description: '商业版分页查询读过指定群消息的成员。'
+sourcePath: '/sdk/uniapp/message/managing-read-status/get-group-message-readers'
+---
+
+`getGroupMessageReaderList()` 商业版 分页查询指定群消息的已读或未读成员。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | 是 | 群聊会话 ID。 |
+| `clientMsgID` | `string` | 是 | 要查询阅读成员的消息 ID。 |
+| `filter` | `number` | 是 | `0` 查询已读成员,`1` 查询未读成员。 |
+| `offset` | `number` | 是 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` | 是 | 本次请求的成员数量。 |
+
+```uts
+import { getGroupMessageReaderList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getGroupMessageReaderList({
+ conversationID,
+ clientMsgID,
+ filter: 0,
+ offset: 0,
+ count: 50,
+})
+const readers = result?.readers ?? []
+```
+
+Promise 成功后,`result?.readers` 是当前页 `OpenIMGroupMemberItem[]`,字段含义见[分页查询群成员](/zh/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。按 `groupID:userID` 去重,需要完整列表时继续增加 `offset` 分页。
+
+查询建立调用时快照,不触发回执事件。已读成员数据可能随新回执变化,打开详情时应重新查询。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx b/content/zh/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx
new file mode 100644
index 0000000000..5abb1ffca9
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx
@@ -0,0 +1,34 @@
+---
+title: '上报群消息已读'
+description: '商业版发送群消息已读回执并处理 raw 回执事件。'
+sourcePath: '/sdk/uniapp/message/managing-read-status/send-group-read-receipts'
+---
+
+`sendGroupMessageReadReceipt()` 与 `onRecvGroupReadReceipt` 属于商业版。
+
+```uts
+import {
+ off,
+ onRecvGroupReadReceipt,
+ sendGroupMessageReadReceipt,
+} from '@/uni_modules/unix-openim-sdk'
+
+const receiptSubscription = onRecvGroupReadReceipt((payload) => {
+ mergeValidatedGroupReadReceipt(payload)
+})
+
+await sendGroupMessageReadReceipt({
+ conversationID,
+ clientMsgIDs: visibleUnreadMessageIDs,
+})
+
+function removeGroupReadReceiptListener() {
+ off(receiptSubscription)
+}
+```
+
+同一批消息必须属于目标群会话。Promise 成功只表示服务端接受上报,不等于其他客户端界面已更新;会话未读数仍由 `markConversationMessageAsRead()` 独立维护。
+
+其他客户端通过 raw JSON 事件 `onRecvGroupReadReceipt` 接收群聊成员级已读变化。本页是该事件的完整监听归属页;先校验 JSON,再按 `conversationID + clientMsgID` 合并消息的已读计数、未读计数和成员信息。组件卸载、退出登录或切换账号时调用 `removeGroupReadReceiptListener()`。
+
+上报 Promise、群回执事件和[查询群消息已读成员](/zh/sdk/uniapp/message/managing-read-status/get-group-message-readers)得到的成员快照是三个独立阶段。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/overview-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/overview-message.mdx
new file mode 100644
index 0000000000..1df8b517ff
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/overview-message.mdx
@@ -0,0 +1,107 @@
+---
+title: '消息概览'
+description: '理解消息创建、发送、接收、历史、状态和进度事件。'
+sourcePath: '/sdk/uniapp/message/overview-message'
+---
+
+uni-app / uni-app x 插件使用 `OpenIMMessageItem` 表示一条消息。发送消息分为两个阶段:先根据内容创建待发送对象,再把该对象发送到单聊用户或群组。创建方法不会发送消息;发送方法的 Promise 成功也不代表其他客户端已经收到消息。
+
+接收新消息、读取历史、搜索和管理消息都以会话为范围。应用应使用 `conversationID:clientMsgID` 组合键幂等合并发送结果、实时事件和历史列表;`conversationID` 确定所属会话,`clientMsgID` 定位具体消息。
+
+## 消息处理流程
+
+| 阶段 | 主要操作 | 说明 |
+| --- | --- | --- |
+| 创建 | 调用对应的 `create*Message()` | 返回待发送的 `OpenIMMessageItem`,不会写入服务端或触发新消息事件。 |
+| 发送 | 调用 `sendMessage()` 或 `sendMessageNotOss()` | 单聊填写 `recvID`,群聊填写 `groupID`;另一个目标字段传空字符串。 |
+| 接收 | 监听新消息事件 | 根据消息路由字段确定目标会话,再按 `clientMsgID` 幂等合并。 |
+| 查询 | 读取历史、搜索或按 ID 定位消息 | 查询返回调用时的快照,不触发新消息事件。 |
+| 更新 | 删除、撤回、修改、置顶或上报已读 | 分别处理 Promise 结果、相关事件和必要的重新查询。 |
+
+从原生完整路径创建的图片、音频、视频和文件消息,通过 `sendMessage()` 进入 SDK 上传与发送流程。媒体资源已经由业务上传服务取得 URL 时,先用对应的 `create*MessageByURL()` 创建消息,再通过 `sendMessageNotOss()` 发送,避免重复上传。
+
+## OpenIMMessageItem 返回结构
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `clientMsgID` | `string` 或 `null` | 客户端稳定 ID,用于列表去重、状态更新、查询和分页游标。 |
+| `serverMsgID` | `string` 或 `null` | 服务端消息 ID;待发送或失败消息可能没有有效值。 |
+| `sessionType` | `OpenIMSessionType` | 消息所属会话类型。 |
+| `sendID`、`recvID`、`groupID` | `string` 或 `null` | 发送者及单聊/群聊路由字段。 |
+| `contentType` | `OpenIMMessageType` | 消息内容类型,决定读取哪个 elem。 |
+| `createTime`、`sendTime` | `number` | 创建和发送时间。 |
+| `seq` | `number` | 服务端消息序号。 |
+| `senderPlatformID` | `OpenIMPlatform` | 发送端平台。 |
+| `senderNickname`、`senderFaceUrl` | `string` 或 `null` | 发送者资料快照。 |
+| `status` | `OpenIMMessageStatus` | 当前发送状态。 |
+| `isRead` | `boolean` | 当前已读状态快照。 |
+| `offlinePush` | `OpenIMOfflinePush` 或 `null` | 发送时的离线推送配置。 |
+| `content`、`attachedInfo` | `string` 或 `null` | SDK 序列化内容和附加信息。 |
+| `ex` | `string` 或 `null` | 随消息同步的扩展字符串。 |
+| `localEx` | `string` 或 `null` | 只保存在当前设备的扩展字符串。 |
+
+消息正文位于与 `contentType` 对应的字段中:文本使用 `textElem`,图片/音频/视频/文件使用 `pictureElem`、`soundElem`、`videoElem`、`fileElem`,@ 与回复使用 `atTextElem`、`quoteElem`,合并与自定义消息使用 `mergeElem`、`customElem`,名片/位置/表情使用 `cardElem`、`locationElem`、`faceElem`,高级文本、输入状态和通知分别使用 `advancedTextElem`、`typingElem`、`notificationElem`。不要通过展示文本或数组位置判断消息类型。
+
+`conversationID` 用于确定所属会话,但不是 `OpenIMMessageItem` 字段。它来自当前会话、查询条件、搜索结果或事件上下文;消息状态通常按 `conversationID:clientMsgID` 合并。
+
+## 创建不同内容的消息
+
+| 内容 | 页面 | 注意事项 |
+| --- | --- | --- |
+| 文本与 Markdown | [创建文本消息](/zh/sdk/uniapp/message/creating-messages/create-text-message)、[创建 Markdown 消息](/zh/sdk/uniapp/message/creating-messages/create-markdown-message) | Markdown 内容需要由接收端安全渲染。 |
+| 群聊 @ 消息 | [创建 @ 消息](/zh/sdk/uniapp/message/creating-messages/create-text-at-message) | 只能发送到群聊。 |
+| 图片、音频、视频和文件 | [使用完整路径创建图片消息](/zh/sdk/uniapp/message/creating-messages/create-image-message-from-full-path)、[使用 URL 创建图片消息](/zh/sdk/uniapp/message/creating-messages/create-image-message-by-url) | 其他媒体类型采用相同的本地路径或已上传 URL 流程。 |
+| 名片、位置与表情 | [创建名片消息](/zh/sdk/uniapp/message/creating-messages/create-card-message)、[创建位置消息](/zh/sdk/uniapp/message/creating-messages/create-location-message)、[创建表情消息](/zh/sdk/uniapp/message/creating-messages/create-face-message) | 创建时保存内容快照。 |
+| 回复、转发与合并 | [创建回复消息](/zh/sdk/uniapp/message/creating-messages/create-quote-message)、[创建转发消息](/zh/sdk/uniapp/message/creating-messages/create-forward-message)、[创建合并消息](/zh/sdk/uniapp/message/creating-messages/create-merger-message) | 创建结果仍需显式发送。 |
+| 自定义业务内容 | [创建自定义消息](/zh/sdk/uniapp/message/creating-messages/create-custom-message) | 接收端必须校验业务 schema。 |
+
+只影响当前客户端展示的状态应写入 `localEx`,不要放入需要同步给其他用户的业务内容,见[设置消息本地扩展](/zh/sdk/uniapp/message/managing-messages/set-message-local-ex)。
+
+## 进度事件
+
+本页归属发送、文件上传和日志上传进度事件:
+
+```uts
+import {
+ off,
+ onSendMessageProgress,
+ onUploadFileProgress,
+ onUploadLogsProgress,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const sendProgressSubscription = onSendMessageProgress((event) => {
+ updateMessageProgress(event.clientMsgID, event.progress)
+})
+const subscriptions : Array = [
+ sendProgressSubscription,
+ onUploadFileProgress((event) => updateCurrentUpload(event.progress)),
+ onUploadLogsProgress((event) => updateLogUpload(event.progress)),
+]
+
+function removeProgressListeners() {
+ subscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+进度可能重复、跳跃或在最终 Promise 前后到达;只做单调展示,最终成功/失败以 API 结果为准。退出登录、切换账号或销毁进度状态层时调用 `removeProgressListeners()`。
+
+文件消息的本地完整路径必须能被原生层读取。`unifile://` 先转为真实沙盒路径;网络 URL 使用对应 by-URL 创建入口。
+
+## 按任务查找页面
+
+| 任务 | 页面 |
+| --- | --- |
+| 发送普通消息或已上传媒体 | [发送消息](/zh/sdk/uniapp/message/sending-messages/send-message)、[发送已上传的媒体消息](/zh/sdk/uniapp/message/sending-messages/send-message-not-oss) |
+| 接收在线、离线和只在线消息 | [接收消息](/zh/sdk/uniapp/message/receiving-messages/receive-messages) |
+| 加载历史或读取消息上下文 | [加载历史消息](/zh/sdk/uniapp/message/retrieving-messages/load-older-messages)、[读取消息上下文](/zh/sdk/uniapp/message/retrieving-messages/load-message-context) |
+| 按 ID 定位或搜索本地消息 | [按 ID 查找消息](/zh/sdk/uniapp/message/retrieving-messages/find-messages-by-id)、[搜索消息](/zh/sdk/uniapp/message/searching-messages/search-messages) |
+| 删除、撤回、修改或置顶 | [批量删除消息](/zh/sdk/uniapp/message/managing-messages/delete-saved-messages)、[撤回消息](/zh/sdk/uniapp/message/managing-messages/revoke-a-message)、[修改消息](/zh/sdk/uniapp/message/managing-messages/modify-a-message)、[置顶消息](/zh/sdk/uniapp/message/managing-messages/set-message-pinned) |
+| 群聊成员级已读 | [上报群消息已读](/zh/sdk/uniapp/message/managing-read-status/send-group-read-receipts)、[查询群消息已读成员](/zh/sdk/uniapp/message/managing-read-status/get-group-message-readers) |
+| 输入状态或语音识别 | [上报输入状态](/zh/sdk/uniapp/message/composing-messages/update-typing-status)、[识别音频文字](/zh/sdk/uniapp/message/composing-messages/transcribe-audio) |
+
+## 状态同步边界
+
+新消息、删除、撤回、修改、置顶、群已读和输入状态的完整监听分别保留在对应任务页。创建消息对象和纯查询操作只使用 Promise 返回值建立快照,不会触发共享消息事件。会改变状态的操作应分别处理 Promise 成功、事件到达和重新查询校准,不能将三个阶段视为同一结果。
+
+会话未读数、总未读数和群聊 @ 提醒属于会话状态,分别由[标记会话已读](/zh/sdk/uniapp/conversation/managing-conversations/mark-conversation-read)、[维护总未读数](/zh/sdk/uniapp/conversation/managing-conversations/get-total-unread-count)和[获取会话列表](/zh/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list)中的事件处理器维护。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx
new file mode 100644
index 0000000000..573d517787
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx
@@ -0,0 +1,40 @@
+---
+title: '接收自定义业务与消息扩展事件'
+description: '安全解析 raw JSON 字符串,并区分公共与商业版扩展事件。'
+sourcePath: '/sdk/uniapp/message/receiving-messages/receive-custom-business-messages'
+---
+
+这些事件返回 opaque 字符串。`onRecvCustomBusinessMessage` 属于公共接口;消息扩展新增、变化、删除和 KV 变化事件属于商业版。
+
+```uts
+import {
+ off,
+ onMessageKvInfoChanged,
+ onRecvCustomBusinessMessage,
+ onRecvMessageExtensionsAdded,
+ onRecvMessageExtensionsChanged,
+ onRecvMessageExtensionsDeleted,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+function handleRawPayload(payload : string) {
+ try {
+ const value = JSON.parseObject(payload)
+ if (value != null) routeValidatedBusinessEvent(value)
+ } catch (_) {
+ console.error('Invalid custom message event')
+ }
+}
+
+const customSubscription = onRecvCustomBusinessMessage(handleRawPayload)
+const subscriptions : Array = [
+ customSubscription,
+ onRecvMessageExtensionsAdded(handleRawPayload),
+ onRecvMessageExtensionsChanged(handleRawPayload),
+ onRecvMessageExtensionsDeleted(handleRawPayload),
+ onMessageKvInfoChanged(handleRawPayload),
+]
+subscriptions.forEach((subscription) => off(subscription))
+```
+
+校验版本、事件类型和必填字段后再更新 store;未知事件安全忽略。日志不输出完整 payload。HarmonyOS 当前不支持这四个商业扩展事件,会返回 unsupported subscription。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx
new file mode 100644
index 0000000000..cea3f8575b
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx
@@ -0,0 +1,119 @@
+---
+title: '接收消息'
+description: '订阅单条、批量、离线和只在线消息事件。'
+sourcePath: '/sdk/uniapp/message/receiving-messages/receive-messages'
+---
+
+消息页通常同时处理实时新消息、应用进入后台后到达的离线消息、只在线投递的消息,以及首次进入会话时主动读取的历史消息。事件提供增量,历史 API 按 `conversationID` 建立快照。
+
+不同 Core 版本或恢复路径可能使用单条或批量事件。为保证完整性,可以同时订阅五个入口,但必须按 `conversationID:clientMsgID` 去重。在组件卸载、退出登录或切换账号前使用订阅句柄调用 `off()`,避免同一批消息被重复合并。
+
+## 消息类型
+
+每条 `OpenIMMessageItem` 根据 `contentType` 和对应 elem 选择渲染方式:文本读取 `textElem`,@ 文本读取 `atTextElem`,自定义消息读取 `customElem`,图片、音频、视频和文件分别读取对应媒体 elem。未知类型应显示降级内容,而不是执行未校验的 `content`。
+
+```uts
+function renderMessage(message : OpenIMMessageItem) {
+ if (message.textElem != null) return renderTextMessage(message)
+ if (message.atTextElem != null) return renderMentionMessage(message)
+ if (message.customElem != null) return renderCustomMessage(message)
+ if (
+ message.pictureElem != null ||
+ message.soundElem != null ||
+ message.videoElem != null ||
+ message.fileElem != null
+ ) {
+ return renderFileLikeMessage(message)
+ }
+ return renderUnsupportedMessage(message)
+}
+```
+
+消息事件可能包含当前用户没有打开的会话。`OpenIMMessageItem` 不直接提供 `conversationID`;应根据 `sessionType`、`sendID`、`recvID` 和 `groupID` 计算或查询目标会话,再按 `clientMsgID` 去重。
+
+```uts
+function mergeMessage(message : OpenIMMessageItem) {
+ const targetConversationID = getConversationIDForMessage(message)
+ if (targetConversationID.length == 0) return
+ mergeMessageByClientMsgID(targetConversationID, message)
+}
+```
+
+### 图片、音频、视频和文件消息
+
+接收端无需重新上传文件,只需读取消息中已有的资源地址、大小、名称、时长或快照图并展示。如果产品一次发送多个文件,通常连续发送多条文件消息,或用一条经过版本校验的自定义消息承载文件组;每条消息仍以 `clientMsgID` 作为稳定标识。
+
+## 事件处理器
+
+```uts
+import {
+ off,
+ onRecvNewMessage,
+ onRecvNewMessages,
+ onRecvOfflineNewMessage,
+ onRecvOfflineNewMessages,
+ onRecvOnlineOnlyMessage,
+ type OpenIMMessageItem,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const newMessageSubscription = onRecvNewMessage((message) => {
+ if (message != null) mergeMessage(message)
+})
+const subscriptions : Array = [
+ newMessageSubscription,
+ onRecvOfflineNewMessage((message) => {
+ if (message != null) mergeMessage(message)
+ }),
+ onRecvOnlineOnlyMessage((message) => {
+ if (message != null) mergeOnlineOnlyMessage(message)
+ }),
+ onRecvNewMessages((result) => {
+ if (result != null) result.messages.forEach(mergeMessage)
+ }),
+ onRecvOfflineNewMessages((result) => {
+ if (result != null) result.messages.forEach(mergeMessage)
+ }),
+]
+
+function removeMessageListeners() {
+ subscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+`onRecvNewMessages` 和 `onRecvOfflineNewMessages` 返回 `OpenIMMessageListResult | null`,其中 `messages` 是数组;三个单条事件返回 `OpenIMMessageItem | null`。单数和复数入口可能描述同一消息,所以不能按事件次数插入。
+
+调用 `setAppBackgroundStatus(true)` 后到达的消息通常走离线入口;回到前台时再设置为 `false`。离线消息与实时消息复用同一个合并函数,筛选当前会话、按 `clientMsgID` 去重并保持时间顺序。
+
+只在线消息由发送方设置 `isOnlineOnly: true`。它不会进入 SDK 本地消息存储,也不能通过历史接口回放,通常只适合临时提示或业务通知;是否加入当前界面由产品规则决定,不应把它当作可靠聊天记录。
+
+本页是五个接收事件的完整归属页。先根据消息路由字段确定会话,再用“目标会话 + `clientMsgID`”幂等合并。不要在多个页面重复注册同一组全局事件,推荐由消息 store 统一持有;状态层销毁时调用 `removeMessageListeners()`。
+
+撤回消息通过 `onNewRecvMessageRevoked` 更新为撤回态,处理见[撤回消息](/zh/sdk/uniapp/message/managing-messages/revoke-a-message)。
+
+## 首次进入会话时读取历史
+
+事件只负责新到达的消息。首次进入会话、向上翻页或需要补齐断线期间的列表时,应另外读取历史快照,参数和返回结构见[加载历史消息](/zh/sdk/uniapp/message/retrieving-messages/load-older-messages)。历史结果和事件可能包含同一条消息,两条路径必须使用相同的去重规则。
+
+如果事件注册在全局消息状态层,不要在每次进入同一个聊天页面时重复注册。需要显示当前会话历史时,只读取该会话的边界快照;重新登录后的消息变化由新的登录作用域事件同步,不要把事件到达视为某次历史查询的完成回调。
+
+## 将群聊会话标记为已读
+
+用户进入群聊并看到最新消息后,可以清理会话未读数。这个操作不等同于群消息成员级已读回执,调用方式见[标记会话已读](/zh/sdk/uniapp/conversation/managing-conversations/mark-conversation-read)。会话列表和总未读角标分别由会话域事件最终同步。
+
+## 验证接收流程
+
+- 用另一个已登录账号向目标会话发送消息,确认前台入口收到且列表只渲染一次。
+- 设置后台状态后再次发送,确认离线入口合并;回到前台后恢复状态。
+- 发送只在线消息,确认它不会进入本地历史。
+- 撤回一条消息,确认对应 `clientMsgID` 更新为撤回态。
+- 标记会话已读,确认会话未读数和总角标随事件更新。
+
+测试单条和批量入口时,只断言每个 `clientMsgID` 最终出现一次,不应要求固定使用某一个入口。后台恢复测试还应确认前后台状态调用成对执行,退出账号后旧订阅不再改变新账号状态。
+
+## 相关页面
+
+- [消息概览](/zh/sdk/uniapp/message/overview-message)
+- [发送消息](/zh/sdk/uniapp/message/sending-messages/send-message)
+- [加载历史消息](/zh/sdk/uniapp/message/retrieving-messages/load-older-messages)
+- [标记会话已读](/zh/sdk/uniapp/conversation/managing-conversations/mark-conversation-read)
diff --git a/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx b/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx
new file mode 100644
index 0000000000..e887b8f99c
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx
@@ -0,0 +1,30 @@
+---
+title: '按 ID 查找消息'
+description: '在多个会话中按 clientMsgID 批量定位消息。'
+sourcePath: '/sdk/uniapp/message/retrieving-messages/find-messages-by-id'
+---
+
+搜索结果、引用消息或通知跳转应保存消息的 `conversationID` 和 `clientMsgID`,再用 `findMessageList()` 取回本地已经同步的消息。
+
+## 参数说明
+
+`findMessageList()` 接收查询条件数组,每一项结构如下:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `items[].conversationID` | `string` | 是 | 目标消息所属的会话 ID。 |
+| `items[].clientMsgIDList` | `string[]` | 是 | 要在该会话中查找的消息 ID。 |
+
+```uts
+import { findMessageList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await findMessageList([
+ { conversationID, clientMsgIDList: [clientMsgID] },
+])
+
+const targetMessage = result?.findResultItems[0]?.messageList[0]
+```
+
+Promise 成功后,结果是 `OpenIMFindMessageResult | null`,包含 `totalCount` 和 `findResultItems`。每个结果项提供 `conversationID`、`conversationType`、会话展示资料、`messageCount` 和 `messageList`。
+
+一次调用可以包含多个会话条件。不要假设响应项与输入数组位置一致,应按结果的 `conversationID` 和消息的 `clientMsgID` 对应。缓存未同步、消息已删除或 ID 不存在时可能没有结果;查询不会触发消息事件。需要加载消息前后文时使用[读取消息上下文](/zh/sdk/uniapp/message/retrieving-messages/load-message-context)。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx b/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx
new file mode 100644
index 0000000000..30d472405d
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx
@@ -0,0 +1,32 @@
+---
+title: '加载消息上下文'
+description: '商业版围绕一条锚点消息读取前后文。'
+sourcePath: '/sdk/uniapp/message/retrieving-messages/load-message-context'
+---
+
+从搜索结果或引用消息跳入聊天上下文时,把已经取得的完整 `OpenIMMessageItem` 作为锚点。`fetchSurroundingMessages()` 属于商业版。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `startMessage` | `OpenIMMessageItem` | 是 | 已经取得的锚点消息。 |
+| `viewType` | `number` | 是 | 上下文查看方向,使用服务端约定值。 |
+| `before` | `number` | 是 | 锚点之前最多读取的消息数量。 |
+| `after` | `number` | 是 | 锚点之后最多读取的消息数量。 |
+
+```uts
+import { fetchSurroundingMessages } from '@/uni_modules/unix-openim-sdk'
+
+const result = await fetchSurroundingMessages({
+ startMessage: targetMessage,
+ viewType: 0,
+ before: 20,
+ after: 20,
+})
+const surroundingMessages = result?.messages ?? []
+```
+
+Promise 成功后,`result?.messages` 是锚点前后取得的 `OpenIMMessageItem[]`,字段见[消息概览](/zh/sdk/uniapp/message/overview-message)。当前 uni-app / uni-app x 返回字段名是 `messages`,不是 Wasm 的 `messageList`。
+
+`before` 和 `after` 分别限制锚点前后的数量。返回结果可能少于请求总数,例如锚点靠近边界或部分消息已删除。结果与实时事件可能重复,应按 `conversationID:clientMsgID` 去重并保持时间顺序。不要使用只包含 ID 的伪消息作为锚点;需要先定位时见[按 ID 查找消息](/zh/sdk/uniapp/message/retrieving-messages/find-messages-by-id)。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx
new file mode 100644
index 0000000000..11c3dc452e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx
@@ -0,0 +1,43 @@
+---
+title: '加载历史消息'
+description: '按会话和 clientMsgID 游标读取历史消息。'
+sourcePath: '/sdk/uniapp/message/retrieving-messages/load-older-messages'
+---
+
+聊天页面进入会话时使用公共入口 `getAdvancedHistoryMessageList()` 建立第一页快照;继续加载更早消息时,把当前最早一条消息的 `clientMsgID` 作为下一页游标。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` | 是 | 要读取历史消息的会话 ID。 |
+| `startClientMsgID` | `string` | 是 | 分页锚点消息 ID;第一页传空字符串。 |
+| `count` | `number` | 是 | 本次读取的消息数量。 |
+| `lastMinSeq` | `number` 或 `null` | 否 | 上一页返回的最小序号,用于连续分页。 |
+
+```uts
+import { getAdvancedHistoryMessageList } from '@/uni_modules/unix-openim-sdk'
+
+const page = await getAdvancedHistoryMessageList({
+ conversationID,
+ startClientMsgID: oldestMessage?.clientMsgID ?? '',
+ count: 30,
+ lastMinSeq,
+})
+```
+
+## 返回结果
+
+Promise 成功后,结果是 `OpenIMAdvancedHistoryMessageListResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `messageList` | `OpenIMMessageItem[]` | 当前页消息。 |
+| `lastMinSeq` | `number` | 继续读取时传回的最小序号。 |
+| `isEnd` | `boolean` | 是否到达当前加载方向的历史边界。 |
+| `errCode` | `number` | 历史读取结果状态码。 |
+| `errMsg` | `string` | 与状态码对应的说明。 |
+
+只有 `errCode` 表示成功时才合并 `messageList`;Promise 被拒绝时仍按通用错误处理。按 `conversationID` 限定列表,并以 `clientMsgID` 去重;查询不会触发新消息事件。
+
+商业版 `getHistoryMessageList()` 商业版 额外要求 `isReverse`,并支持可选 `viewType` 和 `lastMinSeq`。不要把它等同于已删除的单独 reverse-history 页面;方向通过参数表达。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx b/content/zh/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx
new file mode 100644
index 0000000000..065a3a2604
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx
@@ -0,0 +1,132 @@
+---
+title: '搜索本地消息'
+description: '按关键词、发送者、类型和时间范围搜索消息。'
+sourcePath: '/sdk/uniapp/message/searching-messages/search-messages'
+---
+
+`searchLocalMessages()` 搜索当前用户本地已经同步的消息。群消息搜索的目标参数是群聊对应的 `conversationID`,不是发送消息时使用的 `groupID`;如果只保存了群 ID,先按[获取会话 ID](/zh/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id)取得群会话 ID。
+
+搜索范围来自 SDK 本地数据库。跨用户审计、服务端全量检索、复杂权限过滤或全局排序应由后端搜索服务承担,再把命中的 `conversationID` 和 `clientMsgID` 返回客户端定位。
+
+## 创建搜索查询
+
+`keywordList` 接收一个或多个关键词。搜索框通常只代表一次输入,应先去除首尾空格并过滤空值。
+
+```uts
+import {
+ OpenIMMessageTypeAtText,
+ OpenIMMessageTypeText,
+ searchLocalMessages,
+ type OpenIMMessageItem,
+ type OpenIMSearchMessageResult,
+} from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchLocalMessages({
+ conversationID,
+ keywordList: [keyword.trim()],
+ keywordListMatchType: 0,
+ senderUserIDList: [],
+ messageTypeList: [OpenIMMessageTypeText, OpenIMMessageTypeAtText],
+ searchTimePosition: 0,
+ searchTimePeriod: 0,
+ pageIndex: 1,
+ count: 20,
+})
+```
+
+## 高级搜索
+
+可以使用发送者、消息类型和时间窗口缩小范围。当前 `OpenIMSearchLocalMessagesParams` 除 `conversationID` 外的筛选与分页字段均为必填;不限制某个数组条件时传空数组,不限制时间时按服务端约定传 `0`。
+
+```uts
+const result = await searchLocalMessages({
+ conversationID,
+ keywordList: ['release'],
+ keywordListMatchType: 0,
+ senderUserIDList: [senderUserID],
+ messageTypeList: [OpenIMMessageTypeText],
+ searchTimePosition,
+ searchTimePeriod,
+ pageIndex: 1,
+ count: 20,
+})
+```
+
+### 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `conversationID` | `string` 或 `null` | 否 | 要搜索的会话 ID;省略时搜索当前本地可见范围。 |
+| `keywordList` | `string[]` | 是 | 关键词列表。 |
+| `keywordListMatchType` | `number` | 是 | 多关键词匹配方式,使用 SDK 数字约定。 |
+| `senderUserIDList` | `string[]` | 是 | 只搜索这些用户发送的消息;不限制时传空数组。 |
+| `messageTypeList` | `OpenIMMessageType[]` | 是 | 只搜索指定类型;不限制时传空数组。 |
+| `searchTimePosition` | `number` | 是 | 搜索结束位置,Unix 时间戳,单位为秒。 |
+| `searchTimePeriod` | `number` | 是 | 从结束位置向前搜索的时间范围,单位为秒。 |
+| `pageIndex` | `number` | 是 | 搜索结果页码,第一页传 `1`。 |
+| `count` | `number` | 是 | 每页返回数量。 |
+
+如果搜索入口允许图片、文件或自定义消息,把相应 `OpenIMMessageType` 常量加入 `messageTypeList`。匹配类型、时间单位和页码必须服从合同及服务端约定。
+
+## 处理分页结果
+
+Promise 成功后,结果是 `OpenIMSearchMessageResult | null`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `totalCount` | `number` | 当前条件下匹配的消息总数。 |
+| `searchResultItems` | `OpenIMSearchMessageResultItem[]` | 按会话分组的搜索结果。 |
+
+每个结果项包含:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `conversationID` | `string` | 结果所属会话 ID。 |
+| `conversationType` | `OpenIMSessionType` | 会话类型。 |
+| `showName`、`faceURL` | `string` | 会话展示名称与头像快照。 |
+| `latestMsgSendTime` | `number` 或 `null` | 当前结果会话的最新消息时间。 |
+| `messageCount` | `number` | 当前结果项的匹配消息数量。 |
+| `messageList` | `OpenIMMessageItem[]` | 匹配消息。 |
+
+可以把分组结果转换为业务搜索行,但必须保留会话 ID 和消息 ID:
+
+```uts
+type SearchMessageRow = {
+ conversationID : string
+ clientMsgID : string
+ message : OpenIMMessageItem
+}
+
+function toSearchRows(result : OpenIMSearchMessageResult) : Array {
+ const rows : Array = []
+ result.searchResultItems.forEach((item) => {
+ item.messageList.forEach((message) => {
+ const clientMsgID = message.clientMsgID
+ if (clientMsgID != null) {
+ rows.push({
+ conversationID: item.conversationID,
+ clientMsgID,
+ message,
+ })
+ }
+ })
+ })
+ return rows
+}
+```
+
+分页时保持相同的会话、关键词和筛选条件,只递增 `pageIndex`。用户修改任一条件时,把页码重置为 `1` 并清空旧结果。同一搜索页按 `conversationID:clientMsgID` 去重,不要按结果位置保存选中项。查询不会触发消息事件。
+
+## 处理搜索结果变化
+
+命中的消息可能在页面打开后被撤回或删除,搜索范围也可能因新消息同步而变化。统一事件处理器见[接收消息](/zh/sdk/uniapp/message/receiving-messages/receive-messages)、[批量删除消息](/zh/sdk/uniapp/message/managing-messages/delete-saved-messages)和[撤回消息](/zh/sdk/uniapp/message/managing-messages/revoke-a-message);本页只负责查询和分页,不重复注册消息事件。
+
+跳转时使用结果中的 `conversationID` 和 `clientMsgID` 定位。需要展示前后聊天记录时,把命中的完整 `OpenIMMessageItem` 作为起点读取[消息上下文](/zh/sdk/uniapp/message/retrieving-messages/load-message-context),不要用 `findMessageList()` 拼接附近记录。
+
+需要显示当前时刻的结果时,可以用相同条件重新执行当前页搜索。搜索 Promise、消息事件增量和重新查询是三条独立路径;重新登录后必须清除旧账号搜索状态,并由新事件作用域继续同步。
+
+## 相关页面
+
+- [按 ID 查找消息](/zh/sdk/uniapp/message/retrieving-messages/find-messages-by-id)
+- [加载历史消息](/zh/sdk/uniapp/message/retrieving-messages/load-older-messages)
+- [接收消息](/zh/sdk/uniapp/message/receiving-messages/receive-messages)
diff --git a/content/zh/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx b/content/zh/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx
new file mode 100644
index 0000000000..1357e05028
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx
@@ -0,0 +1,31 @@
+---
+title: '发送非 OSS 消息'
+description: '发送已经准备好远端资源信息的消息。'
+sourcePath: '/sdk/uniapp/message/sending-messages/send-message-not-oss'
+---
+
+`sendMessageNotOss()` 适用于文件、图片、音频或视频已经通过业务上传服务取得 URL 的消息,可避免再次进入 SDK 的上传流程。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `recvID` | `string` | 条件必填 | 单聊时填写接收方用户 ID;群聊时传空字符串。 |
+| `groupID` | `string` | 条件必填 | 群聊时填写群组 ID;单聊时传空字符串。 |
+| `message` | `OpenIMMessageItem` | 是 | 由 URL 型创建 API 返回、已含远端资源的待发送消息。 |
+| `offlinePushInfo` | `OpenIMOfflinePush` 或 `null` | 否 | 离线推送标题、描述和平台配置。 |
+| `isOnlineOnly` | `boolean` 或 `null` | 否 | 是否只向在线客户端投递;此类消息不进入本地历史。 |
+
+```uts
+import { sendMessageNotOss } from '@/uni_modules/unix-openim-sdk'
+
+const sentMessage = await sendMessageNotOss({
+ recvID: receiverUserID,
+ groupID: '',
+ message: urlMessage,
+})
+```
+
+资源 URL、大小、类型、尺寸和时长必须来自实际上传结果。Promise 成功后直接返回服务端确认的 `OpenIMMessageItem`,应用按 `clientMsgID` 合并返回对象;字段见[消息概览](/zh/sdk/uniapp/message/overview-message)。
+
+该方法不会负责上传资源,也不适用于仍只包含本地文件的消息。把本地路径消息误交给本入口会导致接收方无法访问媒体;普通本地文件使用 `sendMessage()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx b/content/zh/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx
new file mode 100644
index 0000000000..d361afe994
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx
@@ -0,0 +1,34 @@
+---
+title: '发送消息'
+description: '使用 uni-app / uni-app x SDK 发送待发送消息对象。'
+sourcePath: '/sdk/uniapp/message/sending-messages/send-message'
+---
+
+`sendMessage()` 发送由消息创建 API 返回的 `OpenIMMessageItem`。单聊只填写 `recvID`,群聊只填写 `groupID`。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `recvID` | `string` | 条件必填 | 单聊时填写接收方用户 ID;群聊时传空字符串。 |
+| `groupID` | `string` | 条件必填 | 群聊时填写目标群组 ID;单聊时传空字符串。 |
+| `message` | `OpenIMMessageItem` | 是 | 待发送的消息对象。 |
+| `offlinePushInfo` | `OpenIMOfflinePush` | 否 | 离线推送配置。 |
+| `isOnlineOnly` | `boolean` | 否 | 是否只向在线客户端投递;此类消息不进入本地历史。 |
+
+```uts
+import { sendMessage } from '@/uni_modules/unix-openim-sdk'
+
+const sentMessage = await sendMessage({
+ recvID: receiverUserID,
+ groupID: '',
+ message,
+ isOnlineOnly: false,
+})
+```
+
+Promise 成功后,直接返回服务端确认的 `OpenIMMessageItem`,原生 UTS API 不使用 `{ data }` 包装。发送端应使用返回对象按 `clientMsgID` 替换本地待发送项;常用字段和内容字段见[消息概览](/zh/sdk/uniapp/message/overview-message)。
+
+其他客户端通过新消息事件接收。Promise 成功、接收事件到达和历史查询校准是不同阶段。提供失败重试时,应继续保留同一个 `clientMsgID` 下的待发送消息,除非产品明确创建一次新的发送。
+
+资源已由业务上传并写入 URL 型消息时,使用 [`sendMessageNotOss()`](/zh/sdk/uniapp/message/sending-messages/send-message-not-oss)。
diff --git a/content/zh/docs/chat/sdk/uniapp/overview.mdx b/content/zh/docs/chat/sdk/uniapp/overview.mdx
index 37687d7937..a95b7a19bd 100644
--- a/content/zh/docs/chat/sdk/uniapp/overview.mdx
+++ b/content/zh/docs/chat/sdk/uniapp/overview.mdx
@@ -1,29 +1,68 @@
---
-title: 'OpenIM uni-app SDK 概览'
-description: 'OpenIM uni-app SDK 入口,用于 App、H5 和支持的小程序目标。'
+title: 'OpenIM uni-app / uni-app x SDK 概览'
+description: '在 uni-app 与 uni-app x 的 Android、iOS 和商业版 HarmonyOS App 中接入 unix-openim-sdk。'
sourcePath: '/sdk/uniapp/overview'
---
-## 概览
+OpenIM `unix-openim-sdk` 是 UTS 原生插件,为 uni-app 和 uni-app x 的 App 端提供用户、好友、会话、群组、消息、事件与本地数据库能力。插件在宿主进程中持有唯一的 OpenIM Core;业务代码直接从 `@/uni_modules/unix-openim-sdk` 导入函数,不创建 SDK 实例。
-当你希望在一个 uni-app 工程中覆盖 App、H5 以及支持的小程序目标时,可以从 uni-app SDK 开始。接入时应保持认证、用户身份、消息创建、会话状态和事件处理模型与其他 OpenIMClientSDK 一致。
+## 支持范围
-## 适用范围
+| 宿主 | Android | iOS | HarmonyOS |
+| --- | --- | --- | --- |
+| uni-app Vue 2 / Vue 3 | 支持,API 21+ | 支持,iOS 14+ | 暂不宣称支持 |
+| uni-app x | 支持,API 21+ | 支持,iOS 14+ | 商业版支持,API 24 |
+| Web / 小程序 | 不支持 | 不支持 | 不支持 |
-- App 和 H5 构建应使用与你部署的 OpenIMServer 版本匹配的 SDK 包和运行时适配方式。
-- 小程序目标需要额外确认本地存储、网络请求、文件上传和 WebSocket 行为。
-- token 必须由可信后端签发,不应在客户端包内生成或写死用户 token。
+接入和本地编译使用 HBuilderX/uni-app `5.23` 系列。Android、iOS 需要包含插件原生依赖的自定义基座或本地原生工程,标准基座不能加载这些原生制品。
-## 核心接入路径
+## 公共版与商业版
-1. 安装与你的 OpenIMServer 版本匹配的 SDK 包。
-2. 使用 `apiAddr`、`wsAddr`、当前 `userID` 和后端签发的 token 初始化客户端。
-3. 在调用 `login()` 前注册连接事件和消息事件。
-4. 发送第一条文本消息,并在另一个已登录客户端确认收到消息。
-5. 再补充文件消息、推送通知和后台生命周期等平台差异处理。
+同一套文档覆盖公共能力和商业版扩展。标有“商业版”的 API、事件或字段需要商业版 `unix-openim-sdk` 与匹配的 OpenIMServer;没有徽标的能力属于公共接口。商业版归属与平台支持是两个维度:公共 API 也可能在某个平台返回 `platform-unsupported`,页面会单独列出。
-## 相关 SDK
+商业版增加信令、SDK session 快照、翻译和部分消息/会话扩展。`onSDKSessionChanged` 是插件层根据初始化、登录、退出、Token 与账号变化合成的事件,不是 OpenIM Core 原生事件。
-- [WASM SDK](/sdk/wasm/overview):查看浏览器和 WebAssembly 方向的核心 API 示例。
-- [Flutter SDK](/sdk/flutter/overview):适合用 Flutter 覆盖移动端和桌面端。
-- [React Native SDK](/sdk/react-native/overview):适合 React Native 应用。
+## 接入顺序
+
+1. 安装 `unix-openim-sdk`,为目标平台准备自定义基座或本地原生工程。
+2. 调用 `initSDK()`,配置 `apiAddr`、`wsAddr`、平台、日志和 `systemType`。
+3. 保存连接、消息和业务事件返回的订阅句柄。
+4. 从可信后端取得当前用户的 `userID` 与 Token,再调用 `login(userID, token)`。
+5. 等待 `onConnectSuccess` 后查询快照数据,并用事件增量更新应用状态。
+6. 用户退出时先 `logout()`,再通过 `off(subscription)` 清理监听;只有不再使用 SDK 时才调用 `unInitSDK()`。
+
+## 调用模型
+
+Promise 成功直接返回业务值,不使用 Web SDK 的 `{ data }` 包装。事件注册同步返回 `OpenIMSDKEventSubscription`,取消时必须传回同一句柄:
+
+```uts
+import {
+ off,
+ onRecvNewMessage,
+} from '@/uni_modules/unix-openim-sdk'
+
+const messageSubscription = onRecvNewMessage((message) => {
+ console.log(message.clientMsgID)
+})
+
+// 页面或账号作用域结束时清理。
+off(messageSubscription)
+```
+
+不要使用 `offAll()` 代替正常的局部清理。它会移除当前插件实例中的全部监听,只适合应用整体销毁或可控的测试重置。
+
+## 安全边界
+
+- Token 必须由可信后端签发,不要把管理员 Token、secret 或固定用户 Token 写入 App。
+- `apiAddr` 与 `wsAddr` 必须从设备真实可访问;真机不能把 `localhost` 当作开发机。
+- SDK 的数据库目录和文件由插件管理,不要直接修改内部数据库。
+- 日志和错误上报应脱敏,避免记录 Token、完整消息内容与商业业务凭据。
+- AV Runtime 是独立 UTS 插件;它复用本插件的唯一登录态,但不属于本 SDK 的公共 IM API。
+
+## 下一步
+
+- [开始之前](/sdk/uniapp/getting-started/before-you-start)
+- [安装、初始化与 SDK 信息](/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk)
+- [认证与管理登录会话](/sdk/uniapp/getting-started/authenticate-and-manage-session)
+- [发送第一条消息](/sdk/uniapp/getting-started/send-first-message)
+- [事件概览](/sdk/uniapp/events/overview-events)
diff --git a/content/zh/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx b/content/zh/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx
new file mode 100644
index 0000000000..2847d7ba66
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx
@@ -0,0 +1,17 @@
+---
+title: '加入黑名单'
+description: '把指定用户加入当前账号的黑名单。'
+sourcePath: '/sdk/uniapp/user/blacklist/add-black'
+---
+
+`addBlack()` 把目标用户加入黑名单,可附带双方约定的扩展字符串。
+
+```uts
+import { addBlack } from '@/uni_modules/unix-openim-sdk'
+
+await addBlack({ toUserID: 'user_b', ex: '' })
+```
+
+Promise 成功后,以 `onBlackAdded` 或重新查询黑名单确认最终状态。不要在 `ex` 中写入 Token、内部封禁证据或仅管理员可见的数据。
+
+加入黑名单不会自动删除本地历史消息。产品如需隐藏会话或解除好友,应作为独立操作并设计失败补偿。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx b/content/zh/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx
new file mode 100644
index 0000000000..cbf7806a8e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx
@@ -0,0 +1,94 @@
+---
+title: '获取黑名单'
+description: '查询当前用户的黑名单快照,并处理加入与移除黑名单事件。'
+sourcePath: '/sdk/uniapp/user/blacklist/get-black-list'
+---
+
+OpenIMSDK 黑名单记录当前用户主动拉黑的用户。调用 `getBlackList()` 可以获取完整列表,用于构建黑名单设置页、展示资料卡关系状态和限制聊天入口。
+
+黑名单与群组管理是两类独立能力。禁言、移除群成员或调整群角色时,应使用群成员 API;`getBlackList()` 只读取当前用户维护的黑名单。
+
+## 获取黑名单
+
+完成初始化、登录并确认连接可用后调用 `getBlackList()`。Promise 直接返回 `OpenIMBlackListResult | null`;`blackUsers` 为空数组表示当前没有黑名单用户。
+
+```uts
+import { getBlackList } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getBlackList()
+const blockedUsers = result?.blackUsers ?? []
+replaceBlockedUsers(blockedUsers)
+```
+
+资料卡、会话操作菜单和联系人列表通常只需要判断某个 `userID` 是否在黑名单中。建议用 `userID` 建立集合,昵称和头像仅用于展示。
+
+```uts
+const blockedUserIDs = new Set()
+blockedUsers.forEach((user) => blockedUserIDs.add(user.userID))
+
+function isBlocked(userID : string) : boolean {
+ return blockedUserIDs.has(userID)
+}
+```
+
+商业版还提供 `getBlacks()` 商业版,其包装字段名是 `blacks`:
+
+```uts
+import { getBlacks } from '@/uni_modules/unix-openim-sdk'
+
+const commercialResult = await getBlacks()
+replaceBlockedUsers(commercialResult?.blacks ?? [])
+```
+
+两个入口不要混用返回字段。一般业务选择一个与所安装版本一致的入口,不需要同时查询两份快照。
+
+## 黑名单记录字段
+
+`blackUsers` 中的每一项都是 `OpenIMBlackUserItem`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `userID` | `string` | 被当前用户拉黑的目标用户 ID,也是列表和事件合并标识。 |
+| `nickname` | `string` | 目标用户昵称,用于展示。 |
+| `faceURL` | `string` | 目标用户头像地址。 |
+| `ownerUserID` | `string` | 这条黑名单关系的所有者,通常是当前登录用户。 |
+| `operatorUserID` | `string` | 执行拉黑操作的用户 ID。 |
+| `createTime` | `number` | 黑名单关系创建时间。 |
+| `addSource` | `number` | 黑名单关系的添加来源值。 |
+| `ex` | `string` | 扩展字段,只解析业务已经约定的内容。 |
+| `attachedInfo` | `string` | SDK 附加信息,只按已确认的业务约定解析。 |
+
+若黑名单页还要展示公开资料或好友备注,应按 `userID` 合并,并明确区分 `OpenIMBlackUserItem`、`OpenIMFriendUserItem` 和 `OpenIMPublicUserItem` 的来源。
+
+## 调用结果与增量变化
+
+`getBlackList()` 成功后,用返回数组完整替换当前黑名单快照。该查询本身不会触发新增或删除事件;首次进入页面、重新登录或用户主动刷新时,应重新查询完整列表。
+
+本页是 `onBlackAdded` 和 `onBlackDeleted` 的完整监听归属页:
+
+```uts
+import {
+ off,
+ onBlackAdded,
+ onBlackDeleted,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const blacklistSubscriptions : Array = [
+ onBlackAdded((user) => {
+ upsertBlockedUser(user.userID, user)
+ }),
+ onBlackDeleted((user) => {
+ removeBlockedUser(user.userID)
+ }),
+]
+
+function releaseBlacklistSubscriptions() {
+ blacklistSubscriptions.forEach((subscription) => off(subscription))
+ blacklistSubscriptions.length = 0
+}
+```
+
+事件按 `userID` 合并。加入黑名单后,对方不能向当前用户发送消息,但当前用户仍可向对方发送;若产品要求双向限制,应由业务层额外控制。黑名单与好友关系仍是独立状态,客户端应分别查询,不能假定拉黑一定删除好友。
+
+退出登录、切换账号或销毁黑名单状态层时调用 `releaseBlacklistSubscriptions()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx b/content/zh/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx
new file mode 100644
index 0000000000..9c3c9e341f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx
@@ -0,0 +1,17 @@
+---
+title: '移出黑名单'
+description: '把指定用户从当前账号的黑名单移除。'
+sourcePath: '/sdk/uniapp/user/blacklist/remove-black'
+---
+
+`removeBlack()` 按用户 ID 移除黑名单关系。
+
+```uts
+import { removeBlack } from '@/uni_modules/unix-openim-sdk'
+
+await removeBlack('user_b')
+```
+
+Promise 成功后,以 `onBlackDeleted` 或重新查询结果更新 UI。移出黑名单不会自动恢复已删除的好友关系,也不会重新创建被隐藏或删除的会话。
+
+重复移除可能返回关系状态错误。操作失败时刷新黑名单快照,不要无限重试。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx
new file mode 100644
index 0000000000..bdd59e688f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx
@@ -0,0 +1,20 @@
+---
+title: '接受好友申请'
+description: '接受指定用户发来的好友申请。'
+sourcePath: '/sdk/uniapp/user/friend-applications/accept-friend-application'
+---
+
+`acceptFriendApplication()` 接受目标用户的申请,并可附带处理说明。
+
+```uts
+import { acceptFriendApplication } from '@/uni_modules/unix-openim-sdk'
+
+await acceptFriendApplication({
+ toUserID: 'user_b',
+ handleMsg: '已通过',
+})
+```
+
+这里的 `toUserID` 是申请对方的用户 ID。Promise 成功后,申请状态和好友列表分别由申请事件、好友新增事件或重新查询确认;不要只在一个列表中更新。
+
+重复处理可能由服务端返回状态错误,UI 应在请求期间禁用重复操作,并在失败后重新查询申请详情。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx
new file mode 100644
index 0000000000..4b9e70b4be
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx
@@ -0,0 +1,21 @@
+---
+title: '发起好友申请'
+description: '向指定用户发送好友申请。'
+sourcePath: '/sdk/uniapp/user/friend-applications/add-friend'
+---
+
+使用 `addFriend()` 向目标用户发起申请。目标用户、验证文案和可选扩展数据通过 `OpenIMAddFriendParams` 传入。
+
+```uts
+import { addFriend } from '@/uni_modules/unix-openim-sdk'
+
+await addFriend({
+ toUserID: 'user_b',
+ reqMsg: '你好,我是 Alice',
+ ex: '',
+})
+```
+
+`reqMsg` 会展示给接收方,不应包含 Token、内部权限信息或其他敏感数据。`ex` 只存放双方约定且可安全公开给申请接收者的扩展字符串。
+
+Promise 成功不等于已经成为好友;接收方仍可能接受或拒绝。申请方可通过[查询发出的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant)刷新状态。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx
new file mode 100644
index 0000000000..4c28cac638
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx
@@ -0,0 +1,32 @@
+---
+title: '删除好友申请记录'
+description: '商业版批量删除指定好友申请记录。'
+sourcePath: '/sdk/uniapp/user/friend-applications/delete-friend-requests'
+---
+
+`deleteFriendRequests()` 商业版 批量删除明确指定的好友申请记录。
+
+## 参数说明
+
+该方法接收 `OpenIMDeleteFriendRequestsParams`,其中 `friendRequests` 数组的每一项使用以下字段:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `friendRequests[].fromUserID` | `string` | 是 | 申请发起人的用户 ID。 |
+| `friendRequests[].toUserID` | `string` | 是 | 申请接收人的用户 ID。 |
+
+```uts
+import { deleteFriendRequests } from '@/uni_modules/unix-openim-sdk'
+
+await deleteFriendRequests({
+ friendRequests: [
+ { fromUserID: 'user_a', toUserID: 'user_b' },
+ ],
+})
+```
+
+每项都是 `OpenIMSimpleFriendRequest`,通过 `fromUserID:toUserID` 精确定位。删除申请记录不等于拒绝申请,也不会解除已经建立的好友关系;删除好友关系应使用好友删除 API。
+
+Promise 成功表示删除请求已完成,随后可能收到 `onFriendApplicationDeleted`。完整事件监听见[获取收到的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient),按 `fromUserID:toUserID` 移除记录。
+
+批量操作前应在 UI 中确认目标。失败时不要假定全部或部分记录已经删除;重新查询收到和发出的申请列表,以服务端快照校准。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx
new file mode 100644
index 0000000000..cfccfe62cb
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx
@@ -0,0 +1,27 @@
+---
+title: '查询发出的好友申请'
+description: '分页读取当前账号发出的好友申请。'
+sourcePath: '/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant'
+---
+
+`getFriendApplicationListAsApplicant()` 查询当前账号发出的申请,返回 `OpenIMFriendApplicationListResult | null`。
+
+## 参数说明
+
+参数对象可以省略;显式分页时使用:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `offset` | `number` 或 `null` | 否 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` 或 `null` | 否 | 本次请求的申请数量。 |
+
+```uts
+import { getFriendApplicationListAsApplicant } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getFriendApplicationListAsApplicant({ offset: 0, count: 50 })
+renderSentApplications(result?.applications ?? [])
+```
+
+Promise 成功后,`applications` 是当前页已发出的 `OpenIMFriendApplicationItem[]`,字段含义见[获取收到的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient)。该查询本身不会触发申请事件。
+
+分页结果可能在查询期间发生变化。事件按 `fromUserID:toUserID` 合并,而不是按数组下标更新;分页期间收到变化时可以重置分页并重新查询。完整监听统一放在收到的申请页面。App 恢复、重新登录或事件可能遗漏时,重新建立本列表快照。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx
new file mode 100644
index 0000000000..3ebe5dd5be
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx
@@ -0,0 +1,90 @@
+---
+title: '获取收到的好友申请'
+description: '分页查询当前用户收到的好友申请,并同步申请状态变化。'
+sourcePath: '/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient'
+---
+
+`getFriendApplicationListAsRecipient()` 查询其他用户发给当前账号的好友申请。uni-app / uni-app x 的 `OpenIMApplicationListParams` 只提供分页字段,不包含 Wasm 版本的 `handleResults` 筛选;需要只展示待处理申请时,在返回后根据 `handleResult` 过滤。
+
+## 参数说明
+
+参数对象可以省略;显式分页时使用:
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `offset` | `number` 或 `null` | 否 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` 或 `null` | 否 | 本次请求的申请数量。 |
+
+```uts
+import { getFriendApplicationListAsRecipient } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getFriendApplicationListAsRecipient({
+ offset: 0,
+ count: 20,
+})
+
+const applications = result?.applications ?? []
+replaceReceivedApplications(applications)
+```
+
+Promise 成功后直接返回 `OpenIMFriendApplicationListResult | null`,其中 `applications` 是当前页 `OpenIMFriendApplicationItem[]`。查询本身不会触发申请事件。
+
+### 好友申请字段
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `fromUserID` | `string` | 申请发起人的用户 ID。 |
+| `fromNickname` | `string` | 申请发起人的昵称快照。 |
+| `fromFaceURL` | `string` | 申请发起人的头像快照。 |
+| `toUserID` | `string` | 申请接收人的用户 ID。 |
+| `toNickname` | `string` | 申请接收人的昵称快照。 |
+| `toFaceURL` | `string` | 申请接收人的头像快照。 |
+| `reqMsg` | `string` | 申请附言。 |
+| `handleResult` | `number` | 当前处理结果:`0` 待处理、`1` 已同意、`-1` 已拒绝。 |
+| `handlerUserID` | `string` | 执行处理的用户 ID;未处理时可能为空。 |
+| `handleMsg` | `string` | 处理时填写的说明。 |
+| `handleTime` | `number` | 处理时间;未处理时不应当作有效时间展示。 |
+| `createTime` | `number` | 申请记录创建时间。 |
+| `ex` | `string` | 申请记录扩展字符串。 |
+| `attachedInfo` | `string` | SDK 附加信息,只按已确认的业务约定解析。 |
+
+申请记录使用 `fromUserID:toUserID` 作为合并标识。昵称和头像是申请创建或同步时的快照;需要最新账号资料时,再按相应 `userID` 调用 `getUsersInfo()`。
+
+## 同步好友申请变化
+
+本页是 `onFriendApplicationAdded`、`onFriendApplicationAccepted`、`onFriendApplicationRejected` 和 `onFriendApplicationDeleted` 的完整监听归属页。推荐先注册事件,再查询快照:
+
+```uts
+import {
+ off,
+ onFriendApplicationAccepted,
+ onFriendApplicationAdded,
+ onFriendApplicationDeleted,
+ onFriendApplicationRejected,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const applicationSubscriptions : Array = [
+ onFriendApplicationAdded((item) => {
+ mergeFriendApplication(item.fromUserID, item.toUserID, item)
+ }),
+ onFriendApplicationAccepted((item) => {
+ mergeFriendApplication(item.fromUserID, item.toUserID, item)
+ }),
+ onFriendApplicationRejected((item) => {
+ mergeFriendApplication(item.fromUserID, item.toUserID, item)
+ }),
+ onFriendApplicationDeleted((item) => {
+ removeFriendApplication(item.fromUserID, item.toUserID)
+ }),
+]
+
+function releaseFriendApplicationSubscriptions() {
+ applicationSubscriptions.forEach((subscription) => off(subscription))
+ applicationSubscriptions.length = 0
+}
+```
+
+按当前用户是否为 `toUserID`,把事件分流到收到或发出的列表。分页期间收到变化时可以重置分页;申请被同意后,新好友关系由[分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page)归属的 `onFriendAdded` 合并。
+
+收到申请后应调用接受或拒绝 API,不要只修改本地 `handleResult` 冒充服务端成功。退出登录、切换账号或销毁好友申请状态层时,调用 `releaseFriendApplicationSubscriptions()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx
new file mode 100644
index 0000000000..68be3291e8
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx
@@ -0,0 +1,18 @@
+---
+title: '查询未处理好友申请数'
+description: '查询好友申请入口的未处理数量。'
+sourcePath: '/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count'
+---
+
+`getFriendApplicationUnhandledCount()` 返回未处理好友申请数量,结果可能为 `null`。
+
+```uts
+import { getFriendApplicationUnhandledCount } from '@/uni_modules/unix-openim-sdk'
+
+const count = await getFriendApplicationUnhandledCount({ offset: 0, count: 100 })
+renderApplicationBadge(count ?? 0)
+```
+
+分页参数用于限制本次统计查询范围,实际产品应使用与服务端约定一致的 `count`。不要把 `null` 永久缓存成 0;它也可能表示当前没有有效结果。
+
+申请新增、接受、拒绝或删除时重新查询数量,避免在多个设备和断线恢复场景下只做本地 `+1/-1` 而漂移。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx
new file mode 100644
index 0000000000..68ef63145d
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx
@@ -0,0 +1,20 @@
+---
+title: '拒绝好友申请'
+description: '拒绝指定用户发来的好友申请。'
+sourcePath: '/sdk/uniapp/user/friend-applications/refuse-friend-application'
+---
+
+`refuseFriendApplication()` 拒绝目标用户的申请。
+
+```uts
+import { refuseFriendApplication } from '@/uni_modules/unix-openim-sdk'
+
+await refuseFriendApplication({
+ toUserID: 'user_b',
+ handleMsg: '暂不添加',
+})
+```
+
+处理说明可能对申请方可见,不应包含内部风控原因或敏感信息。Promise 成功后,以 `onFriendApplicationRejected` 或重新查询结果更新状态。
+
+接受与拒绝互斥。请求开始后锁定该申请项,避免用户快速点击造成并行请求。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friends/check-friend.mdx b/content/zh/docs/chat/sdk/uniapp/user/friends/check-friend.mdx
new file mode 100644
index 0000000000..38992821b8
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friends/check-friend.mdx
@@ -0,0 +1,19 @@
+---
+title: '检查好友关系'
+description: '批量检查当前账号与指定用户的好友关系。'
+sourcePath: '/sdk/uniapp/user/friends/check-friend'
+---
+
+`checkFriend()` 批量检查当前账号与用户列表之间的关系,返回 `OpenIMCheckFriendResult | null`。
+
+```uts
+import { checkFriend } from '@/uni_modules/unix-openim-sdk'
+
+const result = await checkFriend(['user_a', 'user_b'])
+const relations = result?.result ?? []
+relations.forEach((relation) => cacheFriendRelation(relation.userID, relation.result))
+```
+
+关系结果应按 `userID` 读取,不依赖数组顺序。具体数值含义使用插件导出的好友关系常量,不在业务代码中散落裸数字。
+
+本方法是查询,不会创建好友关系。不是好友时,使用[发起好友申请](/sdk/uniapp/user/friend-applications/add-friend);已有好友的资料和变化通过[查询好友列表](/sdk/uniapp/user/friends/get-friend-list-page)维护。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx b/content/zh/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx
new file mode 100644
index 0000000000..90fe00635b
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx
@@ -0,0 +1,17 @@
+---
+title: '删除好友'
+description: '解除与指定用户的好友关系。'
+sourcePath: '/sdk/uniapp/user/friends/delete-friend'
+---
+
+`deleteFriend()` 解除当前账号与指定用户的好友关系。
+
+```uts
+import { deleteFriend } from '@/uni_modules/unix-openim-sdk'
+
+await deleteFriend('user_a')
+```
+
+Promise 成功表示请求完成。好友列表应以 `onFriendDeleted` 事件或重新查询结果为准;完整监听见[查询好友列表](/sdk/uniapp/user/friends/get-friend-list-page)。
+
+删除好友不会自动删除会话、历史消息或加入黑名单。产品如需这些行为,应分别调用对应 API,并明确失败补偿顺序。删除前应由 UI 二次确认,避免误操作。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx b/content/zh/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx
new file mode 100644
index 0000000000..d4588bab2f
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx
@@ -0,0 +1,73 @@
+---
+title: '分页获取好友列表'
+description: '使用 uni-app / uni-app x SDK 分页查询当前用户的好友列表。'
+sourcePath: '/sdk/uniapp/user/friends/get-friend-list-page'
+---
+
+先注册好友事件,再调用 `getFriendListPage()` 建立当前好友快照。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `offset` | `number` | 是 | 分页偏移量,首页传 `0`。 |
+| `count` | `number` | 是 | 本次请求的好友数量。 |
+| `filterBlack` | `boolean` | 否 | 是否从结果中过滤黑名单用户。 |
+
+```uts
+import { getFriendListPage } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getFriendListPage({
+ offset: 0,
+ count: 50,
+ filterBlack: true,
+})
+```
+
+Promise 成功后,`result?.friends` 是当前页 `OpenIMFriendUserItem[]`。继续加载时按请求条目数增加 `offset`;好友增删后重置分页。原生 API 直接返回 `OpenIMFriendListResult | null`,不使用 `{ data }` 包装。
+
+### 好友资料字段
+
+`OpenIMFriendUserItem` 表示当前账号与一个好友的关系资料:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `userID` | `string` | 好友的用户 ID,也是好友列表的稳定标识。 |
+| `nickname` | `string` | 好友的账号级昵称。 |
+| `faceURL` | `string` | 好友的账号级头像地址。 |
+| `remark` | `string` | 当前账号为该好友设置的备注。 |
+| `isPinned` | `boolean` | 该好友是否在联系人列表中置顶。 |
+| `ownerUserID` | `string` | 这条好友关系所属的用户 ID,通常是当前账号。 |
+| `operatorUserID` | `string` | 建立或更新这条关系的操作用户 ID。 |
+| `addSource` | `number` | 好友关系的添加来源值。 |
+| `createTime` | `number` | 好友关系创建时间。 |
+| `ex` | `string` | 好友关系扩展字符串。 |
+| `attachedInfo` | `string` | SDK 附加信息;只按已确认的业务约定解析。 |
+
+`nickname`、`faceURL` 是账号资料快照,`remark`、`isPinned`、`ex` 和 `attachedInfo` 属于好友关系。不要用 `OpenIMFriendUserItem` 覆盖陌生人的 `OpenIMPublicUserItem`,也不要把好友备注写回账号昵称。
+
+## 同步好友变化
+
+本页是 `onFriendAdded`、`onFriendInfoChanged` 和 `onFriendDeleted` 的完整监听归属页。查询负责建立快照,事件负责按 `userID` 合并增量。
+
+```uts
+import {
+ off,
+ onFriendAdded,
+ onFriendDeleted,
+ onFriendInfoChanged,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const friendSubscriptions : Array = [
+ onFriendAdded((friend) => mergeFriend(friend.userID, friend)),
+ onFriendInfoChanged((friend) => mergeFriend(friend.userID, friend)),
+ onFriendDeleted((friend) => removeFriend(friend.userID)),
+]
+
+function removeFriendListeners() {
+ friendSubscriptions.forEach((subscription) => off(subscription))
+}
+```
+
+退出登录、切换账号或销毁联系人状态层时调用 `removeFriendListeners()`。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx b/content/zh/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx
new file mode 100644
index 0000000000..3dbf3bd8bd
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx
@@ -0,0 +1,22 @@
+---
+title: '查询指定好友资料'
+description: '按 userID 列表读取指定好友关系资料。'
+sourcePath: '/sdk/uniapp/user/friends/get-specified-friends-info'
+---
+
+`getSpecifiedFriendsInfo()` 接收用户 ID 列表,并可选择过滤黑名单用户。
+
+```uts
+import { getSpecifiedFriendsInfo } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSpecifiedFriendsInfo({
+ userIDList: ['user_a', 'user_b'],
+ filterBlack: false,
+})
+
+const friends = result?.friends ?? []
+```
+
+返回列表可能少于输入列表,且不保证顺序。按 `userID` 建立映射;未返回用户可能不是好友、被过滤或当前不可查询。
+
+`filterBlack: true` 只影响结果过滤,不会移除黑名单关系。需要判断双方关系时使用[检查好友关系](/sdk/uniapp/user/friends/check-friend),需要公共用户资料时使用[批量查询用户资料](/sdk/uniapp/user/profile/get-users-info)。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friends/search-friends.mdx b/content/zh/docs/chat/sdk/uniapp/user/friends/search-friends.mdx
new file mode 100644
index 0000000000..8b0ad1915a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friends/search-friends.mdx
@@ -0,0 +1,35 @@
+---
+title: '搜索好友'
+description: '按用户 ID、昵称或备注搜索当前好友。'
+sourcePath: '/sdk/uniapp/user/friends/search-friends'
+---
+
+`searchFriends()` 只搜索当前好友关系,不是全站用户搜索。通过布尔字段明确要匹配的属性。
+
+当前建议只使用一个去除首尾空格后的非空关键词。空关键词应在调用前拦截。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `keywordList` | `string[]` | 是 | 搜索关键词数组;当前只使用第一个非空关键词。 |
+| `isSearchUserID` | `boolean` | 是 | 是否匹配好友用户 ID。 |
+| `isSearchNickname` | `boolean` | 是 | 是否匹配好友昵称。 |
+| `isSearchRemark` | `boolean` | 是 | 是否匹配当前用户设置的好友备注。 |
+
+```uts
+import { searchFriends } from '@/uni_modules/unix-openim-sdk'
+
+const result = await searchFriends({
+ keywordList: ['Alice'],
+ isSearchUserID: true,
+ isSearchNickname: true,
+ isSearchRemark: true,
+})
+
+renderFriends(result?.friends ?? [])
+```
+
+Promise 成功后直接返回 `OpenIMFriendListResult | null`,从 `friends` 读取 `OpenIMFriendUserItem[]`。好友字段见[分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page)。
+
+搜索结果只建立当前条件下的展示快照,不改变好友资料或服务端索引,也不应覆盖完整好友列表。按 `userID` 关联现有好友状态,并继续合并好友事件;需要查指定好友资料时使用[查询指定好友资料](/sdk/uniapp/user/friends/get-specified-friends-info)。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/friends/update-friends.mdx b/content/zh/docs/chat/sdk/uniapp/user/friends/update-friends.mdx
new file mode 100644
index 0000000000..7f8de9113a
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/friends/update-friends.mdx
@@ -0,0 +1,40 @@
+---
+title: '更新好友资料'
+description: '批量更新好友备注、置顶和扩展字段,并说明商业版单用户入口。'
+sourcePath: '/sdk/uniapp/user/friends/update-friends'
+---
+
+`updateFriends()` 可批量更新好友关系上的备注、置顶或扩展字段。只传要修改的字段。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `friendUserIDs` | `string[]` | 是 | 要更新的好友用户 ID 列表;同一组更新值会应用到全部目标。 |
+| `remark` | `string` 或 `null` | 否 | 新备注。 |
+| `isPinned` | `boolean` 或 `null` | 否 | 是否置顶好友。 |
+| `ex` | `string` 或 `null` | 否 | 新扩展字符串,会完整覆盖旧值。 |
+
+```uts
+import { updateFriends } from '@/uni_modules/unix-openim-sdk'
+
+await updateFriends({
+ friendUserIDs: ['user_a', 'user_b'],
+ remark: '项目成员',
+ isPinned: true,
+})
+```
+
+`friendUserIDs` 不能为空;除目标列表外,至少提供一个实际更新字段。不同好友需要不同值时应分别调用。`ex` 是完整字符串,不会自动合并 JSON 字段。
+
+Promise 成功表示更新请求完成,不等同于好友事件已经到达。最终资料通过 `onFriendInfoChanged` 按 `userID` 合并,完整监听见[分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page);必要时重新查询校准。
+
+商业版还提供 `updateFriend()` 商业版,参数为单个 `userID`,字段名使用 `pinned`:
+
+```uts
+import { updateFriend } from '@/uni_modules/unix-openim-sdk'
+
+await updateFriend({ userID: 'user_a', pinned: true, remark: '负责人' })
+```
+
+`updateFriend()` 使用单个 `userID`,并把置顶字段命名为 `pinned`;其 `remark` 和 `ex` 仍是完整覆盖值。不要同时对同一好友并发调用两个入口;选择一种并让好友 store 串行合并结果。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx b/content/zh/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx
new file mode 100644
index 0000000000..b6b775afd0
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx
@@ -0,0 +1,19 @@
+---
+title: '查询已订阅用户状态'
+description: '读取当前账号已经订阅的用户在线状态快照。'
+sourcePath: '/sdk/uniapp/user/online-status/get-subscribe-users-status'
+---
+
+`getSubscribeUsersStatus()` 返回当前账号已订阅用户的状态快照,不接收用户 ID 参数。
+
+```uts
+import { getSubscribeUsersStatus } from '@/uni_modules/unix-openim-sdk'
+
+const result = await getSubscribeUsersStatus()
+const statuses = result?.statuses ?? []
+statuses.forEach((status) => replaceUserStatus(status.userID, status))
+```
+
+空结果可能表示尚未订阅、订阅用户当前没有可用状态,或服务端返回空列表。不要只用数组长度判断连接是否正常。
+
+持续变化仍由 `onUserStatusChanged` 提供,完整订阅和清理见[订阅用户在线状态](/sdk/uniapp/user/online-status/subscribe-users-status)。本方法适合 App 恢复前台或状态 store 重建时重新获取快照。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx b/content/zh/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx
new file mode 100644
index 0000000000..cf76034c40
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx
@@ -0,0 +1,70 @@
+---
+title: '订阅用户在线状态'
+description: '订阅指定用户的在线状态,查询初始快照并合并状态事件。'
+sourcePath: '/sdk/uniapp/user/online-status/subscribe-users-status'
+---
+
+在线状态只表示用户是否连接 OpenIMServer,不表示用户正在查看 App、某个会话或某条消息。建议只订阅当前界面和业务确实需要的用户;每个账号最多订阅 3000 个用户,不要一次订阅整个用户目录。
+
+`subscribeUsersStatus()` 在 unix SDK 中用于建立订阅,Promise 成功只返回字符串结果,不直接返回状态数组。建立订阅后再调用 `getUserStatus()` 获取当前快照,后续变化通过 `onUserStatusChanged` 合并。
+
+```uts
+import {
+ getUserStatus,
+ subscribeUsersStatus,
+} from '@/uni_modules/unix-openim-sdk'
+
+const userIDs = uniqueUserIDs(['user_a', 'user_b'])
+
+await subscribeUsersStatus(userIDs)
+
+const snapshot = await getUserStatus(userIDs)
+snapshot?.statuses.forEach((status) => {
+ replaceUserStatus(status.userID, status)
+})
+```
+
+先去除空值和重复 `userID`。订阅成功、查询快照和后续事件是三个阶段,不能把 `subscribeUsersStatus()` 的字符串返回值当成在线状态对象。
+
+### 在线状态字段
+
+`getUserStatus()` 返回 `OpenIMUserStatusListResult | null`,其中 `statuses` 的元素是 `OpenIMUserStatusItem`:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `userID` | `string` | 状态所属用户 ID,也是状态缓存的合并标识。 |
+| `status` | `number` | 汇总在线状态;应使用插件导出的在线状态常量解释,不要自行发明数值。 |
+| `platformIDs` | `number[]` | 当前在线平台列表;为空时不要推断具体设备或最后活跃时间。 |
+
+一次平台离线不一定表示用户所有设备都离线。应用应同时查看汇总 `status` 与 `platformIDs`,并按服务端多端策略展示。
+
+## 监听在线状态变化
+
+本页是 `onUserStatusChanged` 的完整监听归属页。为缩小注册与快照查询之间的丢失窗口,推荐先注册事件,再建立订阅和查询快照:
+
+```uts
+import {
+ off,
+ onUserStatusChanged,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const statusSubscription = onUserStatusChanged((result) => {
+ result.statuses.forEach((status) => {
+ replaceUserStatus(status.userID, status)
+ })
+})
+
+await subscribeUsersStatus(userIDs)
+
+const current = await getUserStatus(userIDs)
+current?.statuses.forEach((status) => {
+ replaceUserStatus(status.userID, status)
+})
+
+function releaseStatusListener() {
+ off(statusSubscription)
+}
+```
+
+初始快照与事件都按 `userID` 幂等合并。退出登录、切换账号或销毁在线状态层时调用 `releaseStatusListener()`;不再需要某些用户状态时,还要调用[取消用户在线状态订阅](/sdk/uniapp/user/online-status/unsubscribe-users-status),避免长期占用订阅额度。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx b/content/zh/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx
new file mode 100644
index 0000000000..95ff1421c8
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx
@@ -0,0 +1,20 @@
+---
+title: '取消用户在线状态订阅'
+description: '停止接收指定用户的在线状态变化。'
+sourcePath: '/sdk/uniapp/user/online-status/unsubscribe-users-status'
+---
+
+页面或业务不再关注一组用户时,调用 `unsubscribeUsersStatus()` 释放服务端状态订阅。
+
+```uts
+import { unsubscribeUsersStatus } from '@/uni_modules/unix-openim-sdk'
+
+await unsubscribeUsersStatus(['user_a', 'user_b'])
+```
+
+该调用只取消传入用户,不会清空其他订阅,也不会自动释放本地 `onUserStatusChanged` 事件句柄。页面应同时维护两层生命周期:
+
+1. 用本 API取消不再需要的用户状态订阅。
+2. 在事件 owner 作用域结束时,通过 `off(subscription)` 清理本地事件处理器。
+
+重复取消应按幂等业务处理;失败时保留本地订阅记录并根据网络状态决定是否重试,不要高频循环调用。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/overview-user.mdx b/content/zh/docs/chat/sdk/uniapp/user/overview-user.mdx
new file mode 100644
index 0000000000..561d50b4f1
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/overview-user.mdx
@@ -0,0 +1,56 @@
+---
+title: '用户概览'
+description: '了解 uni-app / uni-app x SDK 中的用户资料、好友关系、黑名单和在线状态。'
+sourcePath: '/sdk/uniapp/user/overview-user'
+---
+
+`unix-openim-sdk` 使用 `userID` 标识用户。实现资料卡、好友添加、联系人或黑名单功能时,首先要区分应用用户的公开资料、当前用户维护的好友关系、好友申请和黑名单状态。
+
+群成员列表、群内昵称、群角色和成员管理属于群组能力,相关用法见[分页查询群成员](/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。`userID` 是跨端稳定标识;昵称和头像可以变化,不能作为状态主键。
+
+## 用户类型
+
+SDK 会根据使用场景返回不同的用户对象:
+
+| 类型 | 适用场景 | 主要接口 |
+| --- | --- | --- |
+| `OpenIMUserInfo` | 当前登录用户资料、设置页、当前账号头像和昵称 | `getSelfUserInfo()`、`setSelfInfo()` |
+| `OpenIMPublicUserItem` | 应用用户查询、好友候选人、陌生人资料卡;它是 `OpenIMUserInfo` 的公开别名 | `getUsersInfo()` |
+| `OpenIMFriendUserItem` | 当前用户的好友列表、好友备注、置顶和关系扩展字段 | `getFriendListPage()`、`getSpecifiedFriendsInfo()` |
+| `OpenIMBlackUserItem` | 当前用户黑名单中的用户 | `getBlackList()`、`addBlack()`、`removeBlack()` |
+| `OpenIMFriendApplicationItem` | 发出或收到的好友申请及其处理状态 | 好友申请查询、接受、拒绝和删除 API |
+| `OpenIMUserStatusItem` | 用户汇总在线状态和在线平台 | `subscribeUsersStatus()`、`getUserStatus()` |
+
+同一个 `userID` 可能同时出现在公开资料、好友资料、黑名单和群成员资料中。联系人页优先使用 `OpenIMFriendUserItem`;陌生人资料卡使用 `OpenIMPublicUserItem`;群成员列表使用 `OpenIMGroupMemberItem`。会话列表和聊天页标题属于会话数据,应使用 `OpenIMConversationItem.showName`。
+
+`OpenIMUserInfo` 的公共字段包括 `userID`、`nickname`、`faceURL`、`ex` 和可选 `createTime`。`attachedInfo` 与 `globalRecvMsgOpt` 是商业版字段,读取前应判空,不要假定公共服务端一定返回。
+
+## 功能入口
+
+| 需求 | 推荐页面 |
+| --- | --- |
+| 按 `userID` 查询公开资料,用于查找好友候选人或展示资料卡 | [获取用户资料](/sdk/uniapp/user/profile/get-users-info) |
+| 分页、搜索或按 ID 查询好友关系 | [分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page) |
+| 发送或处理好友申请 | [发送好友申请](/sdk/uniapp/user/friend-applications/add-friend)、[获取收到的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient) |
+| 修改好友资料 | [更新好友资料](/sdk/uniapp/user/friends/update-friends) |
+| 删除好友关系 | [删除好友](/sdk/uniapp/user/friends/delete-friend) |
+| 查看和维护当前用户黑名单 | [获取黑名单](/sdk/uniapp/user/blacklist/get-black-list) |
+| 读取或更新当前用户昵称、头像和扩展资料 | [更新当前用户资料](/sdk/uniapp/user/profile/set-self-info) |
+| 设置账号级消息接收策略 | [设置全局消息接收方式](/sdk/uniapp/user/profile/set-global-message-reception) |
+| 查看加好友权限的当前合同边界 | [设置加好友权限](/sdk/uniapp/user/profile/set-friend-add-permission) |
+| 订阅和读取在线状态 | [订阅用户在线状态](/sdk/uniapp/user/online-status/subscribe-users-status) |
+| 读取群成员、搜索成员或查询指定成员资料 | [分页查询群成员](/sdk/uniapp/group/retrieving-group-members/get-group-member-list) |
+
+业务后端仍是账号身份、实名信息、组织关系和业务权限的权威来源。SDK 用户资料适合聊天展示,不能替代业务登录和授权。
+
+## 状态更新
+
+页面首次进入时先调用对应查询 API 建立快照,再通过事件合并增量:
+
+- 当前用户资料变化:见[更新当前用户资料](/sdk/uniapp/user/profile/set-self-info)。
+- 好友申请变化:见[获取收到的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient)。
+- 好友关系和资料变化:见[分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page)。
+- 黑名单变化:见[获取黑名单](/sdk/uniapp/user/blacklist/get-black-list)。
+- 在线状态变化:见[订阅用户在线状态](/sdk/uniapp/user/online-status/subscribe-users-status)。
+
+这些列表都按 `userID` 幂等合并。不要只依赖事件恢复完整列表;断线重连、重新登录、切换账号或 App 被系统回收后,应重新查询当前界面所需的快照。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx b/content/zh/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx
new file mode 100644
index 0000000000..e9541fbb48
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx
@@ -0,0 +1,37 @@
+---
+title: '获取当前用户资料'
+description: '查询当前已登录用户的 OpenIM 资料快照。'
+sourcePath: '/sdk/uniapp/user/profile/get-self-user-info'
+---
+
+完成初始化、登录并确认连接可用后,调用 `getSelfUserInfo()` 查询当前账号资料:
+
+```uts
+import {
+ getSelfUserInfo,
+ type OpenIMUserInfo,
+} from '@/uni_modules/unix-openim-sdk'
+
+const currentUser : OpenIMUserInfo | null = await getSelfUserInfo()
+if (currentUser != null) {
+ renderProfile(currentUser.nickname, currentUser.faceURL)
+}
+```
+
+## 返回结果
+
+Promise 成功后直接返回 `OpenIMUserInfo | null`,没有 `{ data }` 包装。非空对象字段如下:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `userID` | `string` | 当前登录用户的 OpenIMSDK 用户 ID,也是资料快照的稳定标识。 |
+| `nickname` | `string` | 账号级昵称。 |
+| `faceURL` | `string` | 账号级头像地址。 |
+| `createTime` | `number` 或 `null`(可选) | 用户记录创建时间。 |
+| `globalRecvMsgOpt` 商业版 | `number` 或 `null`(可选) | 当前账号的全局消息接收方式;常量和语义见[设置全局消息接收方式](/sdk/uniapp/user/profile/set-global-message-reception)。 |
+| `attachedInfo` 商业版 | `string` 或 `null`(可选) | SDK 附加信息;只按已确认的业务约定解析。 |
+| `ex` | `string` | 由业务约定的账号级扩展字符串。 |
+
+以返回的 `userID` 校验应用账号与 SDK 当前账号是否一致。`null` 不应被伪造成空用户对象;应结合登录状态和错误日志判断当前是否没有可用快照。
+
+该查询只建立当前资料快照,不触发资料事件。切换账号时必须清理旧快照;资料更新后的 `onSelfInfoUpdated` 合并和重新查询方式见[更新当前用户资料](/sdk/uniapp/user/profile/set-self-info)。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx b/content/zh/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx
new file mode 100644
index 0000000000..6d23f8f41d
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx
@@ -0,0 +1,84 @@
+---
+title: '获取用户资料'
+description: '按 userID 批量查询应用用户的公开资料。'
+sourcePath: '/sdk/uniapp/user/profile/get-users-info'
+---
+
+`getUsersInfo()` 可以按 `userID` 查询应用用户的公开资料,适合展示好友候选人、陌生人资料卡和消息发送者资料。
+
+如果产品需要按昵称、手机号、组织、邮箱或其他业务字段检索用户,应先由业务后端完成搜索和权限校验,再把返回的 `userID` 传给 `getUsersInfo()`。管理员 Token 只能保存在可信后端,用户目录管理也必须由后端执行。
+
+## 查询公开资料
+
+传入要查询的 OpenIMSDK 用户 ID 数组。调用前应去重并控制单次请求数量;不要在长列表滚动时为每一行单独请求。
+
+```uts
+import {
+ getUsersInfo,
+ type OpenIMUserInfo,
+} from '@/uni_modules/unix-openim-sdk'
+
+const userIDList : Array = uniqueUserIDs(['user_a', 'user_b'])
+const result = await getUsersInfo(userIDList)
+const users : Array = result?.users ?? []
+
+users.forEach((user) => {
+ cachePublicUser(user.userID, user)
+})
+```
+
+Promise 成功后直接返回 `OpenIMUserListResult | null`,其中 `users` 是查询到的 `OpenIMUserInfo[]`;`OpenIMPublicUserItem` 是该资料类型的公开场景别名。返回列表不保证与输入顺序一致,也可能少于请求数量。应按 `userID` 建立映射,并为不存在、无权限或未返回的用户保留占位状态。
+
+页面常用字段如下:
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| `userID` | `string` | OpenIMSDK 用户 ID。 |
+| `nickname` | `string` | 账号级公开昵称。 |
+| `faceURL` | `string` | 账号级公开头像地址。 |
+| `createTime` | `number` 或 `null`(可选) | 用户记录创建时间。 |
+| `ex` | `string` | 账号级扩展字段,格式由业务约定。 |
+| `attachedInfo` 商业版 | `string` 或 `null`(可选) | 仅按已确认的商业业务协议解析。 |
+| `globalRecvMsgOpt` 商业版 | `number` 或 `null`(可选) | 账号全局消息接收选项;陌生人资料卡通常不需要展示。 |
+
+`ex` 和 `attachedInfo` 都不能作为可信身份、权限或认证凭据。客户端也不能通过用户 API 修改其他账号资料;当前用户自己的资料通过 `setSelfInfo()` 更新。
+
+## 调用结果与资料刷新
+
+以返回的 `users` 更新当前公开资料快照。打开资料卡、手动刷新、断线重连,或收到业务后端的资料变更通知时,重新调用该方法。页面同时展示多个用户时,先收集可见项中的 `userID`,去重后批量查询,再按 `userID` 合并结果。
+
+SDK 没有面向任意公开用户资料的通用变更事件。`onSelfInfoUpdated` 只携带当前登录用户的资料,不能把它作为其他用户的公开资料写入缓存。当前账号资料的读取、更新和事件同步见[更新当前用户资料](/sdk/uniapp/user/profile/set-self-info)。
+
+## 搜索添加好友
+
+搜索并添加好友时,通常先由业务后端返回候选 `userID`,再调用 `getUsersInfo()` 展示公开资料。用户确认目标后,再进入好友申请流程。
+
+```uts
+async function searchUsersForFriendRequest(keyword : string) : Promise> {
+ const userIDs = await searchUserIDsFromBusinessBackend(keyword)
+ if (userIDs.length == 0) {
+ return []
+ }
+
+ const result = await getUsersInfo(uniqueUserIDs(userIDs))
+ return result?.users ?? []
+}
+```
+
+如果产品只支持按用户 ID 精确搜索,可以直接把经过格式校验的输入值作为 `userID` 查询。模糊搜索或按敏感字段搜索时,后端必须负责鉴权、限流、脱敏和审计。
+
+## 按场景选择展示数据
+
+| 场景 | 优先使用 |
+| --- | --- |
+| 应用用户搜索、陌生人资料卡 | `OpenIMPublicUserItem` / `OpenIMUserInfo` |
+| 好友列表、联系人页、好友备注 | `OpenIMFriendUserItem` |
+| 群成员列表、群内昵称、群角色 | `OpenIMGroupMemberItem` |
+
+好友备注和群内昵称分别来自好友关系与群成员资料。相关用法见[分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page)、[获取指定好友资料](/sdk/uniapp/user/friends/get-specified-friends-info)和[分页查询群成员](/sdk/uniapp/group/retrieving-group-members/get-group-member-list)。
+
+## 下一步
+
+- [分页获取好友列表](/sdk/uniapp/user/friends/get-friend-list-page)
+- [获取指定好友资料](/sdk/uniapp/user/friends/get-specified-friends-info)
+- [获取收到的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient)
diff --git a/content/zh/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx b/content/zh/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx
new file mode 100644
index 0000000000..cb2cda136e
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx
@@ -0,0 +1,13 @@
+---
+title: '设置加好友权限'
+description: '说明商业版加好友权限字段与当前 unix-openim-sdk 的写入边界。'
+sourcePath: '/sdk/uniapp/user/profile/set-friend-add-permission'
+---
+
+加好友权限属于商业版账号策略。锁定的 `unix-openim-sdk 0.2.0-rc.3` 会在用户模型中公开相关商业字段,但当前 `OpenIMSetSelfInfoParams` 没有独立的 `addFriendPermission` 写入参数。
+
+因此本版本不能通过本插件伪造一个 setter,也不要把该值塞进 `ex`。需要修改时,应由商业版业务后端或已确认支持该字段的管理接口完成;客户端随后重新查询当前资料并刷新 UI。
+
+页面展示该开关前应进行能力判断。公共版、旧服务端或没有返回该字段时,把状态显示为“不可配置”,不要默认成“允许任何人添加”或“需要验证”。
+
+好友申请的客户端流程见[发起好友申请](/sdk/uniapp/user/friend-applications/add-friend)与[处理收到的好友申请](/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient)。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx b/content/zh/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx
new file mode 100644
index 0000000000..dbe889bde9
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx
@@ -0,0 +1,35 @@
+---
+title: '设置全局消息接收方式'
+description: '设置当前账号在全部会话中的默认消息接收与通知方式。'
+sourcePath: '/sdk/uniapp/user/profile/set-global-message-reception'
+---
+
+`globalRecvMsgOpt` 商业版字段是账号级默认策略,控制当前账号是否接收消息以及是否允许通知。它不属于昵称、头像等普通展示资料。
+
+当前插件通过 `setSelfInfo()` 更新该字段:
+
+```uts
+import {
+ setSelfInfo,
+ type OpenIMSetSelfInfoRecvMsgOpt,
+} from '@/uni_modules/unix-openim-sdk'
+
+const receiveWithoutNotification : OpenIMSetSelfInfoRecvMsgOpt = 2
+await setSelfInfo({
+ globalRecvMsgOpt: receiveWithoutNotification,
+})
+```
+
+`OpenIMSetSelfInfoRecvMsgOpt` 的合同允许以下数值:
+
+| 数值 | 含义 |
+| --- | --- |
+| `0` | 正常接收消息,并允许离线推送或通知。 |
+| `1` | 不接收消息。只有产品明确需要停收消息并确认服务端策略时使用。 |
+| `2` | 接收消息,但不触发离线推送或通知,即全天免打扰。 |
+
+只传 `globalRecvMsgOpt`,避免在切换接收策略时意外覆盖昵称、头像或 `ex`。当前插件没有为这一字段提供独立 setter。
+
+单个会话的 `recvMsgOpt` 是更细粒度的会话设置,见[设置会话消息接收方式](/sdk/uniapp/conversation/managing-conversations/set-message-receive-option)。同时存在账号级和会话级设置时,客户端应展示服务端返回的最终会话状态,不要只根据本地开关推断。
+
+Promise 成功表示设置请求完成,不等于 `onSelfInfoUpdated` 已经到达。事件监听和 `getSelfUserInfo()` 校准方式见[更新当前用户资料](/sdk/uniapp/user/profile/set-self-info)。公共版中该字段可能不存在,业务 UI 应按能力配置显示入口,不能把缺失值解释为某个确定策略。
diff --git a/content/zh/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx b/content/zh/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx
new file mode 100644
index 0000000000..a15b9fde82
--- /dev/null
+++ b/content/zh/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx
@@ -0,0 +1,56 @@
+---
+title: '更新当前用户资料'
+description: '更新当前登录用户的昵称、头像和扩展资料,并同步资料变化事件。'
+sourcePath: '/sdk/uniapp/user/profile/set-self-info'
+---
+
+`setSelfInfo()` 更新当前登录用户的基础展示资料。只传本次确实需要更新的字段;不要用空字符串或 `null` 代替“保持不变”。
+
+## 参数说明
+
+| 参数 | 类型 | 是否必填 | 说明 |
+| --- | --- | --- | --- |
+| `nickname` | `string` 或 `null` | 否 | 新昵称。 |
+| `faceURL` | `string` 或 `null` | 否 | 新头像地址。 |
+| `ex` | `string` 或 `null` | 否 | 新扩展字符串,会完整覆盖旧值。 |
+| `globalRecvMsgOpt` 商业版 | `OpenIMSetSelfInfoRecvMsgOpt` 或 `null` | 否 | 账号级消息接收方式;应在对应设置流程中单独更新。 |
+
+至少传入一个实际要更新的字段。
+
+```uts
+import { setSelfInfo } from '@/uni_modules/unix-openim-sdk'
+
+await setSelfInfo({
+ nickname: 'OpenIM User',
+ faceURL: 'https://cdn.example.com/avatar.png',
+ ex: mergedExtra,
+})
+```
+
+`ex` 是完整字符串,SDK 不会自动合并 JSON。多个业务模块共用时,应先读取当前值,在应用层合并各自命名空间后再完整写回。
+
+`setSelfInfo()` 也承载账号级 `globalRecvMsgOpt`,但不应与普通资料一起保存。消息接收策略见[设置全局消息接收方式](/sdk/uniapp/user/profile/set-global-message-reception)。当前 Private rc.3 接口没有修改“其他用户添加当前账号时的权限”的 setter,不要从 Wasm 页面推断或调用不存在的方法;合同边界见[设置加好友权限](/sdk/uniapp/user/profile/set-friend-add-permission)。
+
+Promise 成功表示设置请求完成,不等同于资料事件已到达。最终资料通过 `onSelfInfoUpdated` 或重新调用 `getSelfUserInfo()` 校准。
+
+## 监听当前用户资料变化
+
+本页是 `onSelfInfoUpdated` 的完整监听归属页。事件携带更新后的完整 `OpenIMUserInfo`,应按 `userID` 替换当前用户快照:
+
+```uts
+import {
+ off,
+ onSelfInfoUpdated,
+ type OpenIMSDKEventSubscription,
+} from '@/uni_modules/unix-openim-sdk'
+
+const selfInfoSubscription = onSelfInfoUpdated((user) => {
+ replaceCurrentUser(user.userID, user)
+})
+
+function releaseSelfInfoSubscription() {
+ off(selfInfoSubscription)
+}
+```
+
+不要只修改发起请求的页面局部状态。多个页面都需要当前用户资料时,由应用级用户 store 统一订阅,或让每个拥有者保存并释放自己的句柄。退出登录、切换账号或销毁用户状态层时调用 `releaseSelfInfoSubscription()`。
diff --git a/data/structure/chat-pages.json b/data/structure/chat-pages.json
index 4d2df20a9f..c14c59762d 100644
--- a/data/structure/chat-pages.json
+++ b/data/structure/chat-pages.json
@@ -3602,11 +3602,1339 @@
{
"sourcePath": "/sdk/uniapp/overview",
"openimPath": "/sdk/uniapp/overview",
- "title": "OpenIM SDK for uni-app",
+ "title": "OpenIM SDK for uni-app / uni-app x",
"context": "chat/sdk/uniapp",
"template": "overview",
"contentFile": "content/docs/chat/sdk/uniapp/overview.mdx"
},
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/before-you-start",
+ "openimPath": "/sdk/uniapp/getting-started/before-you-start",
+ "title": "Before you start",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/before-you-start.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/environment-specific-implementation",
+ "openimPath": "/sdk/uniapp/getting-started/environment-specific-implementation",
+ "title": "Environment-specific implementation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/environment-specific-implementation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "openimPath": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "title": "Authenticate and manage a session",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/authenticate-and-manage-session.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/send-first-message",
+ "openimPath": "/sdk/uniapp/getting-started/send-first-message",
+ "title": "Send your first message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/send-first-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "openimPath": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "title": "Install, initialize, and inspect the SDK",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state",
+ "openimPath": "/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state",
+ "title": "Handle App lifecycle and device state",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "openimPath": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "title": "Update tokens and observe SDK sessions",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/getting-started/update-token-and-observe-sdk-session.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/overview-user",
+ "openimPath": "/sdk/uniapp/user/overview-user",
+ "title": "User overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/overview-user.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/profile/get-users-info",
+ "openimPath": "/sdk/uniapp/user/profile/get-users-info",
+ "title": "Get user profiles",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/profile/get-users-info.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/profile/get-self-user-info",
+ "openimPath": "/sdk/uniapp/user/profile/get-self-user-info",
+ "title": "Get your profile",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/profile/get-self-user-info.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/profile/set-self-info",
+ "openimPath": "/sdk/uniapp/user/profile/set-self-info",
+ "title": "Update your profile",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/profile/set-self-info.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/profile/set-global-message-reception",
+ "openimPath": "/sdk/uniapp/user/profile/set-global-message-reception",
+ "title": "Set global message reception",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/profile/set-global-message-reception.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/profile/set-friend-add-permission",
+ "openimPath": "/sdk/uniapp/user/profile/set-friend-add-permission",
+ "title": "Set friend request permissions",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/profile/set-friend-add-permission.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "openimPath": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "title": "Subscribe to online status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/online-status/subscribe-users-status.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/online-status/get-subscribe-users-status",
+ "openimPath": "/sdk/uniapp/user/online-status/get-subscribe-users-status",
+ "title": "Get subscribed user status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/online-status/get-subscribe-users-status.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/online-status/unsubscribe-users-status",
+ "openimPath": "/sdk/uniapp/user/online-status/unsubscribe-users-status",
+ "title": "Unsubscribe from online status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/online-status/unsubscribe-users-status.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "openimPath": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "title": "Get the friend list",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friends/get-friend-list-page.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friends/search-friends",
+ "openimPath": "/sdk/uniapp/user/friends/search-friends",
+ "title": "Search friends",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friends/search-friends.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friends/get-specified-friends-info",
+ "openimPath": "/sdk/uniapp/user/friends/get-specified-friends-info",
+ "title": "Get friend profiles",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friends/get-specified-friends-info.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friends/check-friend",
+ "openimPath": "/sdk/uniapp/user/friends/check-friend",
+ "title": "Check friendship status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friends/check-friend.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friends/update-friends",
+ "openimPath": "/sdk/uniapp/user/friends/update-friends",
+ "title": "Update friend information",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friends/update-friends.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friends/delete-friend",
+ "openimPath": "/sdk/uniapp/user/friends/delete-friend",
+ "title": "Delete a friend",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friends/delete-friend.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/add-friend",
+ "openimPath": "/sdk/uniapp/user/friend-applications/add-friend",
+ "title": "Send a friend application",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/add-friend.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "openimPath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "title": "Get received friend applications",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant",
+ "openimPath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant",
+ "title": "Get sent friend applications",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count",
+ "openimPath": "/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count",
+ "title": "Get pending application count",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/accept-friend-application",
+ "openimPath": "/sdk/uniapp/user/friend-applications/accept-friend-application",
+ "title": "Accept a friend application",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/accept-friend-application.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/refuse-friend-application",
+ "openimPath": "/sdk/uniapp/user/friend-applications/refuse-friend-application",
+ "title": "Reject a friend application",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/refuse-friend-application.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/friend-applications/delete-friend-requests",
+ "openimPath": "/sdk/uniapp/user/friend-applications/delete-friend-requests",
+ "title": "Delete friend applications",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/friend-applications/delete-friend-requests.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/blacklist/get-black-list",
+ "openimPath": "/sdk/uniapp/user/blacklist/get-black-list",
+ "title": "Get the blacklist",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/blacklist/get-black-list.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/blacklist/add-black",
+ "openimPath": "/sdk/uniapp/user/blacklist/add-black",
+ "title": "Add a user to the blacklist",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/blacklist/add-black.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/user/blacklist/remove-black",
+ "openimPath": "/sdk/uniapp/user/blacklist/remove-black",
+ "title": "Remove a user from the blacklist",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/user/blacklist/remove-black.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/overview-conversation",
+ "openimPath": "/sdk/uniapp/conversation/overview-conversation",
+ "title": "Conversation overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/overview-conversation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target",
+ "openimPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target",
+ "title": "Open a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id",
+ "openimPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id",
+ "title": "Resolve a conversation ID",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id",
+ "openimPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id",
+ "title": "Get conversations by ID",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "openimPath": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "title": "Get the conversation list",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/retrieving-conversations/search-conversations",
+ "openimPath": "/sdk/uniapp/conversation/retrieving-conversations/search-conversations",
+ "title": "Search conversations",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/retrieving-conversations/search-conversations.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/pin-conversation",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/pin-conversation",
+ "title": "Pin or unpin a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/pin-conversation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation",
+ "title": "Mark or unmark a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-remark",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-remark",
+ "title": "Set a conversation remark",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-remark.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-extension",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-extension",
+ "title": "Set conversation extra data",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-extension.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-draft",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-draft",
+ "title": "Set a conversation draft",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-conversation-draft.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-message-receive-option",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-message-receive-option",
+ "title": "Set conversation message reception",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-receive-option.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/clear-group-mentions",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/clear-group-mentions",
+ "title": "Reset group mention status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-group-mentions.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "title": "Mark a conversation as read",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-conversation-read.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read",
+ "title": "Mark all conversations as read",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "title": "Track the total unread count",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/get-total-unread-count.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-private-chat",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-private-chat",
+ "title": "Enable or disable burn after reading",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-private-chat.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-burn-duration",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-burn-duration",
+ "title": "Set the burn duration",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-burn-duration.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/set-message-destruct",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/set-message-destruct",
+ "title": "Schedule server message deletion",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/set-message-destruct.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/hide-a-conversation",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/hide-a-conversation",
+ "title": "Hide a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-a-conversation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/hide-all-conversations",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/hide-all-conversations",
+ "title": "Hide all conversations",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/hide-all-conversations.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation",
+ "title": "Delete a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages",
+ "title": "Delete a conversation and its messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages",
+ "title": "Clear messages in a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "title": "Conversation group overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group",
+ "title": "Create a conversation group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups",
+ "title": "Get conversation groups",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations",
+ "title": "Get conversations in a group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id",
+ "title": "getConversationGroupByConversationID",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group",
+ "title": "Update a conversation group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order",
+ "title": "Reorder conversation groups",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups",
+ "title": "Add conversations to groups",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups",
+ "title": "Remove conversations from groups",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group",
+ "openimPath": "/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group",
+ "title": "Delete a conversation group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/overview-group",
+ "openimPath": "/sdk/uniapp/group/overview-group",
+ "title": "Group overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/overview-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/create-group",
+ "openimPath": "/sdk/uniapp/group/create-group",
+ "title": "Create a group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/create-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/update-group-profile",
+ "openimPath": "/sdk/uniapp/group/update-group-profile",
+ "title": "Update group profile",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/update-group-profile.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/set-group-announcement",
+ "openimPath": "/sdk/uniapp/group/set-group-announcement",
+ "title": "Publish a group announcement",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/set-group-announcement.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/set-group-extension",
+ "openimPath": "/sdk/uniapp/group/set-group-extension",
+ "title": "Set group extra data",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/set-group-extension.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/set-group-join-verification",
+ "openimPath": "/sdk/uniapp/group/set-group-join-verification",
+ "title": "Set group join verification",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/set-group-join-verification.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/set-group-member-profile-access",
+ "openimPath": "/sdk/uniapp/group/set-group-member-profile-access",
+ "title": "Set member profile access",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/set-group-member-profile-access.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/set-group-member-friend-permission",
+ "openimPath": "/sdk/uniapp/group/set-group-member-friend-permission",
+ "title": "Set member friend request permission",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/set-group-member-friend-permission.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/change-group-mute",
+ "openimPath": "/sdk/uniapp/group/change-group-mute",
+ "title": "Change group mute status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/change-group-mute.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/join-group",
+ "openimPath": "/sdk/uniapp/group/join-group",
+ "title": "Apply to join a group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/join-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/quit-group",
+ "openimPath": "/sdk/uniapp/group/quit-group",
+ "title": "Leave a group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/quit-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/dismiss-group",
+ "openimPath": "/sdk/uniapp/group/dismiss-group",
+ "title": "Dismiss a group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/dismiss-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-groups/get-specified-groups-info",
+ "openimPath": "/sdk/uniapp/group/retrieving-groups/get-specified-groups-info",
+ "title": "Get group information",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-groups/get-specified-groups-info.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list",
+ "openimPath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list",
+ "title": "Get joined groups",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page",
+ "openimPath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page",
+ "title": "Get joined groups by page",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-groups/is-join-group",
+ "openimPath": "/sdk/uniapp/group/retrieving-groups/is-join-group",
+ "title": "Check group membership",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-groups/is-join-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-groups/search-groups",
+ "openimPath": "/sdk/uniapp/group/retrieving-groups/search-groups",
+ "title": "Search groups",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-groups/search-groups.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "openimPath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "title": "Get received group applications",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant",
+ "openimPath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant",
+ "title": "Get sent group applications",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/get-group-application-unhandled-count",
+ "openimPath": "/sdk/uniapp/group/group-applications/get-group-application-unhandled-count",
+ "title": "Get the pending group application count",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/get-group-application-unhandled-count.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/observe-group-application-badge-count",
+ "openimPath": "/sdk/uniapp/group/group-applications/observe-group-application-badge-count",
+ "title": "Get the group application badge count",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/observe-group-application-badge-count.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/accept-group-application",
+ "openimPath": "/sdk/uniapp/group/group-applications/accept-group-application",
+ "title": "Accept a group application",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/accept-group-application.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/refuse-group-application",
+ "openimPath": "/sdk/uniapp/group/group-applications/refuse-group-application",
+ "title": "Reject a group application",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/refuse-group-application.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/group-applications/delete-group-requests",
+ "openimPath": "/sdk/uniapp/group/group-applications/delete-group-requests",
+ "title": "Delete group applications",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/group-applications/delete-group-requests.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "openimPath": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "title": "List group members",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-group-member-list.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info",
+ "openimPath": "/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info",
+ "title": "Get specified group member profiles",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-group-members/get-users-in-group",
+ "openimPath": "/sdk/uniapp/group/retrieving-group-members/get-users-in-group",
+ "title": "Check group membership",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-group-members/get-users-in-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/retrieving-group-members/search-group-members",
+ "openimPath": "/sdk/uniapp/group/retrieving-group-members/search-group-members",
+ "title": "Search group members",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/retrieving-group-members/search-group-members.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/invite-user-to-group",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/invite-user-to-group",
+ "title": "Invite users to a group",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/invite-user-to-group.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/kick-group-member",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/kick-group-member",
+ "title": "Remove group members",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/kick-group-member.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/set-group-member-nickname",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/set-group-member-nickname",
+ "title": "Update a member’s group nickname",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-nickname.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/set-group-member-role-level",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/set-group-member-role-level",
+ "title": "Manage group administrators",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-role-level.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/set-group-member-avatar",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/set-group-member-avatar",
+ "title": "Update a group member’s avatar",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-avatar.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/set-group-member-extension",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/set-group-member-extension",
+ "title": "Set a group member extension",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/set-group-member-extension.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/transfer-group-owner",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/transfer-group-owner",
+ "title": "Transfer group ownership",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/transfer-group-owner.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/managing-group-members/change-group-member-mute",
+ "openimPath": "/sdk/uniapp/group/managing-group-members/change-group-member-mute",
+ "title": "Mute or unmute a group member",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/managing-group-members/change-group-member-mute.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/group/check-full-sync-state",
+ "openimPath": "/sdk/uniapp/group/check-full-sync-state",
+ "title": "Check group full-sync state",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/group/check-full-sync-state.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/overview-message",
+ "openimPath": "/sdk/uniapp/message/overview-message",
+ "title": "Message overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/overview-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-text-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-text-message",
+ "title": "Create a text message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-text-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-text-at-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-text-at-message",
+ "title": "Create an @ message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-text-at-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-custom-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-custom-message",
+ "title": "Create a custom message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-custom-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-image-message-from-full-path",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-image-message-from-full-path",
+ "title": "Create an image message from a file",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-from-full-path.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-image-message-by-url",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-image-message-by-url",
+ "title": "Create an image message from a URL",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-image-message-by-url.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path",
+ "title": "Create an audio message from a file",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-sound-message-by-url",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-sound-message-by-url",
+ "title": "Create an audio message from a URL",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-sound-message-by-url.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-video-message-from-full-path",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-video-message-from-full-path",
+ "title": "Create a video message from files",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-from-full-path.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-video-message-by-url",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-video-message-by-url",
+ "title": "Create a video message from URLs",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-video-message-by-url.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-file-message-from-full-path",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-file-message-from-full-path",
+ "title": "Create a file message from a file",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-from-full-path.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-file-message-by-url",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-file-message-by-url",
+ "title": "Create a file message from a URL",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-file-message-by-url.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-card-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-card-message",
+ "title": "Create a contact card message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-card-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-location-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-location-message",
+ "title": "Create a location message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-location-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-face-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-face-message",
+ "title": "Create an emoji message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-face-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-quote-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-quote-message",
+ "title": "Create a reply message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-quote-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-markdown-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-markdown-message",
+ "title": "Create a Markdown message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-markdown-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-forward-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-forward-message",
+ "title": "Create a forwarded message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-forward-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/creating-messages/create-merger-message",
+ "openimPath": "/sdk/uniapp/message/creating-messages/create-merger-message",
+ "title": "Create a merged forward message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/creating-messages/create-merger-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/sending-messages/send-message",
+ "openimPath": "/sdk/uniapp/message/sending-messages/send-message",
+ "title": "Send a message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/sending-messages/send-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/sending-messages/send-message-not-oss",
+ "openimPath": "/sdk/uniapp/message/sending-messages/send-message-not-oss",
+ "title": "Send an uploaded media message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/sending-messages/send-message-not-oss.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "openimPath": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "title": "Receive messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/receiving-messages/receive-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "openimPath": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "title": "Receive custom business messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/receiving-messages/receive-custom-business-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/retrieving-messages/load-older-messages",
+ "openimPath": "/sdk/uniapp/message/retrieving-messages/load-older-messages",
+ "title": "Load message history",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/retrieving-messages/load-older-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/retrieving-messages/find-messages-by-id",
+ "openimPath": "/sdk/uniapp/message/retrieving-messages/find-messages-by-id",
+ "title": "Find messages by ID",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/retrieving-messages/find-messages-by-id.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/retrieving-messages/load-message-context",
+ "openimPath": "/sdk/uniapp/message/retrieving-messages/load-message-context",
+ "title": "Load message context",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/retrieving-messages/load-message-context.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/searching-messages/search-messages",
+ "openimPath": "/sdk/uniapp/message/searching-messages/search-messages",
+ "title": "Search messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/searching-messages/search-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "openimPath": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "title": "Report typing status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/composing-messages/update-typing-status.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/composing-messages/get-typing-status",
+ "openimPath": "/sdk/uniapp/message/composing-messages/get-typing-status",
+ "title": "Get typing status",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/composing-messages/get-typing-status.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/composing-messages/check-speech-to-text",
+ "openimPath": "/sdk/uniapp/message/composing-messages/check-speech-to-text",
+ "title": "Check audio transcription availability",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/composing-messages/check-speech-to-text.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/composing-messages/transcribe-audio",
+ "openimPath": "/sdk/uniapp/message/composing-messages/transcribe-audio",
+ "title": "Transcribe audio",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/composing-messages/transcribe-audio.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/composing-messages/save-local-transcript",
+ "openimPath": "/sdk/uniapp/message/composing-messages/save-local-transcript",
+ "title": "Save a local transcript",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/composing-messages/save-local-transcript.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/composing-messages/translate-text-and-messages",
+ "openimPath": "/sdk/uniapp/message/composing-messages/translate-text-and-messages",
+ "title": "Translate text and messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/composing-messages/translate-text-and-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/delete-local-message",
+ "openimPath": "/sdk/uniapp/message/managing-messages/delete-local-message",
+ "title": "Delete a local message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/delete-local-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "openimPath": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "title": "Delete messages in a batch",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/delete-saved-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "openimPath": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "title": "Delete all messages from a user in a group chat",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/delete-user-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "openimPath": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "title": "Revoke a message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/revoke-a-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "openimPath": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "title": "Modify a message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/modify-a-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/get-pinned-messages",
+ "openimPath": "/sdk/uniapp/message/managing-messages/get-pinned-messages",
+ "title": "Get pinned messages in a conversation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/get-pinned-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "openimPath": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "title": "Pin or unpin a message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/set-message-pinned.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/insert-local-single-message",
+ "openimPath": "/sdk/uniapp/message/managing-messages/insert-local-single-message",
+ "title": "Insert a local one-to-one message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-single-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/insert-local-group-message",
+ "openimPath": "/sdk/uniapp/message/managing-messages/insert-local-group-message",
+ "title": "Insert a local group message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/insert-local-group-message.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/clear-all-local-messages",
+ "openimPath": "/sdk/uniapp/message/managing-messages/clear-all-local-messages",
+ "title": "Clear all local messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-local-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/clear-all-messages",
+ "openimPath": "/sdk/uniapp/message/managing-messages/clear-all-messages",
+ "title": "Clear local and server messages",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/clear-all-messages.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-messages/set-message-local-ex",
+ "openimPath": "/sdk/uniapp/message/managing-messages/set-message-local-ex",
+ "title": "Set a local message extension",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-messages/set-message-local-ex.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "openimPath": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "title": "Report group messages as read",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-read-status/send-group-read-receipts.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/message/managing-read-status/get-group-message-readers",
+ "openimPath": "/sdk/uniapp/message/managing-read-status/get-group-message-readers",
+ "title": "Get members who read a group message",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/message/managing-read-status/get-group-message-readers.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/file-uploads/upload-file",
+ "openimPath": "/sdk/uniapp/file-uploads/upload-file",
+ "title": "Upload a file",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/file-uploads/upload-file.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/overview-calling",
+ "openimPath": "/sdk/uniapp/calling/overview-calling",
+ "title": "Audio and video calling overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/overview-calling.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/start-single-call",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/start-single-call",
+ "title": "Start a one-to-one call",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/start-single-call.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/start-group-call",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/start-group-call",
+ "title": "Start a group call",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/start-group-call.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/accept-call",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/accept-call",
+ "title": "Accept a call",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/accept-call.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/reject-call",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/reject-call",
+ "title": "Reject a call",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/reject-call.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/cancel-call",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/cancel-call",
+ "title": "Cancel a call invitation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/cancel-call.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/hang-up-call",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/hang-up-call",
+ "title": "End a call",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/hang-up-call.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "openimPath": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "title": "Handle call events",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/managing-calls/handle-call-events.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation",
+ "openimPath": "/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation",
+ "title": "Restore a pending call invitation",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id",
+ "openimPath": "/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id",
+ "title": "Get a group call room",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id",
+ "openimPath": "/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id",
+ "title": "Get a call room token",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "openimPath": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "title": "Send a custom signal",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/events/overview-events",
+ "openimPath": "/sdk/uniapp/events/overview-events",
+ "title": "Events overview",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/events/overview-events.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/events/handle-data-migration-events",
+ "openimPath": "/sdk/uniapp/events/handle-data-migration-events",
+ "title": "Handle data migration events",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/events/handle-data-migration-events.mdx"
+ },
+ {
+ "sourcePath": "/sdk/uniapp/logger",
+ "openimPath": "/sdk/uniapp/logger",
+ "title": "Logging",
+ "context": "chat/sdk/uniapp",
+ "template": "guide",
+ "contentFile": "content/docs/chat/sdk/uniapp/logger.mdx"
+ },
{
"sourcePath": "/sdk/electron/overview",
"openimPath": "/sdk/electron/overview",
diff --git a/data/structure/report.json b/data/structure/report.json
index 4baacf47d5..4724338fc5 100644
--- a/data/structure/report.json
+++ b/data/structure/report.json
@@ -1,21 +1,21 @@
{
- "generatedAt": "2026-08-04T09:27:31.347Z",
+ "generatedAt": "2026-08-13T04:59:19.646Z",
"scope": "current-only",
- "pageCount": 813,
- "contextCount": 9,
+ "pageCount": 983,
+ "contextCount": 10,
"byProduct": {
"platform-api": 194,
- "sdk": 619
+ "sdk": 789
},
"byTemplate": {
"api": 179,
- "guide": 612,
+ "guide": 782,
"overview": 22
},
"byStatus": {
- "draft": 2,
- "published": 682,
- "scaffold": 129
+ "draft": 1,
+ "published": 854,
+ "scaffold": 128
},
"contexts": [
{
@@ -31,7 +31,7 @@
{
"key": "chat/sdk/android",
"title": "SDKs · Android · v4",
- "pageCount": 129
+ "pageCount": 128
},
{
"key": "chat/sdk/flutter",
@@ -40,13 +40,13 @@
},
{
"key": "chat/sdk/uniapp",
- "title": "SDKs · uni-app · v4",
- "pageCount": 1
+ "title": "SDKs · uni-app / uni-app x · v4",
+ "pageCount": 167
},
{
"key": "chat/sdk/wasm",
"title": "SDKs · WASM · v4",
- "pageCount": 161
+ "pageCount": 165
},
{
"key": "chat/sdk/electron",
@@ -62,6 +62,11 @@
"key": "chat/sdk/react-native",
"title": "SDKs · React Native · v4",
"pageCount": 1
+ },
+ {
+ "key": "chat/sdk/common",
+ "title": "SDKs · Common reference · v4",
+ "pageCount": 1
}
]
}
diff --git a/data/structure/uniapp-api-ownership.json b/data/structure/uniapp-api-ownership.json
new file mode 100644
index 0000000000..404e844b14
--- /dev/null
+++ b/data/structure/uniapp-api-ownership.json
@@ -0,0 +1,7267 @@
+{
+ "schemaVersion": 1,
+ "manifestSha256": "37b21a68b6dd008e73d4ee4e23d0d1e0bd25f3a06f8f629ddba72fc91b647b54",
+ "callables": [
+ {
+ "id": 2001,
+ "name": "off",
+ "signature": "off(subscription:OpenIMSDKEventSubscription):void",
+ "role": "event-control",
+ "completion": "void",
+ "responseCodec": "void",
+ "responseSchema": {
+ "kind": "void"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 2002,
+ "name": "offAll",
+ "signature": "offAll(eventName:OpenIMSDKEventName):void",
+ "role": "event-control",
+ "completion": "void",
+ "responseCodec": "void",
+ "responseSchema": {
+ "kind": "void"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 2003,
+ "name": "onConnecting",
+ "signature": "onConnecting(handler:OpenIMVoidEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2004,
+ "name": "onConnectSuccess",
+ "signature": "onConnectSuccess(handler:OpenIMVoidEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2005,
+ "name": "onConnectFailed",
+ "signature": "onConnectFailed(handler:OpenIMErrorEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2006,
+ "name": "onKickedOffline",
+ "signature": "onKickedOffline(handler:OpenIMVoidEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2007,
+ "name": "onUserTokenExpired",
+ "signature": "onUserTokenExpired(handler:OpenIMVoidEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2008,
+ "name": "onUserTokenInvalid",
+ "signature": "onUserTokenInvalid(handler:OpenIMErrorEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2009,
+ "name": "onRecvNewMessage",
+ "signature": "onRecvNewMessage(handler:OpenIMMessageEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2010,
+ "name": "onRecvOfflineNewMessage",
+ "signature": "onRecvOfflineNewMessage(handler:OpenIMMessageEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2011,
+ "name": "onRecvOnlineOnlyMessage",
+ "signature": "onRecvOnlineOnlyMessage(handler:OpenIMMessageEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2012,
+ "name": "onMsgDeleted",
+ "signature": "onMsgDeleted(handler:OpenIMMessageEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2013,
+ "name": "onNewRecvMessageRevoked",
+ "signature": "onNewRecvMessageRevoked(handler:OpenIMMessageRevokedEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2014,
+ "name": "onRecvC2CReadReceipt",
+ "signature": "onRecvC2CReadReceipt(handler:OpenIMMessageReceiptListEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "disposition": "documented"
+ },
+ {
+ "id": 2015,
+ "name": "onRecvNewMessages",
+ "signature": "onRecvNewMessages(handler:OpenIMMessageListEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2016,
+ "name": "onRecvOfflineNewMessages",
+ "signature": "onRecvOfflineNewMessages(handler:OpenIMMessageListEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2017,
+ "name": "onConversationChanged",
+ "signature": "onConversationChanged(handler:OpenIMConversationListEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2018,
+ "name": "onConversationUserInputStatusChanged",
+ "signature": "onConversationUserInputStatusChanged(handler:OpenIMConversationInputStatusEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2019,
+ "name": "onNewConversation",
+ "signature": "onNewConversation(handler:OpenIMConversationListEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2020,
+ "name": "onSyncServerFailed",
+ "signature": "onSyncServerFailed(handler:OpenIMBooleanEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 2021,
+ "name": "onSyncServerFinish",
+ "signature": "onSyncServerFinish(handler:OpenIMBooleanEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 2022,
+ "name": "onSyncServerProgress",
+ "signature": "onSyncServerProgress(handler:OpenIMNumberEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 2023,
+ "name": "onSyncServerStart",
+ "signature": "onSyncServerStart(handler:OpenIMBooleanEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 2024,
+ "name": "onSendMessageProgress",
+ "signature": "onSendMessageProgress(handler:OpenIMSendMessageProgressEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/overview-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2025,
+ "name": "onUploadFileProgress",
+ "signature": "onUploadFileProgress(handler:OpenIMUploadFileProgressEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/overview-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2026,
+ "name": "onUploadLogsProgress",
+ "signature": "onUploadLogsProgress(handler:OpenIMUploadLogsProgressEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/overview-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2027,
+ "name": "onTotalUnreadMessageCountChanged",
+ "signature": "onTotalUnreadMessageCountChanged(handler:OpenIMNumberEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "disposition": "documented"
+ },
+ {
+ "id": 2028,
+ "name": "onRecvCustomBusinessMessage",
+ "signature": "onRecvCustomBusinessMessage(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2029,
+ "name": "onBlackAdded",
+ "signature": "onBlackAdded(handler:OpenIMBlackUserEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/blacklist/get-black-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2030,
+ "name": "onBlackDeleted",
+ "signature": "onBlackDeleted(handler:OpenIMBlackUserEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/blacklist/get-black-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2031,
+ "name": "onFriendAdded",
+ "signature": "onFriendAdded(handler:OpenIMFriendEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented"
+ },
+ {
+ "id": 2032,
+ "name": "onFriendApplicationAccepted",
+ "signature": "onFriendApplicationAccepted(handler:OpenIMFriendApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2033,
+ "name": "onFriendApplicationAdded",
+ "signature": "onFriendApplicationAdded(handler:OpenIMFriendApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2034,
+ "name": "onFriendApplicationDeleted",
+ "signature": "onFriendApplicationDeleted(handler:OpenIMFriendApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2035,
+ "name": "onFriendApplicationRejected",
+ "signature": "onFriendApplicationRejected(handler:OpenIMFriendApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2036,
+ "name": "onFriendDeleted",
+ "signature": "onFriendDeleted(handler:OpenIMFriendEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented"
+ },
+ {
+ "id": 2037,
+ "name": "onFriendInfoChanged",
+ "signature": "onFriendInfoChanged(handler:OpenIMFriendEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented"
+ },
+ {
+ "id": 2038,
+ "name": "onGroupApplicationAccepted",
+ "signature": "onGroupApplicationAccepted(handler:OpenIMGroupApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2039,
+ "name": "onGroupApplicationAdded",
+ "signature": "onGroupApplicationAdded(handler:OpenIMGroupApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2040,
+ "name": "onGroupApplicationDeleted",
+ "signature": "onGroupApplicationDeleted(handler:OpenIMGroupApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2041,
+ "name": "onGroupApplicationRejected",
+ "signature": "onGroupApplicationRejected(handler:OpenIMGroupApplicationEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2042,
+ "name": "onGroupDismissed",
+ "signature": "onGroupDismissed(handler:OpenIMGroupEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2043,
+ "name": "onGroupInfoChanged",
+ "signature": "onGroupInfoChanged(handler:OpenIMGroupEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2044,
+ "name": "onGroupMemberAdded",
+ "signature": "onGroupMemberAdded(handler:OpenIMGroupMemberEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2045,
+ "name": "onGroupMemberDeleted",
+ "signature": "onGroupMemberDeleted(handler:OpenIMGroupMemberEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2046,
+ "name": "onGroupMemberInfoChanged",
+ "signature": "onGroupMemberInfoChanged(handler:OpenIMGroupMemberEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2047,
+ "name": "onJoinedGroupAdded",
+ "signature": "onJoinedGroupAdded(handler:OpenIMGroupEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2048,
+ "name": "onJoinedGroupDeleted",
+ "signature": "onJoinedGroupDeleted(handler:OpenIMGroupEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2049,
+ "name": "onSelfInfoUpdated",
+ "signature": "onSelfInfoUpdated(handler:OpenIMUserEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/profile/set-self-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2050,
+ "name": "onUserStatusChanged",
+ "signature": "onUserStatusChanged(handler:OpenIMUserStatusListEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2051,
+ "name": "initSDK",
+ "signature": "initSDK(config:OpenIMInitConfig,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "boolean",
+ "responseSchema": {
+ "kind": "boolean"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "disposition": "documented"
+ },
+ {
+ "id": 2052,
+ "name": "login",
+ "signature": "login(userID:string,token:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2053,
+ "name": "logout",
+ "signature": "logout(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2054,
+ "name": "getLoginStatus",
+ "signature": "getLoginStatus(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMLoginStatus",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMLoginStatus"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2055,
+ "name": "getLoginUserID",
+ "signature": "getLoginUserID(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2056,
+ "name": "getSdkVersion",
+ "signature": "getSdkVersion():string",
+ "role": "operation",
+ "completion": "sync",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "disposition": "documented"
+ },
+ {
+ "id": 2057,
+ "name": "getOpenIMDataPath",
+ "signature": "getOpenIMDataPath():string",
+ "role": "operation",
+ "completion": "sync",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "disposition": "documented"
+ },
+ {
+ "id": 2058,
+ "name": "unInitSDK",
+ "signature": "unInitSDK(operationID?:string|null):void",
+ "role": "operation",
+ "completion": "void",
+ "responseCodec": "void",
+ "responseSchema": {
+ "kind": "void"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "disposition": "documented"
+ },
+ {
+ "id": 2059,
+ "name": "getAllConversationList",
+ "signature": "getAllConversationList(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMConversationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMConversationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2060,
+ "name": "getOneConversation",
+ "signature": "getOneConversation(params:OpenIMGetOneConversationParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMConversationItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMConversationItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target",
+ "disposition": "documented"
+ },
+ {
+ "id": 2061,
+ "name": "getAdvancedHistoryMessageList",
+ "signature": "getAdvancedHistoryMessageList(params:OpenIMGetAdvancedHistoryMessageListParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMAdvancedHistoryMessageListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMAdvancedHistoryMessageListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/retrieving-messages/load-older-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2062,
+ "name": "getSpecifiedGroupsInfo",
+ "signature": "getSpecifiedGroupsInfo(params:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-groups/get-specified-groups-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2063,
+ "name": "deleteConversationAndDeleteAllMsg",
+ "signature": "deleteConversationAndDeleteAllMsg(conversationID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2064,
+ "name": "markConversationMessageAsRead",
+ "signature": "markConversationMessageAsRead(conversationID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "disposition": "documented"
+ },
+ {
+ "id": 2065,
+ "name": "getGroupMemberList",
+ "signature": "getGroupMemberList(params:OpenIMGetGroupMemberListParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupMemberListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupMemberListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2066,
+ "name": "setMessageLocalEx",
+ "signature": "setMessageLocalEx(params:OpenIMSetMessageLocalExParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/set-message-local-ex",
+ "disposition": "documented"
+ },
+ {
+ "id": 2067,
+ "name": "revokeMessage",
+ "signature": "revokeMessage(params:OpenIMMessageKeyParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2068,
+ "name": "setConversation",
+ "signature": "setConversation(params:OpenIMSetConversationParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/pin-conversation",
+ "disposition": "documented"
+ },
+ {
+ "id": 2069,
+ "name": "setAppBackgroundStatus",
+ "signature": "setAppBackgroundStatus(data:boolean,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2070,
+ "name": "setAppBadge",
+ "signature": "setAppBadge(appUnreadCount:number,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state",
+ "disposition": "documented"
+ },
+ {
+ "id": 2071,
+ "name": "networkStatusChanged",
+ "signature": "networkStatusChanged(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 2072,
+ "name": "getSelfUserInfo",
+ "signature": "getSelfUserInfo(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMUserInfo|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMUserInfo"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/profile/get-self-user-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2073,
+ "name": "getUsersInfo",
+ "signature": "getUsersInfo(data:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMUserListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMUserListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/profile/get-users-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2074,
+ "name": "setSelfInfo",
+ "signature": "setSelfInfo(data:OpenIMSetSelfInfoParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/profile/set-self-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2075,
+ "name": "deleteMessageFromLocalStorage",
+ "signature": "deleteMessageFromLocalStorage(params:OpenIMMessageKeyParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/delete-local-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2076,
+ "name": "deleteMessage",
+ "signature": "deleteMessage(params:OpenIMMessageKeyParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/delete-local-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2077,
+ "name": "deleteAllMsgFromLocal",
+ "signature": "deleteAllMsgFromLocal(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/clear-all-local-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2078,
+ "name": "deleteAllMsgFromLocalAndSvr",
+ "signature": "deleteAllMsgFromLocalAndSvr(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/clear-all-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2079,
+ "name": "insertSingleMessageToLocalStorage",
+ "signature": "insertSingleMessageToLocalStorage(params:OpenIMInsertSingleMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/insert-local-single-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2080,
+ "name": "insertGroupMessageToLocalStorage",
+ "signature": "insertGroupMessageToLocalStorage(params:OpenIMInsertGroupMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/insert-local-group-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2081,
+ "name": "changeInputStates",
+ "signature": "changeInputStates(params:OpenIMInputStateParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2082,
+ "name": "clearConversationAndDeleteAllMsg",
+ "signature": "clearConversationAndDeleteAllMsg(conversationID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2083,
+ "name": "hideConversation",
+ "signature": "hideConversation(conversationID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/hide-a-conversation",
+ "disposition": "documented"
+ },
+ {
+ "id": 2084,
+ "name": "hideAllConversations",
+ "signature": "hideAllConversations(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/hide-all-conversations",
+ "disposition": "documented"
+ },
+ {
+ "id": 2085,
+ "name": "markAllConversationMessageAsRead",
+ "signature": "markAllConversationMessageAsRead(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read",
+ "disposition": "documented"
+ },
+ {
+ "id": 2086,
+ "name": "searchConversation",
+ "signature": "searchConversation(searchParam:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMConversationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMConversationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/search-conversations",
+ "disposition": "documented"
+ },
+ {
+ "id": 2087,
+ "name": "getConversationListSplit",
+ "signature": "getConversationListSplit(params:OpenIMPageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMConversationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMConversationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2088,
+ "name": "getConversationIDBySessionType",
+ "signature": "getConversationIDBySessionType(params:OpenIMGetOneConversationParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id",
+ "disposition": "documented"
+ },
+ {
+ "id": 2089,
+ "name": "getMultipleConversation",
+ "signature": "getMultipleConversation(data:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMConversationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMConversationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id",
+ "disposition": "documented"
+ },
+ {
+ "id": 2090,
+ "name": "deleteConversation",
+ "signature": "deleteConversation(conversationID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/delete-conversation",
+ "disposition": "documented"
+ },
+ {
+ "id": 2091,
+ "name": "setConversationDraft",
+ "signature": "setConversationDraft(params:OpenIMSetConversationDraftParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/set-conversation-draft",
+ "disposition": "documented"
+ },
+ {
+ "id": 2092,
+ "name": "getTotalUnreadMsgCount",
+ "signature": "getTotalUnreadMsgCount(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "number",
+ "responseSchema": {
+ "kind": "number"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "disposition": "documented"
+ },
+ {
+ "id": 2093,
+ "name": "searchLocalMessages",
+ "signature": "searchLocalMessages(params:OpenIMSearchLocalMessagesParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSearchMessageResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSearchMessageResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/searching-messages/search-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 2094,
+ "name": "addFriend",
+ "signature": "addFriend(params:OpenIMAddFriendParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/add-friend",
+ "disposition": "documented"
+ },
+ {
+ "id": 2095,
+ "name": "searchFriends",
+ "signature": "searchFriends(params:OpenIMSearchFriendsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFriendListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFriendListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/search-friends",
+ "disposition": "documented"
+ },
+ {
+ "id": 2096,
+ "name": "getSpecifiedFriendsInfo",
+ "signature": "getSpecifiedFriendsInfo(params:OpenIMGetSpecifiedFriendsInfoParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFriendListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFriendListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/get-specified-friends-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2097,
+ "name": "getFriendApplicationListAsRecipient",
+ "signature": "getFriendApplicationListAsRecipient(params?:OpenIMApplicationListParams|null,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFriendApplicationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFriendApplicationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2098,
+ "name": "getFriendApplicationListAsApplicant",
+ "signature": "getFriendApplicationListAsApplicant(params?:OpenIMApplicationListParams|null,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFriendApplicationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFriendApplicationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant",
+ "disposition": "documented"
+ },
+ {
+ "id": 2099,
+ "name": "getFriendApplicationUnhandledCount",
+ "signature": "getFriendApplicationUnhandledCount(params:OpenIMPageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "number",
+ "responseSchema": {
+ "kind": "number"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count",
+ "disposition": "documented"
+ },
+ {
+ "id": 2100,
+ "name": "getFriendList",
+ "signature": "getFriendList(filterBlack?:boolean|null,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFriendListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFriendListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented"
+ },
+ {
+ "id": 2101,
+ "name": "getFriendListPage",
+ "signature": "getFriendListPage(params:OpenIMPageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFriendListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFriendListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented"
+ },
+ {
+ "id": 2102,
+ "name": "updateFriends",
+ "signature": "updateFriends(params:OpenIMUpdateFriendsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/update-friends",
+ "disposition": "documented"
+ },
+ {
+ "id": 2103,
+ "name": "checkFriend",
+ "signature": "checkFriend(data:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMCheckFriendResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMCheckFriendResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/check-friend",
+ "disposition": "documented"
+ },
+ {
+ "id": 2104,
+ "name": "acceptFriendApplication",
+ "signature": "acceptFriendApplication(params:OpenIMFriendApplicationHandleParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/accept-friend-application",
+ "disposition": "documented"
+ },
+ {
+ "id": 2105,
+ "name": "refuseFriendApplication",
+ "signature": "refuseFriendApplication(params:OpenIMFriendApplicationHandleParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/refuse-friend-application",
+ "disposition": "documented"
+ },
+ {
+ "id": 2106,
+ "name": "deleteFriend",
+ "signature": "deleteFriend(userID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/delete-friend",
+ "disposition": "documented"
+ },
+ {
+ "id": 2107,
+ "name": "addBlack",
+ "signature": "addBlack(params:OpenIMAddBlackParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/blacklist/add-black",
+ "disposition": "documented"
+ },
+ {
+ "id": 2108,
+ "name": "removeBlack",
+ "signature": "removeBlack(userID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/blacklist/remove-black",
+ "disposition": "documented"
+ },
+ {
+ "id": 2109,
+ "name": "getBlackList",
+ "signature": "getBlackList(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMBlackListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMBlackListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/blacklist/get-black-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2110,
+ "name": "inviteUserToGroup",
+ "signature": "inviteUserToGroup(params:OpenIMGroupInviteParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/managing-group-members/invite-user-to-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2111,
+ "name": "kickGroupMember",
+ "signature": "kickGroupMember(params:OpenIMGroupInviteParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/managing-group-members/kick-group-member",
+ "disposition": "documented"
+ },
+ {
+ "id": 2112,
+ "name": "isJoinGroup",
+ "signature": "isJoinGroup(groupID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "boolean",
+ "responseSchema": {
+ "kind": "boolean"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-groups/is-join-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2113,
+ "name": "getSpecifiedGroupMembersInfo",
+ "signature": "getSpecifiedGroupMembersInfo(params:OpenIMGroupUserListParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupMemberListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupMemberListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info",
+ "disposition": "documented"
+ },
+ {
+ "id": 2114,
+ "name": "getUsersInGroup",
+ "signature": "getUsersInGroup(params:OpenIMGroupUserListParams,operationID?:string|null):Promise|null>",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:Array|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "array",
+ "items": {
+ "kind": "string"
+ }
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-users-in-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2115,
+ "name": "searchGroupMembers",
+ "signature": "searchGroupMembers(params:OpenIMSearchGroupMembersParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupMemberListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupMemberListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-group-members/search-group-members",
+ "disposition": "documented"
+ },
+ {
+ "id": 2116,
+ "name": "getJoinedGroupList",
+ "signature": "getJoinedGroupList(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 2117,
+ "name": "getJoinedGroupListPage",
+ "signature": "getJoinedGroupListPage(params:OpenIMPageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page",
+ "disposition": "documented"
+ },
+ {
+ "id": 2118,
+ "name": "createGroup",
+ "signature": "createGroup(params:OpenIMCreateGroupParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/create-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2119,
+ "name": "setGroupInfo",
+ "signature": "setGroupInfo(params:OpenIMSetGroupInfoParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/update-group-profile",
+ "disposition": "documented"
+ },
+ {
+ "id": 2120,
+ "name": "setGroupMemberInfo",
+ "signature": "setGroupMemberInfo(params:OpenIMSetGroupMemberInfoParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/managing-group-members/set-group-member-nickname",
+ "disposition": "documented"
+ },
+ {
+ "id": 2121,
+ "name": "joinGroup",
+ "signature": "joinGroup(params:OpenIMJoinGroupParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/join-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2122,
+ "name": "searchGroups",
+ "signature": "searchGroups(params:OpenIMSearchGroupsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/retrieving-groups/search-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 2123,
+ "name": "quitGroup",
+ "signature": "quitGroup(groupID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/quit-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2124,
+ "name": "dismissGroup",
+ "signature": "dismissGroup(groupID:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/dismiss-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 2125,
+ "name": "changeGroupMute",
+ "signature": "changeGroupMute(params:OpenIMChangeGroupMuteParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/change-group-mute",
+ "disposition": "documented"
+ },
+ {
+ "id": 2126,
+ "name": "changeGroupMemberMute",
+ "signature": "changeGroupMemberMute(params:OpenIMChangeGroupMemberMuteParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/managing-group-members/change-group-member-mute",
+ "disposition": "documented"
+ },
+ {
+ "id": 2127,
+ "name": "transferGroupOwner",
+ "signature": "transferGroupOwner(params:OpenIMTransferGroupOwnerParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/managing-group-members/transfer-group-owner",
+ "disposition": "documented"
+ },
+ {
+ "id": 2128,
+ "name": "getGroupApplicationListAsApplicant",
+ "signature": "getGroupApplicationListAsApplicant(params?:OpenIMApplicationListParams|null,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupApplicationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupApplicationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant",
+ "disposition": "documented"
+ },
+ {
+ "id": 2129,
+ "name": "getGroupApplicationListAsRecipient",
+ "signature": "getGroupApplicationListAsRecipient(params?:OpenIMApplicationListParams|null,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGroupApplicationListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGroupApplicationListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented"
+ },
+ {
+ "id": 2130,
+ "name": "getGroupApplicationUnhandledCount",
+ "signature": "getGroupApplicationUnhandledCount(params:OpenIMPageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "number",
+ "responseSchema": {
+ "kind": "number"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-unhandled-count",
+ "disposition": "documented"
+ },
+ {
+ "id": 2131,
+ "name": "acceptGroupApplication",
+ "signature": "acceptGroupApplication(params:OpenIMGroupApplicationHandleParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/accept-group-application",
+ "disposition": "documented"
+ },
+ {
+ "id": 2132,
+ "name": "refuseGroupApplication",
+ "signature": "refuseGroupApplication(params:OpenIMGroupApplicationHandleParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/refuse-group-application",
+ "disposition": "documented"
+ },
+ {
+ "id": 2133,
+ "name": "findMessageList",
+ "signature": "findMessageList(params:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFindMessageResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFindMessageResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/retrieving-messages/find-messages-by-id",
+ "disposition": "documented"
+ },
+ {
+ "id": 2134,
+ "name": "updateFcmToken",
+ "signature": "updateFcmToken(params:OpenIMUpdateFcmTokenParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state",
+ "disposition": "documented"
+ },
+ {
+ "id": 2135,
+ "name": "subscribeUsersStatus",
+ "signature": "subscribeUsersStatus(data:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2136,
+ "name": "unsubscribeUsersStatus",
+ "signature": "unsubscribeUsersStatus(data:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/online-status/unsubscribe-users-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2137,
+ "name": "getUserStatus",
+ "signature": "getUserStatus(data:Array,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMUserStatusListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMUserStatusListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2138,
+ "name": "getSubscribeUsersStatus",
+ "signature": "getSubscribeUsersStatus(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMUserStatusListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMUserStatusListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/online-status/get-subscribe-users-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 2139,
+ "name": "createTextMessage",
+ "signature": "createTextMessage(text:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-text-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2140,
+ "name": "createImageMessageFromFullPath",
+ "signature": "createImageMessageFromFullPath(imageFullPath:string,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-image-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 2141,
+ "name": "createImageMessageByURL",
+ "signature": "createImageMessageByURL(params:OpenIMPictureElem,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-image-message-by-url",
+ "disposition": "documented"
+ },
+ {
+ "id": 2142,
+ "name": "createCustomMessage",
+ "signature": "createCustomMessage(params:OpenIMCreateCustomMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-custom-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2143,
+ "name": "createQuoteMessage",
+ "signature": "createQuoteMessage(params:OpenIMCreateQuoteMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-quote-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2144,
+ "name": "createAdvancedQuoteMessage",
+ "signature": "createAdvancedQuoteMessage(params:OpenIMCreateAdvancedQuoteMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-quote-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2145,
+ "name": "createAdvancedTextMessage",
+ "signature": "createAdvancedTextMessage(params:OpenIMCreateAdvancedTextMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-custom-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2146,
+ "name": "createTextAtMessage",
+ "signature": "createTextAtMessage(params:OpenIMCreateTextAtMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-text-at-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2147,
+ "name": "createSoundMessageFromFullPath",
+ "signature": "createSoundMessageFromFullPath(params:OpenIMCreateSoundMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 2148,
+ "name": "createSoundMessageByURL",
+ "signature": "createSoundMessageByURL(params:OpenIMSoundElem,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-sound-message-by-url",
+ "disposition": "documented"
+ },
+ {
+ "id": 2149,
+ "name": "createVideoMessageFromFullPath",
+ "signature": "createVideoMessageFromFullPath(params:OpenIMCreateVideoMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-video-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 2150,
+ "name": "createVideoMessageByURL",
+ "signature": "createVideoMessageByURL(params:OpenIMVideoElem,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-video-message-by-url",
+ "disposition": "documented"
+ },
+ {
+ "id": 2151,
+ "name": "createFileMessageFromFullPath",
+ "signature": "createFileMessageFromFullPath(params:OpenIMCreateFileMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-file-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 2152,
+ "name": "createFileMessageByURL",
+ "signature": "createFileMessageByURL(params:OpenIMFileElem,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-file-message-by-url",
+ "disposition": "documented"
+ },
+ {
+ "id": 2153,
+ "name": "createMergerMessage",
+ "signature": "createMergerMessage(params:OpenIMCreateMergerMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-merger-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2154,
+ "name": "createForwardMessage",
+ "signature": "createForwardMessage(message:OpenIMMessageItem,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-forward-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2155,
+ "name": "createFaceMessage",
+ "signature": "createFaceMessage(params:OpenIMCreateFaceMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-face-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2156,
+ "name": "createLocationMessage",
+ "signature": "createLocationMessage(params:OpenIMCreateLocationMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-location-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2157,
+ "name": "createCardMessage",
+ "signature": "createCardMessage(card:OpenIMCardElem,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-card-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2158,
+ "name": "sendMessage",
+ "signature": "sendMessage(options:OpenIMSendMessageOptions):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/sending-messages/send-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 2159,
+ "name": "sendMessageNotOss",
+ "signature": "sendMessageNotOss(options:OpenIMSendMessageOptions):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/sending-messages/send-message-not-oss",
+ "disposition": "documented"
+ },
+ {
+ "id": 2160,
+ "name": "uploadFile",
+ "signature": "uploadFile(params:OpenIMUploadFileParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMUploadFileResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMUploadFileResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/file-uploads/upload-file",
+ "disposition": "documented"
+ },
+ {
+ "id": 2161,
+ "name": "uploadLogs",
+ "signature": "uploadLogs(params:OpenIMUploadLogsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/logger",
+ "disposition": "documented"
+ },
+ {
+ "id": 200002,
+ "name": "onChangedPinnedMsg",
+ "signature": "onChangedPinnedMsg(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "disposition": "documented"
+ },
+ {
+ "id": 200003,
+ "name": "onDeleteUserAllMsgsInConv",
+ "signature": "onDeleteUserAllMsgsInConv(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200004,
+ "name": "onMessageModified",
+ "signature": "onMessageModified(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 200005,
+ "name": "onMessageEdited",
+ "signature": "onMessageEdited(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 200006,
+ "name": "onRecvGroupReadReceipt",
+ "signature": "onRecvGroupReadReceipt(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "disposition": "documented"
+ },
+ {
+ "id": 200007,
+ "name": "onRecvMessageExtensionsAdded",
+ "signature": "onRecvMessageExtensionsAdded(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200008,
+ "name": "onRecvMessageExtensionsChanged",
+ "signature": "onRecvMessageExtensionsChanged(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200009,
+ "name": "onRecvMessageExtensionsDeleted",
+ "signature": "onRecvMessageExtensionsDeleted(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200010,
+ "name": "onConversationGroupAdded",
+ "signature": "onConversationGroupAdded(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200011,
+ "name": "onConversationGroupChanged",
+ "signature": "onConversationGroupChanged(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200012,
+ "name": "onConversationGroupDeleted",
+ "signature": "onConversationGroupDeleted(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200013,
+ "name": "onConversationGroupMemberAdded",
+ "signature": "onConversationGroupMemberAdded(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200014,
+ "name": "onConversationGroupMemberDeleted",
+ "signature": "onConversationGroupMemberDeleted(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200015,
+ "name": "onGroupApplicationBadgeCountChanged",
+ "signature": "onGroupApplicationBadgeCountChanged(handler:OpenIMNumberEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/observe-group-application-badge-count",
+ "disposition": "documented"
+ },
+ {
+ "id": 200016,
+ "name": "onReceiveNewInvitation",
+ "signature": "onReceiveNewInvitation(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200017,
+ "name": "onInviteeAccepted",
+ "signature": "onInviteeAccepted(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200018,
+ "name": "onInviteeAcceptedByOtherDevice",
+ "signature": "onInviteeAcceptedByOtherDevice(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200019,
+ "name": "onInviteeRejected",
+ "signature": "onInviteeRejected(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200020,
+ "name": "onInviteeRejectedByOtherDevice",
+ "signature": "onInviteeRejectedByOtherDevice(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200021,
+ "name": "onInvitationCancelled",
+ "signature": "onInvitationCancelled(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200022,
+ "name": "onInvitationTimeout",
+ "signature": "onInvitationTimeout(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200023,
+ "name": "onHangUp",
+ "signature": "onHangUp(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200024,
+ "name": "onRoomParticipantConnected",
+ "signature": "onRoomParticipantConnected(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200025,
+ "name": "onRoomParticipantDisconnected",
+ "signature": "onRoomParticipantDisconnected(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200026,
+ "name": "onReceiveCustomSignaling",
+ "signature": "onReceiveCustomSignaling(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "disposition": "documented"
+ },
+ {
+ "id": 200027,
+ "name": "onReceiveCustomSignal",
+ "signature": "onReceiveCustomSignal(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "disposition": "documented"
+ },
+ {
+ "id": 200028,
+ "name": "onStreamChange",
+ "signature": "onStreamChange(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200029,
+ "name": "onMessageKvInfoChanged",
+ "signature": "onMessageKvInfoChanged(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200030,
+ "name": "onMigrationStart",
+ "signature": "onMigrationStart(handler:OpenIMVoidEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200031,
+ "name": "onMigrationProgress",
+ "signature": "onMigrationProgress(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200032,
+ "name": "onMigrationFailed",
+ "signature": "onMigrationFailed(handler:OpenIMStringEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200033,
+ "name": "onMigrationFinished",
+ "signature": "onMigrationFinished(handler:OpenIMVoidEventHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented"
+ },
+ {
+ "id": 200086,
+ "name": "onSDKSessionChanged",
+ "signature": "onSDKSessionChanged(handler:SDKSessionChangedHandler):OpenIMSDKEventSubscription",
+ "role": "event-subscription",
+ "completion": "sync",
+ "responseCodec": "event-handler",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKEventSubscription"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": true,
+ "page": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 200034,
+ "name": "cancelUpload",
+ "signature": "cancelUpload(params:OpenIMCancelUploadParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/file-uploads/upload-file",
+ "disposition": "documented"
+ },
+ {
+ "id": 200035,
+ "name": "speechToText",
+ "signature": "speechToText(params:OpenIMSpeechToTextParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSpeechToTextResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSpeechToTextResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/transcribe-audio",
+ "disposition": "documented"
+ },
+ {
+ "id": 200036,
+ "name": "getSpeechToTextCapabilities",
+ "signature": "getSpeechToTextCapabilities(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSpeechToTextCapabilitiesResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSpeechToTextCapabilitiesResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/check-speech-to-text",
+ "disposition": "documented"
+ },
+ {
+ "id": 200081,
+ "name": "updateToken",
+ "signature": "updateToken(params:OpenIMUpdateTokenParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "disposition": "documented"
+ },
+ {
+ "id": 200082,
+ "name": "translateText",
+ "signature": "translateText(params:OpenIMTranslateTextParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMTranslateTextResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMTranslateTextResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/translate-text-and-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200037,
+ "name": "getInputStates",
+ "signature": "getInputStates(params:OpenIMGetInputStatesParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetInputStatesResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetInputStatesResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/get-typing-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 200038,
+ "name": "resetConversationUnread",
+ "signature": "resetConversationUnread(params:OpenIMResetConversationUnreadParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "disposition": "documented"
+ },
+ {
+ "id": 200039,
+ "name": "createConversationGroup",
+ "signature": "createConversationGroup(params:OpenIMCreateConversationGroupParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMCreateConversationGroupResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMCreateConversationGroupResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 200040,
+ "name": "updateConversationGroup",
+ "signature": "updateConversationGroup(params:OpenIMUpdateConversationGroupParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMUpdateConversationGroupResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMUpdateConversationGroupResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 200041,
+ "name": "deleteConversationGroup",
+ "signature": "deleteConversationGroup(params:OpenIMDeleteConversationGroupParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group",
+ "disposition": "documented"
+ },
+ {
+ "id": 200042,
+ "name": "getConversationGroups",
+ "signature": "getConversationGroups(params:OpenIMGetConversationGroupsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetConversationGroupsResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetConversationGroupsResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200043,
+ "name": "setConversationGroupOrder",
+ "signature": "setConversationGroupOrder(params:OpenIMSetConversationGroupOrderParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order",
+ "disposition": "documented"
+ },
+ {
+ "id": 200044,
+ "name": "addConversationsToGroups",
+ "signature": "addConversationsToGroups(params:OpenIMConversationGroupMembershipParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200045,
+ "name": "removeConversationsFromGroups",
+ "signature": "removeConversationsFromGroups(params:OpenIMConversationGroupMembershipParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups",
+ "disposition": "documented"
+ },
+ {
+ "id": 200046,
+ "name": "getConversationGroupByConversationID",
+ "signature": "getConversationGroupByConversationID(params:OpenIMGetConversationGroupByConversationIDParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetConversationGroupByConversationIDResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetConversationGroupByConversationIDResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id",
+ "disposition": "documented"
+ },
+ {
+ "id": 200047,
+ "name": "getConversationGroupInfoWithConversations",
+ "signature": "getConversationGroupInfoWithConversations(params:OpenIMGetConversationGroupInfoWithConversationsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetConversationGroupInfoWithConversationsResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetConversationGroupInfoWithConversationsResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations",
+ "disposition": "documented"
+ },
+ {
+ "id": 200048,
+ "name": "updateFriend",
+ "signature": "updateFriend(params:OpenIMUpdateFriendParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friends/update-friends",
+ "disposition": "documented"
+ },
+ {
+ "id": 200049,
+ "name": "deleteFriendRequests",
+ "signature": "deleteFriendRequests(params:OpenIMDeleteFriendRequestsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/friend-applications/delete-friend-requests",
+ "disposition": "documented"
+ },
+ {
+ "id": 200050,
+ "name": "getBlacks",
+ "signature": "getBlacks(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetBlacksResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetBlacksResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/user/blacklist/get-black-list",
+ "disposition": "documented"
+ },
+ {
+ "id": 200051,
+ "name": "deleteGroupRequests",
+ "signature": "deleteGroupRequests(params:OpenIMDeleteGroupRequestsParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/group-applications/delete-group-requests",
+ "disposition": "documented"
+ },
+ {
+ "id": 200052,
+ "name": "checkLocalGroupFullSync",
+ "signature": "checkLocalGroupFullSync(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFullSyncResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFullSyncResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/check-full-sync-state",
+ "disposition": "documented"
+ },
+ {
+ "id": 200053,
+ "name": "checkGroupMemberFullSync",
+ "signature": "checkGroupMemberFullSync(params:OpenIMCheckGroupMemberFullSyncParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFullSyncResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFullSyncResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/group/check-full-sync-state",
+ "disposition": "documented"
+ },
+ {
+ "id": 200054,
+ "name": "getAtAllTag",
+ "signature": "getAtAllTag(operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMAtAllTagResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMAtAllTagResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-text-at-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 200055,
+ "name": "sendGroupMessageReadReceipt",
+ "signature": "sendGroupMessageReadReceipt(params:OpenIMSendGroupMessageReadReceiptParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "disposition": "documented"
+ },
+ {
+ "id": 200056,
+ "name": "getGroupMessageReaderList",
+ "signature": "getGroupMessageReaderList(params:OpenIMGetGroupMessageReaderListParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetGroupMessageReaderListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetGroupMessageReaderListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-read-status/get-group-message-readers",
+ "disposition": "documented"
+ },
+ {
+ "id": 200057,
+ "name": "fetchSurroundingMessages",
+ "signature": "fetchSurroundingMessages(params:OpenIMFetchSurroundingMessagesParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMFetchSurroundingMessagesResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMFetchSurroundingMessagesResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/retrieving-messages/load-message-context",
+ "disposition": "documented"
+ },
+ {
+ "id": 200058,
+ "name": "modifyMessage",
+ "signature": "modifyMessage(params:OpenIMModifyMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMModifyMessageResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMModifyMessageResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 200084,
+ "name": "translateMessage",
+ "signature": "translateMessage(params:OpenIMTranslateMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/translate-text-and-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200059,
+ "name": "setConversationPinnedMsg",
+ "signature": "setConversationPinnedMsg(params:OpenIMSetConversationPinnedMsgParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "disposition": "documented"
+ },
+ {
+ "id": 200060,
+ "name": "getConversationPinnedMsg",
+ "signature": "getConversationPinnedMsg(params:OpenIMGetConversationPinnedMsgParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMGetConversationPinnedMsgResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMGetConversationPinnedMsgResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/get-pinned-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200061,
+ "name": "setMessageLocalContent",
+ "signature": "setMessageLocalContent(params:OpenIMSetMessageLocalContentParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/save-local-transcript",
+ "disposition": "documented"
+ },
+ {
+ "id": 200062,
+ "name": "getHistoryMessageList",
+ "signature": "getHistoryMessageList(params:OpenIMGetHistoryMessageListParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMAdvancedHistoryMessageListResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMAdvancedHistoryMessageListResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/retrieving-messages/load-older-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200063,
+ "name": "typingStatusUpdate",
+ "signature": "typingStatusUpdate(params:OpenIMTypingStatusUpdateParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "disposition": "documented"
+ },
+ {
+ "id": 200064,
+ "name": "deleteMessages",
+ "signature": "deleteMessages(params:OpenIMDeleteMessagesParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200065,
+ "name": "deleteUserAllMessagesInConv",
+ "signature": "deleteUserAllMessagesInConv(params:OpenIMDeleteUserAllMessagesInConvParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "disposition": "documented"
+ },
+ {
+ "id": 200066,
+ "name": "createMarkdownMessage",
+ "signature": "createMarkdownMessage(params:OpenIMCreateMarkdownMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-markdown-message",
+ "disposition": "documented"
+ },
+ {
+ "id": 200067,
+ "name": "createImageMessage",
+ "signature": "createImageMessage(params:OpenIMCreateImageMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-image-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 200068,
+ "name": "createSoundMessage",
+ "signature": "createSoundMessage(params:OpenIMCreateSoundMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 200069,
+ "name": "createVideoMessage",
+ "signature": "createVideoMessage(params:OpenIMCreateVideoMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-video-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 200070,
+ "name": "createFileMessage",
+ "signature": "createFileMessage(params:OpenIMCreateFileMessageParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMMessageItem|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMMessageItem"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/message/creating-messages/create-file-message-from-full-path",
+ "disposition": "documented"
+ },
+ {
+ "id": 200071,
+ "name": "signalingInvite",
+ "signature": "signalingInvite(params:OpenIMSignalingInviteParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSignalingInviteResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSignalingInviteResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/start-single-call",
+ "disposition": "documented"
+ },
+ {
+ "id": 200072,
+ "name": "signalingInviteInGroup",
+ "signature": "signalingInviteInGroup(params:OpenIMSignalingInviteParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSignalingInviteResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSignalingInviteResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/start-group-call",
+ "disposition": "documented"
+ },
+ {
+ "id": 200073,
+ "name": "signalingAccept",
+ "signature": "signalingAccept(params:OpenIMSignalingAcceptParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSignalingAcceptResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSignalingAcceptResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/accept-call",
+ "disposition": "documented"
+ },
+ {
+ "id": 200074,
+ "name": "signalingReject",
+ "signature": "signalingReject(params:OpenIMSignalingRejectParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/reject-call",
+ "disposition": "documented"
+ },
+ {
+ "id": 200075,
+ "name": "signalingCancel",
+ "signature": "signalingCancel(params:OpenIMSignalingCancelParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/cancel-call",
+ "disposition": "documented"
+ },
+ {
+ "id": 200076,
+ "name": "signalingHungUp",
+ "signature": "signalingHungUp(params:OpenIMSignalingHungUpParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/managing-calls/hang-up-call",
+ "disposition": "documented"
+ },
+ {
+ "id": 200077,
+ "name": "signalingGetTokenByRoomID",
+ "signature": "signalingGetTokenByRoomID(params:OpenIMSignalingGetTokenByRoomIDParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSignalingGetTokenByRoomIDResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSignalingGetTokenByRoomIDResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id",
+ "disposition": "documented"
+ },
+ {
+ "id": 200078,
+ "name": "signalingGetRoomByGroupID",
+ "signature": "signalingGetRoomByGroupID(params:OpenIMSignalingGetRoomByGroupIDParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSignalingGetRoomByGroupIDResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSignalingGetRoomByGroupIDResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id",
+ "disposition": "documented"
+ },
+ {
+ "id": 200079,
+ "name": "signalingGetInvitationInfoStartApp",
+ "signature": "signalingGetInvitationInfoStartApp(params?:OpenIMSignalingGetInvitationInfoStartAppParams|null,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSignalingGetInvitationInfoStartAppResult|null",
+ "responseSchema": {
+ "kind": "union",
+ "options": [
+ {
+ "kind": "reference",
+ "name": "OpenIMSignalingGetInvitationInfoStartAppResult"
+ },
+ {
+ "kind": "null"
+ }
+ ]
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation",
+ "disposition": "documented"
+ },
+ {
+ "id": 200080,
+ "name": "signalingSendCustomSignaling",
+ "signature": "signalingSendCustomSignaling(params:OpenIMSignalingSendCustomSignalingParams,operationID?:string|null):Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "raw-string",
+ "responseSchema": {
+ "kind": "string"
+ },
+ "rawString": true,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": false,
+ "synthetic": false,
+ "page": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "disposition": "documented"
+ },
+ {
+ "id": 200085,
+ "name": "getSDKSessionSnapshot",
+ "signature": "getSDKSessionSnapshot():Promise",
+ "role": "operation",
+ "completion": "promise",
+ "responseCodec": "typed:OpenIMSDKSessionSnapshot",
+ "responseSchema": {
+ "kind": "reference",
+ "name": "OpenIMSDKSessionSnapshot"
+ },
+ "rawString": false,
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "localOperation": true,
+ "synthetic": false,
+ "page": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "disposition": "documented"
+ }
+ ],
+ "events": [
+ {
+ "name": "onConnecting",
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "void",
+ "synthetic": false
+ },
+ {
+ "name": "onConnectSuccess",
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "void",
+ "synthetic": false
+ },
+ {
+ "name": "onConnectFailed",
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onKickedOffline",
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "void",
+ "synthetic": false
+ },
+ {
+ "name": "onUserTokenExpired",
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "void",
+ "synthetic": false
+ },
+ {
+ "name": "onUserTokenInvalid",
+ "page": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvNewMessage",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvOfflineNewMessage",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvOnlineOnlyMessage",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onMsgDeleted",
+ "page": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onNewRecvMessageRevoked",
+ "page": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvC2CReadReceipt",
+ "page": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvNewMessages",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvOfflineNewMessages",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationChanged",
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationUserInputStatusChanged",
+ "page": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onNewConversation",
+ "page": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onSyncServerFailed",
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onSyncServerFinish",
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onSyncServerProgress",
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onSyncServerStart",
+ "page": "/sdk/uniapp/events/overview-events",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onSendMessageProgress",
+ "page": "/sdk/uniapp/message/overview-message",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onUploadFileProgress",
+ "page": "/sdk/uniapp/message/overview-message",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onUploadLogsProgress",
+ "page": "/sdk/uniapp/message/overview-message",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onTotalUnreadMessageCountChanged",
+ "page": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvCustomBusinessMessage",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onBlackAdded",
+ "page": "/sdk/uniapp/user/blacklist/get-black-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onBlackDeleted",
+ "page": "/sdk/uniapp/user/blacklist/get-black-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendAdded",
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendApplicationAccepted",
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendApplicationAdded",
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendApplicationDeleted",
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendApplicationRejected",
+ "page": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendDeleted",
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onFriendInfoChanged",
+ "page": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupApplicationAccepted",
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupApplicationAdded",
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupApplicationDeleted",
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupApplicationRejected",
+ "page": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupDismissed",
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupInfoChanged",
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupMemberAdded",
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupMemberDeleted",
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupMemberInfoChanged",
+ "page": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onJoinedGroupAdded",
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onJoinedGroupDeleted",
+ "page": "/sdk/uniapp/group/overview-group",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onSelfInfoUpdated",
+ "page": "/sdk/uniapp/user/profile/set-self-info",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onUserStatusChanged",
+ "page": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "disposition": "documented",
+ "edition": "public",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": false
+ },
+ {
+ "name": "onChangedPinnedMsg",
+ "page": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onDeleteUserAllMsgsInConv",
+ "page": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onMessageModified",
+ "page": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onMessageEdited",
+ "page": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvGroupReadReceipt",
+ "page": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvMessageExtensionsAdded",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvMessageExtensionsChanged",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onRecvMessageExtensionsDeleted",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationGroupAdded",
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationGroupChanged",
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationGroupDeleted",
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationGroupMemberAdded",
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onConversationGroupMemberDeleted",
+ "page": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onGroupApplicationBadgeCountChanged",
+ "page": "/sdk/uniapp/group/group-applications/observe-group-application-badge-count",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "scalar",
+ "synthetic": false
+ },
+ {
+ "name": "onReceiveNewInvitation",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onInviteeAccepted",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onInviteeAcceptedByOtherDevice",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onInviteeRejected",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onInviteeRejectedByOtherDevice",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onInvitationCancelled",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onInvitationTimeout",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onHangUp",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onRoomParticipantConnected",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onRoomParticipantDisconnected",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onReceiveCustomSignaling",
+ "page": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onReceiveCustomSignal",
+ "page": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onStreamChange",
+ "page": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onMessageKvInfoChanged",
+ "page": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onMigrationStart",
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "void",
+ "synthetic": false
+ },
+ {
+ "name": "onMigrationProgress",
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onMigrationFailed",
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "opaque-string",
+ "synthetic": false
+ },
+ {
+ "name": "onMigrationFinished",
+ "page": "/sdk/uniapp/events/handle-data-migration-events",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "platform-unsupported"
+ },
+ "payloadProfile": "void",
+ "synthetic": false
+ },
+ {
+ "name": "onSDKSessionChanged",
+ "page": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "disposition": "documented",
+ "edition": "commercial",
+ "platforms": {
+ "android": "required",
+ "ios": "required",
+ "harmony": "required"
+ },
+ "payloadProfile": "typed",
+ "synthetic": true
+ }
+ ]
+}
diff --git a/data/structure/uniapp-content-audit.json b/data/structure/uniapp-content-audit.json
new file mode 100644
index 0000000000..871ffd582a
--- /dev/null
+++ b/data/structure/uniapp-content-audit.json
@@ -0,0 +1,7654 @@
+{
+ "schemaVersion": 1,
+ "sources": {
+ "openimDocs": {
+ "repository": "https://github.com/openimsdk/docs",
+ "commit": "efd0f251b288167e1ca617504b10dd73986429f0"
+ },
+ "uniappSdk": {
+ "manifest": "data/structure/uniapp-sdk-doc-manifest.json",
+ "tag": "0.2.0-rc.3",
+ "commit": "e71e3f68827f9f7af354526fecbaded25dc14de9",
+ "interfaceSha256": "acbe16c69ba4ddfa2e7bbdcf35a119c88801e93d960520db50de082c2e4234df",
+ "responseSchemaSha256": "a6a73ab3e368812cbe9b6355fed3edbe59b890aa6e8f73c69e3d06fd23a6c6e5"
+ }
+ },
+ "pages": [
+ {
+ "currentPath": "/sdk/uniapp/overview",
+ "targetPath": "/sdk/uniapp/overview",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-08-13:已锁定 Private 0.2.0-rc.3 脱敏文档合同;正文待完整迁移后发布。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/before-you-start",
+ "targetPath": "/sdk/uniapp/getting-started/before-you-start",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm prerequisites were reviewed section by section and adapted to the native UTS plugin, device networking, custom-base/native build, and locked platform support matrix on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm prerequisites were reviewed section by section and adapted to the native UTS plugin, device networking, custom-base/native build, and locked platform support matrix on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/environment-specific-implementation",
+ "targetPath": "/sdk/uniapp/getting-started/environment-specific-implementation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm environment guide structure was manually re-authored for uni-app and uni-app x, covering the locked support matrix, flat imports, lifecycle ownership, Android/iOS/Harmony builds, native files, local bases, validation, and troubleshooting on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "targetPath": "/sdk/uniapp/getting-started/authenticate-and-manage-session",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getLoginStatus",
+ "getLoginUserID",
+ "login",
+ "logout",
+ "networkStatusChanged",
+ "onConnectFailed",
+ "onConnectSuccess",
+ "onConnecting",
+ "onKickedOffline",
+ "onUserTokenExpired",
+ "onUserTokenInvalid",
+ "setAppBackgroundStatus"
+ ],
+ "sdkEvents": [
+ "onConnectFailed",
+ "onConnectSuccess",
+ "onConnecting",
+ "onKickedOffline",
+ "onUserTokenExpired",
+ "onUserTokenInvalid"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm page structure and semantics were reviewed section by section; examples were adapted to the frozen Private 0.2.0-rc.3 signatures, direct Promise values, error-handler arity, and subscription/off contract on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/send-first-message",
+ "targetPath": "/sdk/uniapp/getting-started/send-first-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm first-message flow was reviewed section by section; installation, initialization, login, direct Promise return, clientMsgID merge, and two-client verification were adapted to the frozen Private 0.2.0-rc.3 contract on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "targetPath": "/sdk/uniapp/getting-started/install-initialize-and-inspect-sdk",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getOpenIMDataPath",
+ "getSdkVersion",
+ "initSDK",
+ "unInitSDK"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state",
+ "targetPath": "/sdk/uniapp/getting-started/handle-app-lifecycle-and-device-state",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setAppBadge",
+ "updateFcmToken"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "targetPath": "/sdk/uniapp/getting-started/update-token-and-observe-sdk-session",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSDKSessionSnapshot",
+ "onSDKSessionChanged",
+ "updateToken"
+ ],
+ "sdkEvents": [
+ "onSDKSessionChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/overview-user",
+ "targetPath": "/sdk/uniapp/user/overview-user",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [
+ "Wasm user-domain structure and model selection guidance were reviewed section by section and adapted to frozen Private type names and field-level commercial extensions on 2026-08-13."
+ ],
+ "reason": "Concept and ownership page contains no executable SDK call."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/profile/get-users-info",
+ "targetPath": "/sdk/uniapp/user/profile/get-users-info",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getUsersInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm public-profile workflow was reviewed section by section; OpenIMUserListResult.users, batching, refresh boundaries, backend search, and scenario-specific model selection were verified against Private 0.2.0-rc.3 on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/profile/get-self-user-info",
+ "targetPath": "/sdk/uniapp/user/profile/get-self-user-info",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSelfUserInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm self-profile result documentation was reviewed section by section; nullable direct return, exact OpenIMUserInfo fields, and field-level commercial markers were verified against Private 0.2.0-rc.3 on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/profile/set-self-info",
+ "targetPath": "/sdk/uniapp/user/profile/set-self-info",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onSelfInfoUpdated",
+ "setSelfInfo"
+ ],
+ "sdkEvents": [
+ "onSelfInfoUpdated"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm profile update parameters, overwrite semantics, Promise/event/query stages, and complete handle/off listener ownership were manually adapted to Private 0.2.0-rc.3 on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/profile/set-global-message-reception",
+ "targetPath": "/sdk/uniapp/user/profile/set-global-message-reception",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm account-level receive-option semantics were manually adapted to the Private OpenIMSetSelfInfoRecvMsgOpt union, field-level commercial marker, and setSelfInfo event boundary on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/profile/set-friend-add-permission",
+ "targetPath": "/sdk/uniapp/user/profile/set-friend-add-permission",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "targetPath": "/sdk/uniapp/user/online-status/subscribe-users-status",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getUserStatus",
+ "onUserStatusChanged",
+ "subscribeUsersStatus"
+ ],
+ "sdkEvents": [
+ "onUserStatusChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm presence semantics were reviewed section by section; the unix-specific subscribe string result, getUserStatus snapshot, exact status fields, handle/off lifecycle, and 3000-user boundary were verified on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/online-status/get-subscribe-users-status",
+ "targetPath": "/sdk/uniapp/user/online-status/get-subscribe-users-status",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSubscribeUsersStatus"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/online-status/unsubscribe-users-status",
+ "targetPath": "/sdk/uniapp/user/online-status/unsubscribe-users-status",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "unsubscribeUsersStatus"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "targetPath": "/sdk/uniapp/user/friends/get-friend-list-page",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getFriendList",
+ "getFriendListPage",
+ "onFriendAdded",
+ "onFriendDeleted",
+ "onFriendInfoChanged"
+ ],
+ "sdkEvents": [
+ "onFriendAdded",
+ "onFriendDeleted",
+ "onFriendInfoChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm friend snapshot, complete field model, pagination, and friend added/deleted/info-changed handle/off lifecycle were manually adapted to Private 0.2.0-rc.3 on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friends/search-friends",
+ "targetPath": "/sdk/uniapp/user/friends/search-friends",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "searchFriends"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm friend-search parameters and snapshot semantics were manually adapted to OpenIMSearchFriendsParams and OpenIMFriendListResult.friends on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friends/get-specified-friends-info",
+ "targetPath": "/sdk/uniapp/user/friends/get-specified-friends-info",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSpecifiedFriendsInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friends/check-friend",
+ "targetPath": "/sdk/uniapp/user/friends/check-friend",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "checkFriend"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friends/update-friends",
+ "targetPath": "/sdk/uniapp/user/friends/update-friends",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "updateFriend",
+ "updateFriends"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm batch friend-update fields, overwrite rules, and event confirmation were manually adapted together with the commercial single-user updateFriend difference on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friends/delete-friend",
+ "targetPath": "/sdk/uniapp/user/friends/delete-friend",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteFriend"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/add-friend",
+ "targetPath": "/sdk/uniapp/user/friend-applications/add-friend",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "addFriend"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "targetPath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-recipient",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getFriendApplicationListAsRecipient",
+ "onFriendApplicationAccepted",
+ "onFriendApplicationAdded",
+ "onFriendApplicationDeleted",
+ "onFriendApplicationRejected"
+ ],
+ "sdkEvents": [
+ "onFriendApplicationAccepted",
+ "onFriendApplicationAdded",
+ "onFriendApplicationDeleted",
+ "onFriendApplicationRejected"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm application fields and four-event ownership were manually adapted to the unix pagination-only parameter shape, direct applications wrapper, and handle/off lifecycle on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant",
+ "targetPath": "/sdk/uniapp/user/friend-applications/get-friend-application-list-as-applicant",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getFriendApplicationListAsApplicant"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm applicant pagination and event merge semantics were manually adapted to nullable OpenIMApplicationListParams and OpenIMFriendApplicationListResult.applications on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count",
+ "targetPath": "/sdk/uniapp/user/friend-applications/get-friend-application-unhandled-count",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getFriendApplicationUnhandledCount"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/accept-friend-application",
+ "targetPath": "/sdk/uniapp/user/friend-applications/accept-friend-application",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "acceptFriendApplication"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/refuse-friend-application",
+ "targetPath": "/sdk/uniapp/user/friend-applications/refuse-friend-application",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "refuseFriendApplication"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/friend-applications/delete-friend-requests",
+ "targetPath": "/sdk/uniapp/user/friend-applications/delete-friend-requests",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteFriendRequests"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm delete-request identity and event boundary were manually adapted to the commercial OpenIMDeleteFriendRequestsParams.friendRequests wrapper on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/blacklist/get-black-list",
+ "targetPath": "/sdk/uniapp/user/blacklist/get-black-list",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getBlackList",
+ "getBlacks",
+ "onBlackAdded",
+ "onBlackDeleted"
+ ],
+ "sdkEvents": [
+ "onBlackAdded",
+ "onBlackDeleted"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm blacklist workflow was reviewed section by section; blackUsers versus commercial blacks wrappers, full OpenIMBlackUserItem fields, asymmetric blocking semantics, and handle/off event merging were verified on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/blacklist/add-black",
+ "targetPath": "/sdk/uniapp/user/blacklist/add-black",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "addBlack"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/user/blacklist/remove-black",
+ "targetPath": "/sdk/uniapp/user/blacklist/remove-black",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "removeBlack"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/overview-conversation",
+ "targetPath": "/sdk/uniapp/conversation/overview-conversation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target",
+ "targetPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-by-target",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getOneConversation"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id",
+ "targetPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversation-id",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getConversationIDBySessionType"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id",
+ "targetPath": "/sdk/uniapp/conversation/retrieving-conversations/get-conversations-by-id",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getMultipleConversation"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "targetPath": "/sdk/uniapp/conversation/retrieving-conversations/retrieve-conversation-list",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getAllConversationList",
+ "getConversationListSplit",
+ "onConversationChanged",
+ "onNewConversation"
+ ],
+ "sdkEvents": [
+ "onConversationChanged",
+ "onNewConversation"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/retrieving-conversations/search-conversations",
+ "targetPath": "/sdk/uniapp/conversation/retrieving-conversations/search-conversations",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "searchConversation"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/pin-conversation",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/pin-conversation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setConversation"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-remark",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-remark",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-extension",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-extension",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-draft",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-conversation-draft",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setConversationDraft"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-message-receive-option",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-message-receive-option",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/clear-group-mentions",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/clear-group-mentions",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/mark-conversation-read",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "markConversationMessageAsRead",
+ "onRecvC2CReadReceipt",
+ "resetConversationUnread"
+ ],
+ "sdkEvents": [
+ "onRecvC2CReadReceipt"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/mark-all-conversations-read",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "markAllConversationMessageAsRead"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/get-total-unread-count",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getTotalUnreadMsgCount",
+ "onTotalUnreadMessageCountChanged"
+ ],
+ "sdkEvents": [
+ "onTotalUnreadMessageCountChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-private-chat",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-private-chat",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-burn-duration",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-burn-duration",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/set-message-destruct",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/set-message-destruct",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/hide-a-conversation",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/hide-a-conversation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "hideConversation"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/hide-all-conversations",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/hide-all-conversations",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "hideAllConversations"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteConversation"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/delete-conversation-with-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteConversationAndDeleteAllMsg"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/clear-conversation-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "clearConversationAndDeleteAllMsg"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/overview-conversation-groups",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onConversationGroupAdded",
+ "onConversationGroupChanged",
+ "onConversationGroupDeleted",
+ "onConversationGroupMemberAdded",
+ "onConversationGroupMemberDeleted"
+ ],
+ "sdkEvents": [
+ "onConversationGroupAdded",
+ "onConversationGroupChanged",
+ "onConversationGroupDeleted",
+ "onConversationGroupMemberAdded",
+ "onConversationGroupMemberDeleted"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/create-conversation-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createConversationGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-groups",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getConversationGroups"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-info-with-conversations",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getConversationGroupInfoWithConversations"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/get-conversation-group-by-conversation-id",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getConversationGroupByConversationID"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/update-conversation-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "updateConversationGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/set-conversation-group-order",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setConversationGroupOrder"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/add-conversations-to-groups",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "addConversationsToGroups"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/remove-conversations-from-groups",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "removeConversationsFromGroups"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversation-groups/delete-conversation-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteConversationGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/overview-group",
+ "targetPath": "/sdk/uniapp/group/overview-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onGroupDismissed",
+ "onGroupInfoChanged",
+ "onJoinedGroupAdded",
+ "onJoinedGroupDeleted"
+ ],
+ "sdkEvents": [
+ "onGroupDismissed",
+ "onGroupInfoChanged",
+ "onJoinedGroupAdded",
+ "onJoinedGroupDeleted"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/create-group",
+ "targetPath": "/sdk/uniapp/group/create-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/update-group-profile",
+ "targetPath": "/sdk/uniapp/group/update-group-profile",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setGroupInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/set-group-announcement",
+ "targetPath": "/sdk/uniapp/group/set-group-announcement",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/set-group-extension",
+ "targetPath": "/sdk/uniapp/group/set-group-extension",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/set-group-join-verification",
+ "targetPath": "/sdk/uniapp/group/set-group-join-verification",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/set-group-member-profile-access",
+ "targetPath": "/sdk/uniapp/group/set-group-member-profile-access",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/set-group-member-friend-permission",
+ "targetPath": "/sdk/uniapp/group/set-group-member-friend-permission",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/change-group-mute",
+ "targetPath": "/sdk/uniapp/group/change-group-mute",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "changeGroupMute"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/join-group",
+ "targetPath": "/sdk/uniapp/group/join-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "joinGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/quit-group",
+ "targetPath": "/sdk/uniapp/group/quit-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "quitGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/dismiss-group",
+ "targetPath": "/sdk/uniapp/group/dismiss-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "dismissGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-groups/get-specified-groups-info",
+ "targetPath": "/sdk/uniapp/group/retrieving-groups/get-specified-groups-info",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSpecifiedGroupsInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list",
+ "targetPath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getJoinedGroupList"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page",
+ "targetPath": "/sdk/uniapp/group/retrieving-groups/get-joined-group-list-page",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getJoinedGroupListPage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-groups/is-join-group",
+ "targetPath": "/sdk/uniapp/group/retrieving-groups/is-join-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "isJoinGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-groups/search-groups",
+ "targetPath": "/sdk/uniapp/group/retrieving-groups/search-groups",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "searchGroups"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "targetPath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-recipient",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getGroupApplicationListAsRecipient",
+ "onGroupApplicationAccepted",
+ "onGroupApplicationAdded",
+ "onGroupApplicationDeleted",
+ "onGroupApplicationRejected"
+ ],
+ "sdkEvents": [
+ "onGroupApplicationAccepted",
+ "onGroupApplicationAdded",
+ "onGroupApplicationDeleted",
+ "onGroupApplicationRejected"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant",
+ "targetPath": "/sdk/uniapp/group/group-applications/get-group-application-list-as-applicant",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getGroupApplicationListAsApplicant"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/get-group-application-unhandled-count",
+ "targetPath": "/sdk/uniapp/group/group-applications/get-group-application-unhandled-count",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getGroupApplicationUnhandledCount"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/observe-group-application-badge-count",
+ "targetPath": "/sdk/uniapp/group/group-applications/observe-group-application-badge-count",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onGroupApplicationBadgeCountChanged"
+ ],
+ "sdkEvents": [
+ "onGroupApplicationBadgeCountChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/accept-group-application",
+ "targetPath": "/sdk/uniapp/group/group-applications/accept-group-application",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "acceptGroupApplication"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/refuse-group-application",
+ "targetPath": "/sdk/uniapp/group/group-applications/refuse-group-application",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "refuseGroupApplication"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/delete-group-requests",
+ "targetPath": "/sdk/uniapp/group/group-applications/delete-group-requests",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteGroupRequests"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "targetPath": "/sdk/uniapp/group/retrieving-group-members/get-group-member-list",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getGroupMemberList",
+ "onGroupMemberAdded",
+ "onGroupMemberDeleted",
+ "onGroupMemberInfoChanged"
+ ],
+ "sdkEvents": [
+ "onGroupMemberAdded",
+ "onGroupMemberDeleted",
+ "onGroupMemberInfoChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info",
+ "targetPath": "/sdk/uniapp/group/retrieving-group-members/get-specified-group-members-info",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSpecifiedGroupMembersInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-group-members/get-users-in-group",
+ "targetPath": "/sdk/uniapp/group/retrieving-group-members/get-users-in-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getUsersInGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-group-members/search-group-members",
+ "targetPath": "/sdk/uniapp/group/retrieving-group-members/search-group-members",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "searchGroupMembers"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/invite-user-to-group",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/invite-user-to-group",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "inviteUserToGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/kick-group-member",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/kick-group-member",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "kickGroupMember"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/set-group-member-nickname",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/set-group-member-nickname",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setGroupMemberInfo"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/set-group-member-role-level",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/set-group-member-role-level",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/set-group-member-avatar",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/set-group-member-avatar",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/set-group-member-extension",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/set-group-member-extension",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/transfer-group-owner",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/transfer-group-owner",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "transferGroupOwner"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/managing-group-members/change-group-member-mute",
+ "targetPath": "/sdk/uniapp/group/managing-group-members/change-group-member-mute",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "changeGroupMemberMute"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/check-full-sync-state",
+ "targetPath": "/sdk/uniapp/group/check-full-sync-state",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "checkGroupMemberFullSync",
+ "checkLocalGroupFullSync"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/overview-message",
+ "targetPath": "/sdk/uniapp/message/overview-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onSendMessageProgress",
+ "onUploadFileProgress",
+ "onUploadLogsProgress"
+ ],
+ "sdkEvents": [
+ "onSendMessageProgress",
+ "onUploadFileProgress",
+ "onUploadLogsProgress"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-text-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-text-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createTextMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-text-at-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-text-at-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createTextAtMessage",
+ "getAtAllTag"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-custom-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-custom-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createAdvancedTextMessage",
+ "createCustomMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-image-message-from-full-path",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-image-message-from-full-path",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createImageMessage",
+ "createImageMessageFromFullPath"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-image-message-by-url",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-image-message-by-url",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createImageMessageByURL"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-sound-message-from-full-path",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createSoundMessage",
+ "createSoundMessageFromFullPath"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-sound-message-by-url",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-sound-message-by-url",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createSoundMessageByURL"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-video-message-from-full-path",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-video-message-from-full-path",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createVideoMessage",
+ "createVideoMessageFromFullPath"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-video-message-by-url",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-video-message-by-url",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createVideoMessageByURL"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-file-message-from-full-path",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-file-message-from-full-path",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createFileMessage",
+ "createFileMessageFromFullPath"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-file-message-by-url",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-file-message-by-url",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createFileMessageByURL"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-card-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-card-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createCardMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-location-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-location-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createLocationMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-face-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-face-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createFaceMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-quote-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-quote-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createAdvancedQuoteMessage",
+ "createQuoteMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-markdown-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-markdown-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createMarkdownMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-forward-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-forward-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createForwardMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/creating-messages/create-merger-message",
+ "targetPath": "/sdk/uniapp/message/creating-messages/create-merger-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "createMergerMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/sending-messages/send-message",
+ "targetPath": "/sdk/uniapp/message/sending-messages/send-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "sendMessage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm send-message target, parameter, server-confirmed result, clientMsgID replacement, and Promise/event/query stages were manually adapted to the direct OpenIMMessageItem return on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/sending-messages/send-message-not-oss",
+ "targetPath": "/sdk/uniapp/message/sending-messages/send-message-not-oss",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "sendMessageNotOss"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "targetPath": "/sdk/uniapp/message/receiving-messages/receive-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onRecvNewMessage",
+ "onRecvNewMessages",
+ "onRecvOfflineNewMessage",
+ "onRecvOfflineNewMessages",
+ "onRecvOnlineOnlyMessage"
+ ],
+ "sdkEvents": [
+ "onRecvNewMessage",
+ "onRecvNewMessages",
+ "onRecvOfflineNewMessage",
+ "onRecvOfflineNewMessages",
+ "onRecvOnlineOnlyMessage"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "targetPath": "/sdk/uniapp/message/receiving-messages/receive-custom-business-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onMessageKvInfoChanged",
+ "onRecvCustomBusinessMessage",
+ "onRecvMessageExtensionsAdded",
+ "onRecvMessageExtensionsChanged",
+ "onRecvMessageExtensionsDeleted"
+ ],
+ "sdkEvents": [
+ "onMessageKvInfoChanged",
+ "onRecvCustomBusinessMessage",
+ "onRecvMessageExtensionsAdded",
+ "onRecvMessageExtensionsChanged",
+ "onRecvMessageExtensionsDeleted"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/retrieving-messages/load-older-messages",
+ "targetPath": "/sdk/uniapp/message/retrieving-messages/load-older-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getAdvancedHistoryMessageList",
+ "getHistoryMessageList"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/retrieving-messages/find-messages-by-id",
+ "targetPath": "/sdk/uniapp/message/retrieving-messages/find-messages-by-id",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "findMessageList"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/retrieving-messages/load-message-context",
+ "targetPath": "/sdk/uniapp/message/retrieving-messages/load-message-context",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "fetchSurroundingMessages"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/searching-messages/search-messages",
+ "targetPath": "/sdk/uniapp/message/searching-messages/search-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "searchLocalMessages"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "targetPath": "/sdk/uniapp/message/composing-messages/update-typing-status",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "changeInputStates",
+ "onConversationUserInputStatusChanged",
+ "typingStatusUpdate"
+ ],
+ "sdkEvents": [
+ "onConversationUserInputStatusChanged"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/composing-messages/get-typing-status",
+ "targetPath": "/sdk/uniapp/message/composing-messages/get-typing-status",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getInputStates"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/composing-messages/check-speech-to-text",
+ "targetPath": "/sdk/uniapp/message/composing-messages/check-speech-to-text",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getSpeechToTextCapabilities"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/composing-messages/transcribe-audio",
+ "targetPath": "/sdk/uniapp/message/composing-messages/transcribe-audio",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "speechToText"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/composing-messages/save-local-transcript",
+ "targetPath": "/sdk/uniapp/message/composing-messages/save-local-transcript",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setMessageLocalContent"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/composing-messages/translate-text-and-messages",
+ "targetPath": "/sdk/uniapp/message/composing-messages/translate-text-and-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "translateMessage",
+ "translateText"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/delete-local-message",
+ "targetPath": "/sdk/uniapp/message/managing-messages/delete-local-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteMessage",
+ "deleteMessageFromLocalStorage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "targetPath": "/sdk/uniapp/message/managing-messages/delete-saved-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteMessages",
+ "onMsgDeleted"
+ ],
+ "sdkEvents": [
+ "onMsgDeleted"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "targetPath": "/sdk/uniapp/message/managing-messages/delete-user-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteUserAllMessagesInConv",
+ "onDeleteUserAllMsgsInConv"
+ ],
+ "sdkEvents": [
+ "onDeleteUserAllMsgsInConv"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "targetPath": "/sdk/uniapp/message/managing-messages/revoke-a-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onNewRecvMessageRevoked",
+ "revokeMessage"
+ ],
+ "sdkEvents": [
+ "onNewRecvMessageRevoked"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "targetPath": "/sdk/uniapp/message/managing-messages/modify-a-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "modifyMessage",
+ "onMessageEdited",
+ "onMessageModified"
+ ],
+ "sdkEvents": [
+ "onMessageEdited",
+ "onMessageModified"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/get-pinned-messages",
+ "targetPath": "/sdk/uniapp/message/managing-messages/get-pinned-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getConversationPinnedMsg"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "targetPath": "/sdk/uniapp/message/managing-messages/set-message-pinned",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onChangedPinnedMsg",
+ "setConversationPinnedMsg"
+ ],
+ "sdkEvents": [
+ "onChangedPinnedMsg"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/insert-local-single-message",
+ "targetPath": "/sdk/uniapp/message/managing-messages/insert-local-single-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "insertSingleMessageToLocalStorage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/insert-local-group-message",
+ "targetPath": "/sdk/uniapp/message/managing-messages/insert-local-group-message",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "insertGroupMessageToLocalStorage"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/clear-all-local-messages",
+ "targetPath": "/sdk/uniapp/message/managing-messages/clear-all-local-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteAllMsgFromLocal"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/clear-all-messages",
+ "targetPath": "/sdk/uniapp/message/managing-messages/clear-all-messages",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "deleteAllMsgFromLocalAndSvr"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-messages/set-message-local-ex",
+ "targetPath": "/sdk/uniapp/message/managing-messages/set-message-local-ex",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "setMessageLocalEx"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "targetPath": "/sdk/uniapp/message/managing-read-status/send-group-read-receipts",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onRecvGroupReadReceipt",
+ "sendGroupMessageReadReceipt"
+ ],
+ "sdkEvents": [
+ "onRecvGroupReadReceipt"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/managing-read-status/get-group-message-readers",
+ "targetPath": "/sdk/uniapp/message/managing-read-status/get-group-message-readers",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "getGroupMessageReaderList"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/file-uploads/upload-file",
+ "targetPath": "/sdk/uniapp/file-uploads/upload-file",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "cancelUpload",
+ "uploadFile"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/overview-calling",
+ "targetPath": "/sdk/uniapp/calling/overview-calling",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "not-applicable",
+ "evidence": [],
+ "reason": "Concept or boundary page contains no executable code block."
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/start-single-call",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/start-single-call",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingInvite"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/start-group-call",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/start-group-call",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingInviteInGroup"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/accept-call",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/accept-call",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingAccept"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/reject-call",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/reject-call",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingReject"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/cancel-call",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/cancel-call",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingCancel"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/hang-up-call",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/hang-up-call",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingHungUp"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "targetPath": "/sdk/uniapp/calling/managing-calls/handle-call-events",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onHangUp",
+ "onInvitationCancelled",
+ "onInvitationTimeout",
+ "onInviteeAccepted",
+ "onInviteeAcceptedByOtherDevice",
+ "onInviteeRejected",
+ "onInviteeRejectedByOtherDevice",
+ "onReceiveNewInvitation",
+ "onRoomParticipantConnected",
+ "onRoomParticipantDisconnected",
+ "onStreamChange"
+ ],
+ "sdkEvents": [
+ "onHangUp",
+ "onInvitationCancelled",
+ "onInvitationTimeout",
+ "onInviteeAccepted",
+ "onInviteeAcceptedByOtherDevice",
+ "onInviteeRejected",
+ "onInviteeRejectedByOtherDevice",
+ "onReceiveNewInvitation",
+ "onRoomParticipantConnected",
+ "onRoomParticipantDisconnected",
+ "onStreamChange"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation",
+ "targetPath": "/sdk/uniapp/calling/retrieving-call-information/restore-pending-invitation",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingGetInvitationInfoStartApp"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id",
+ "targetPath": "/sdk/uniapp/calling/retrieving-call-information/get-room-by-group-id",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingGetRoomByGroupID"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id",
+ "targetPath": "/sdk/uniapp/calling/retrieving-call-information/get-token-by-room-id",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "signalingGetTokenByRoomID"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "targetPath": "/sdk/uniapp/calling/sending-custom-signals/send-a-custom-signal",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onReceiveCustomSignal",
+ "onReceiveCustomSignaling",
+ "signalingSendCustomSignaling"
+ ],
+ "sdkEvents": [
+ "onReceiveCustomSignal",
+ "onReceiveCustomSignaling"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/events/overview-events",
+ "targetPath": "/sdk/uniapp/events/overview-events",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "off",
+ "offAll",
+ "onSyncServerFailed",
+ "onSyncServerFinish",
+ "onSyncServerProgress",
+ "onSyncServerStart"
+ ],
+ "sdkEvents": [
+ "onSyncServerFailed",
+ "onSyncServerFinish",
+ "onSyncServerProgress",
+ "onSyncServerStart"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm event lifecycle and sync semantics were reviewed section by section; handle/off control, exact scalar callback payloads, ownership links, and Harmony unsupported events were verified against Private 0.2.0-rc.3 on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/events/handle-data-migration-events",
+ "targetPath": "/sdk/uniapp/events/handle-data-migration-events",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "onMigrationFailed",
+ "onMigrationFinished",
+ "onMigrationProgress",
+ "onMigrationStart"
+ ],
+ "sdkEvents": [
+ "onMigrationFailed",
+ "onMigrationFinished",
+ "onMigrationProgress",
+ "onMigrationStart"
+ ],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/logger",
+ "targetPath": "/sdk/uniapp/logger",
+ "sourceKind": "openim-specific",
+ "disposition": "adapt",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [
+ "uploadLogs"
+ ],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "published",
+ "reviewer": "Codex Wasm parity and Private contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Wasm logging structure was reviewed section by section; initialization log constants, direct Promise diagnostics, operationID rules, uploadLogs shape, and privacy boundaries were verified against Private 0.2.0-rc.3 on 2026-08-13."
+ ],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "published",
+ "reviewer": "Codex contract audit",
+ "reviewedAt": "2026-08-13",
+ "exampleVerification": {
+ "status": "verified",
+ "evidence": [
+ "Frozen Private 0.2.0-rc.3 manifest ownership, import-symbol, and native example policy checks passed on 2026-08-13."
+ ],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:已依最新 WASM 文档路径建立结构记录;正文仍待逐页人工核对。"
+ ]
+ },
+ {
+ "currentPath": "/sdk/uniapp/conversation/managing-conversations/clear-local-conversations",
+ "targetPath": "/sdk/uniapp/conversation/managing-conversations/clear-local-conversations",
+ "sourceKind": "openim-specific",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "structure-only",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "deferred",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:固定 Dart SDK 宣告没有该页面的公开能力;不纳入导航且不得编造替代 API。"
+ ],
+ "disposition": "omit"
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/group-applications/clear-group-application-badge-count",
+ "targetPath": "/sdk/uniapp/group/group-applications/clear-group-application-badge-count",
+ "sourceKind": "openim-specific",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "structure-only",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "deferred",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:固定 Dart SDK 宣告没有该页面的公开能力;不纳入导航且不得编造替代 API。"
+ ],
+ "disposition": "omit"
+ },
+ {
+ "currentPath": "/sdk/uniapp/group/retrieving-group-members/get-group-member-owner-and-admin",
+ "targetPath": "/sdk/uniapp/group/retrieving-group-members/get-group-member-owner-and-admin",
+ "sourceKind": "openim-specific",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "structure-only",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "deferred",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:固定 Dart SDK 宣告没有该页面的公开能力;不纳入导航且不得编造替代 API。"
+ ],
+ "disposition": "omit"
+ },
+ {
+ "currentPath": "/sdk/uniapp/message/retrieving-messages/load-newer-messages",
+ "targetPath": "/sdk/uniapp/message/retrieving-messages/load-newer-messages",
+ "sourceKind": "openim-specific",
+ "openimSources": [
+ "https://github.com/openimsdk/docs/tree/efd0f251b288167e1ca617504b10dd73986429f0/docs/sdks",
+ "data/structure/uniapp-sdk-doc-manifest.json#e71e3f68827f9f7af354526fecbaded25dc14de9"
+ ],
+ "sdkMethods": [],
+ "sdkEvents": [],
+ "locales": {
+ "zh": {
+ "reviewStatus": "structure-only",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ },
+ "en": {
+ "reviewStatus": "deferred",
+ "reviewer": null,
+ "reviewedAt": null,
+ "exampleVerification": {
+ "status": "pending",
+ "evidence": [],
+ "reason": null
+ }
+ }
+ },
+ "redirectTo": null,
+ "notes": [
+ "2026-07-20:固定 Dart SDK 宣告没有该页面的公开能力;不纳入导航且不得编造替代 API。"
+ ],
+ "disposition": "omit"
+ }
+ ]
+}
diff --git a/data/structure/uniapp-navigation-labels.json b/data/structure/uniapp-navigation-labels.json
new file mode 100644
index 0000000000..efd669bb6f
--- /dev/null
+++ b/data/structure/uniapp-navigation-labels.json
@@ -0,0 +1,360 @@
+{
+ "Accept a call": "接受通话",
+ "Accept a friend application": "接受好友申请",
+ "Accept a group application": "接受入群申请",
+ "Add a user to the blacklist": "将用户加入黑名单",
+ "Add conversations to groups": "添加会话到分组",
+ "Add extra data to a message": "为消息添加扩展数据",
+ "addConversationsToGroups": "添加会话到分组",
+ "Apply to join a group": "申请加入群组",
+ "Audio and video calling overview": "音视频通话概览",
+ "Authenticate and manage a session": "认证与管理登录会话",
+ "authenticate-and-manage-session": "认证与管理登录会话",
+ "Before you start": "开始之前",
+ "before-you-start": "开始之前",
+ "Blacklist": "黑名单",
+ "Blacklist overview": "黑名单概览",
+ "Block or unblock users": "拉黑或取消拉黑用户",
+ "calling": "音视频通话",
+ "Calling": "音视频通话",
+ "Calling overview": "音视频通话概览",
+ "Cancel a call invitation": "取消通话邀请",
+ "Change group mute status": "设置群组全员禁言",
+ "Check friendship status": "检查好友关系",
+ "Check group membership": "检查是否已加入群组",
+ "Check speech recognition support": "检查语音识别能力",
+ "Check users in a group": "查询用户入群状态",
+ "Clear all local conversations": "清理全部本地会话",
+ "Clear all local messages": "清理全部本地消息",
+ "Clear all saved messages": "清理本地与服务端消息",
+ "Clear message history": "清理消息历史",
+ "Clear messages in a conversation": "清空会话消息",
+ "Clear the group application badge": "清除入群申请角标",
+ "Composing messages": "输入状态与语音转写",
+ "composing-messages": "输入状态与语音转写",
+ "Configure a conversation": "设置会话属性",
+ "conversation": "会话",
+ "Conversation": "会话",
+ "Conversation group overview": "会话分组概览",
+ "Conversation groups": "会话分组",
+ "Conversation organization": "会话整理",
+ "Conversation overview": "会话概览",
+ "Create a contact card message": "创建名片消息",
+ "Create a conversation group": "创建会话分组",
+ "Create a custom message": "创建自定义消息",
+ "Create a file message": "创建文件消息",
+ "Create a file message from a file": "使用文件创建文件消息",
+ "Create a file message from a path": "使用本地路径创建文件消息",
+ "Create a file message from a URL": "使用 URL 创建文件消息",
+ "Create a forwarded message": "创建转发消息",
+ "Create a group": "创建群组",
+ "Create a location message": "创建位置消息",
+ "Create a Markdown message": "创建 Markdown 消息",
+ "Create a mention message": "创建 @ 消息",
+ "Create a merged message": "创建合并消息",
+ "Create a reply message": "创建回复消息",
+ "Create a rich reply": "创建富文本回复",
+ "Create a text message": "创建文本消息",
+ "Create a video message": "创建视频消息",
+ "Create a video message from a file": "使用文件创建视频消息",
+ "Create a video message from a path": "使用本地路径创建视频消息",
+ "Create a video message from a URL": "使用 URL 创建视频消息",
+ "Create an @all marker": "创建 @所有人 标记",
+ "Create an @all message": "创建 @所有人 消息",
+ "Create an audio message": "创建音频消息",
+ "Create an audio message from a file": "使用文件创建音频消息",
+ "Create an audio message from a path": "使用本地路径创建音频消息",
+ "Create an audio message from a URL": "使用 URL 创建音频消息",
+ "Create an emoji message": "创建表情消息",
+ "Create an image message": "创建图片消息",
+ "Create an image message from a file": "使用文件创建图片消息",
+ "Create an image message from a path": "使用本地路径创建图片消息",
+ "Create an image message from a URL": "使用 URL 创建图片消息",
+ "Create media and rich messages": "创建媒体与富消息",
+ "Create or update a group": "创建或更新群组",
+ "Create rich text": "创建富文本消息",
+ "createConversationGroup": "创建会话分组",
+ "Creating and updating groups": "创建和更新群组",
+ "Creating messages": "创建消息",
+ "Creating messages overview": "创建消息概览",
+ "creating-and-updating-groups": "创建和更新群组",
+ "Custom message and extra data": "自定义消息与扩展数据",
+ "Delete a conversation": "删除会话",
+ "Delete a conversation and its messages": "删除会话及消息",
+ "Delete a conversation group": "删除会话分组",
+ "Delete a friend": "删除好友",
+ "Delete a local message": "删除本地消息",
+ "Delete a message": "删除消息",
+ "Delete friend applications": "删除好友申请",
+ "Delete group applications": "删除入群申请",
+ "Delete messages from a user": "删除群聊中指定用户的全部消息",
+ "Delete or clear a conversation": "删除或清空会话",
+ "Delete or revoke a message": "删除或撤回消息",
+ "Delete saved messages": "批量删除消息",
+ "deleteConversationGroup": "删除会话分组",
+ "Dismiss a group": "解散群组",
+ "Enable or disable burn after reading": "开启或关闭阅后即焚",
+ "Environment-specific implementation": "按运行环境接入",
+ "environment-specific-implementation": "按运行环境接入",
+ "events": "事件",
+ "Event overview": "事件概览",
+ "Events": "事件",
+ "Events overview": "事件概览",
+ "File upload overview": "文件上传概览",
+ "Find messages by ID": "按 ID 查找消息",
+ "Forward or merge a message": "转发或合并消息",
+ "Friend applications": "好友申请",
+ "Friend applications overview": "好友申请概览",
+ "Friends": "好友",
+ "Friends overview": "好友概览",
+ "Get a group call room": "查询群组通话房间",
+ "Get conversation groups": "查询会话分组列表",
+ "Get conversations by ID": "按 ID 批量获取会话",
+ "Get conversations in a group": "查询分组内会话",
+ "Get friend profiles": "查询指定好友资料",
+ "Get group application badge count": "获取入群申请角标数",
+ "Observe group application badge count": "观察群申请角标变化",
+ "Get group information": "查询指定群组资料",
+ "Get group member profiles": "查询指定群成员资料",
+ "Get group members": "分页查询群成员",
+ "Get group owners and admins": "获取群主和管理员",
+ "Get groups for a conversation": "查询会话所属分组",
+ "Get joined groups": "获取已加入群组",
+ "Get joined groups by page": "分页获取已加入群组",
+ "Get pending application count": "获取未处理好友申请数",
+ "Get pending group application count": "获取未处理入群申请数",
+ "Get received friend applications": "获取收到的好友申请",
+ "Get received group applications": "获取收到的入群申请",
+ "Get room credentials": "获取通话房间 Token",
+ "Get sent friend applications": "获取发出的好友申请",
+ "Get sent group applications": "获取发出的入群申请",
+ "Get subscribed user status": "查询已订阅用户状态",
+ "Get the @all tag": "获取 @所有人 标签",
+ "Get the blacklist": "获取黑名单",
+ "Get the conversation list": "获取会话列表",
+ "Get the friend list": "分页获取好友列表",
+ "Get typing status": "查询输入状态",
+ "Get user profiles": "获取用户资料",
+ "Get your profile": "获取当前用户资料",
+ "getConversationGroupIDsByConversationID": "查询会话所属的分组",
+ "getConversationGroupInfoWithConversations": "查询分组内的会话",
+ "getConversationGroups": "查询会话分组",
+ "Getting started": "快速开始",
+ "getting-started": "快速开始",
+ "group": "群组",
+ "Group": "群组",
+ "Group applications": "入群申请",
+ "Group applications overview": "入群申请概览",
+ "Group message read status": "群聊消息已读",
+ "Group member management overview": "群成员管理概览",
+ "Group member queries overview": "群成员查询概览",
+ "Group overview": "群组概览",
+ "Group permissions": "群权限与管理",
+ "Group profile and settings": "群资料与设置",
+ "Group queries overview": "群组查询概览",
+ "Handle call events": "处理通话事件",
+ "Hang up a call": "挂断通话",
+ "Hide a conversation": "隐藏会话",
+ "Hide all conversations": "隐藏全部会话",
+ "hide-a-conversation": "隐藏会话",
+ "Hiding and deleting conversations": "隐藏与删除会话",
+ "Insert a local direct message": "插入本地单聊消息",
+ "Insert a local group message": "插入本地群聊消息",
+ "Insert a local message": "插入本地消息",
+ "Invite or remove group members": "邀请或移除群成员",
+ "Invite users to a group": "邀请用户加入群组",
+ "Join, leave, or dismiss a group": "加入、退出或解散群组",
+ "Joining and leaving groups": "加入、退出与解散群组",
+ "joining-and-leaving-groups": "加入和退出群组",
+ "Leave a group": "退出群组",
+ "Load message context": "读取消息上下文",
+ "Load newer messages": "反向加载历史消息",
+ "Logging": "日志",
+ "Load older messages": "加载历史消息",
+ "Locate messages by ID": "按 ID 定位消息",
+ "logger": "日志",
+ "Logger": "日志",
+ "Manage conversation read status": "管理会话已读状态",
+ "Manage friend requests": "处理好友申请",
+ "Manage group administrators": "设置管理员",
+ "Manage group applications": "处理入群申请",
+ "Manage group message read receipts": "管理消息已读回执",
+ "Manage message read receipts": "管理消息已读回执",
+ "Manage typing status": "管理输入状态",
+ "Managing calls": "管理通话",
+ "Managing conversation groups": "管理会话分组",
+ "Managing conversations": "管理会话",
+ "Managing friends": "管理好友",
+ "Managing group applications": "管理入群申请",
+ "Managing group members": "管理群成员",
+ "Managing messages": "管理消息",
+ "Managing read status": "管理已读状态",
+ "managing-calls": "管理通话",
+ "managing-conversation-groups": "管理会话分组",
+ "managing-conversations": "管理会话",
+ "managing-friends": "管理好友",
+ "managing-group-applications": "管理入群申请",
+ "managing-group-members": "管理群成员",
+ "managing-messages": "管理消息",
+ "managing-read-status": "管理已读状态",
+ "Mark a conversation as read": "标记会话已读",
+ "Mark all conversations as read": "将全部会话标为已读",
+ "Mark or unmark a conversation": "标记或取消标记会话",
+ "Mention users in a message": "在消息中提及用户",
+ "message": "消息",
+ "Message": "消息",
+ "Message overview": "消息概览",
+ "Unread status and notifications": "未读与消息提醒",
+ "Message retention and privacy": "消息保留与隐私",
+ "Moderating groups": "群组管控",
+ "Moderating users": "用户黑名单",
+ "moderating-a-user": "用户黑名单",
+ "moderating-groups": "群组管控",
+ "Modify a message": "修改消息",
+ "modify-a-message": "修改消息",
+ "Mute a group or member": "禁言群组或群成员",
+ "Mute or unmute a group member": "设置群成员禁言",
+ "Online status": "在线状态",
+ "Online status overview": "在线状态概览",
+ "Open a conversation": "查询指定会话",
+ "Overview": "概览",
+ "overview-calling": "音视频通话概览",
+ "overview-conversation": "会话概览",
+ "overview-message": "消息概览",
+ "overview-user": "用户概览",
+ "Pin conversation messages": "置顶会话中的消息",
+ "Pin or unpin a conversation": "置顶或取消置顶会话",
+ "Pin or unpin a message": "置顶或取消置顶消息",
+ "Publish a group announcement": "发布或更新群公告",
+ "Receive custom business messages": "接收自定义业务消息",
+ "Receive messages": "接收消息",
+ "receive-messages": "接收消息",
+ "Receiving messages": "接收消息",
+ "receiving-messages": "接收消息",
+ "Reject a call": "拒绝通话",
+ "Reject a friend application": "拒绝好友申请",
+ "Reject a group application": "拒绝入群申请",
+ "Remove a user from the blacklist": "将用户移出黑名单",
+ "Remove conversations from groups": "从分组移除会话",
+ "Remove group members": "移除群成员",
+ "removeConversationsFromGroups": "从分组移除会话",
+ "Reorder conversation groups": "调整会话分组顺序",
+ "Relationships": "关系链",
+ "Reset group mention status": "重置群聊 @ 状态",
+ "Resolve a conversation ID": "获取会话 ID",
+ "Restore a pending invitation": "恢复待处理的通话邀请",
+ "Retrieve a conversation": "获取指定会话",
+ "Retrieve a conversation list": "获取会话列表",
+ "Retrieve a list of blocked users": "获取黑名单列表",
+ "Retrieve a list of friends": "获取好友列表",
+ "Retrieve a message list": "获取消息列表",
+ "Retrieve and search groups": "获取和搜索群组",
+ "Retrieve and update the current user profile": "获取和更新当前用户资料",
+ "Retrieve call information": "获取通话信息",
+ "Retrieve conversations": "获取会话",
+ "Retrieve group members": "获取群成员",
+ "Retrieve message history": "获取消息历史",
+ "Retrieve messages": "获取指定消息",
+ "Retrieve specified friend information": "获取指定好友信息",
+ "Retrieve specified messages": "按 ID 定位消息",
+ "Retrieve user online status": "获取用户在线状态",
+ "Retrieve users": "获取指定用户资料",
+ "retrieve-conversation-list": "获取会话列表",
+ "Retrieving and updating user information": "获取和更新用户资料",
+ "Retrieving call information": "通话恢复与房间信息",
+ "Retrieving conversations": "查询会话",
+ "Retrieving group members": "查询群成员",
+ "Retrieving groups": "查询群组",
+ "Retrieving messages": "查询消息",
+ "Retrieving users": "获取用户",
+ "retrieving-and-updating-user-information": "获取和更新用户资料",
+ "retrieving-call-information": "获取通话信息",
+ "retrieving-conversations": "获取会话",
+ "retrieving-group-members": "获取群成员",
+ "retrieving-groups": "获取群组",
+ "retrieving-messages": "获取消息",
+ "retrieving-users": "获取用户",
+ "Revoke a message": "撤回消息",
+ "revoke-a-message": "撤回消息",
+ "Save a local transcript": "保存本地转写结果",
+ "Schedule server message deletion": "定期删除服务端消息",
+ "Search friends": "搜索好友",
+ "Search conversations": "搜索会话",
+ "Search group members": "搜索群成员",
+ "Search groups": "搜索群组",
+ "Search messages": "搜索消息",
+ "search-messages": "搜索消息",
+ "Searching messages": "搜索消息",
+ "searching-messages": "搜索消息",
+ "Send a custom signal": "发送自定义信令",
+ "Send a friend application": "发送好友申请",
+ "Send a message": "发送消息",
+ "Send a message without OSS": "发送已上传的媒体消息",
+ "Send group read receipts": "上报群消息已读",
+ "Send your first message": "发送第一条消息",
+ "send-a-custom-signal": "发送自定义信令",
+ "send-first-message": "发送第一条消息",
+ "Sending custom signals": "发送自定义信令",
+ "Sending messages": "发送消息",
+ "sending-custom-signals": "发送自定义信令",
+ "sending-messages": "发送消息",
+ "Set a conversation": "设置会话",
+ "Set a conversation draft": "设置会话草稿",
+ "Set a conversation remark": "设置会话备注",
+ "Set conversation extra data": "设置会话扩展字段",
+ "Set conversation message reception": "设置会话消息接收方式",
+ "Set conversation settings": "设置会话属性",
+ "Set global message reception": "设置全局消息接收方式",
+ "Set friend request permissions": "设置好友添加权限",
+ "Set group extra data": "设置群组扩展字段",
+ "Set group join verification": "设置入群验证方式",
+ "Set group member extra data": "设置群成员扩展字段",
+ "Set local message extensions": "设置消息本地扩展",
+ "Set member friend request permission": "设置群内添加好友权限",
+ "Set member profile access": "设置成员资料查看权限",
+ "Set the burn duration": "设置阅后即焚时长",
+ "set-conversation-draft": "设置会话草稿",
+ "setConversationGroupOrder": "设置会话分组顺序",
+ "Start a group call": "发起群聊通话",
+ "Start a one-to-one call": "发起单聊通话",
+ "Start or handle a call": "发起或处理通话",
+ "Subscribe to online status": "订阅用户在线状态",
+ "Track file upload progress": "监听文件上传进度",
+ "Track message sending progress": "监听消息发送进度",
+ "Track the total unread count": "获取消息总未读数",
+ "Transcribe an audio file": "识别音频文字",
+ "Transcribe audio": "将音频转为文字",
+ "Transfer group owner": "转让群主",
+ "Transfer group ownership": "转让群主",
+ "Unsubscribe from online status": "取消订阅用户状态",
+ "Update a conversation group": "更新会话分组",
+ "Update a group member avatar": "更新群成员头像",
+ "Update a group nickname": "修改群内昵称",
+ "Update friend information": "更新好友资料",
+ "Update group fields": "更新群组字段",
+ "Update group information": "更新群组资料",
+ "Update group member information": "更新群成员资料",
+ "Update group profile": "更新群名称、简介和头像",
+ "Update or delete friends": "更新或删除好友",
+ "Update the user profile": "更新用户资料",
+ "Update typing status": "上报输入状态",
+ "Update your profile": "更新当前用户资料",
+ "updateConversationGroup": "更新会话分组",
+ "Upload a file": "上传文件",
+ "Upload files and track progress": "上传文件并跟踪进度",
+ "user": "用户",
+ "User": "用户",
+ "User overview": "用户概览",
+ "User profile": "用户资料",
+ "User profile overview": "用户资料概览",
+ "View group message readers": "查询群消息已读成员",
+ "View pinned messages": "查询会话置顶消息",
+ "OpenIM SDK for uni-app / uni-app x": "OpenIM uni-app / uni-app x SDK 概览",
+ "getConversationGroupByConversationID": "查询会话所属的分组",
+ "Install, initialize, and inspect the SDK": "安装、初始化并检查 SDK",
+ "Handle App lifecycle and device state": "处理 App 生命周期与设备状态",
+ "Update tokens and observe SDK sessions": "更新 Token 并观察 SDK 会话",
+ "Check group full-sync state": "检查群组全量同步状态",
+ "Translate text and messages": "翻译文本与消息",
+ "Handle data migration events": "处理数据迁移事件"
+}
diff --git a/data/structure/uniapp-sdk-doc-manifest.json b/data/structure/uniapp-sdk-doc-manifest.json
new file mode 100644
index 0000000000..1cf2931235
--- /dev/null
+++ b/data/structure/uniapp-sdk-doc-manifest.json
@@ -0,0 +1,18831 @@
+{
+ "schemaVersion": 1,
+ "sdkVersion": "0.2.0-rc.3",
+ "baseline": {
+ "privateCommit": "e71e3f68827f9f7af354526fecbaded25dc14de9",
+ "interfaceSha256": "acbe16c69ba4ddfa2e7bbdcf35a119c88801e93d960520db50de082c2e4234df",
+ "responseSchemaSha256": "a6a73ab3e368812cbe9b6355fed3edbe59b890aa6e8f73c69e3d06fd23a6c6e5"
+ },
+ "counts": {
+ "constants": 109,
+ "types": 237,
+ "operations": 162,
+ "eventSubscriptions": 81,
+ "eventControls": 2,
+ "events": 81
+ },
+ "constants": [
+ {
+ "id": 1,
+ "name": "OpenIMMessageStatusNotExist",
+ "type": "OpenIMMessageStatus",
+ "value": "0",
+ "signatureHash": "2a4b381a80b67e1204ce1408e1c9716d76bd127abb51b6e38bb412eb4ac2b281",
+ "edition": "public"
+ },
+ {
+ "id": 2,
+ "name": "OpenIMMessageStatusSending",
+ "type": "OpenIMMessageStatus",
+ "value": "1",
+ "signatureHash": "070e728a9a77022fe21a407bbe20cd4b5563db65d7eba0c96d4013d6a21c7c15",
+ "edition": "public"
+ },
+ {
+ "id": 3,
+ "name": "OpenIMMessageStatusSucceed",
+ "type": "OpenIMMessageStatus",
+ "value": "2",
+ "signatureHash": "4d57b2f3a1229cc4076674e4f6efe40266f6f4914d36828b56f3a6327af95dbd",
+ "edition": "public"
+ },
+ {
+ "id": 4,
+ "name": "OpenIMMessageStatusFailed",
+ "type": "OpenIMMessageStatus",
+ "value": "3",
+ "signatureHash": "32072ad37fba2c7eb5d8e8aea0db4c9c64c0b531c12f9e6cddf8cdf555b27f99",
+ "edition": "public"
+ },
+ {
+ "id": 5,
+ "name": "OpenIMMessageStatusDeleted",
+ "type": "OpenIMMessageStatus",
+ "value": "4",
+ "signatureHash": "194d15beeaefb3cda73b2259ac4e00757cc25bb5a63ae50c5052affdc38dd1de",
+ "edition": "public"
+ },
+ {
+ "id": 6,
+ "name": "OpenIMMessageStatusFiltered",
+ "type": "OpenIMMessageStatus",
+ "value": "5",
+ "signatureHash": "7012a2915edc26d1988dd663a3d30c4b2ed5b8e22a1dd0f077e74c7937508098",
+ "edition": "public"
+ },
+ {
+ "id": 7,
+ "name": "OpenIMPlatformIOS",
+ "type": "OpenIMPlatform",
+ "value": "1",
+ "signatureHash": "e6e38b8de87db7b61c243148707ecdfdeb061ae861c5f648d17c0aa8c7106539",
+ "edition": "public"
+ },
+ {
+ "id": 8,
+ "name": "OpenIMPlatformAndroid",
+ "type": "OpenIMPlatform",
+ "value": "2",
+ "signatureHash": "d4a78094e10c034f911c5673351e432e483c31b78816ab2fecc62512ef0ac57b",
+ "edition": "public"
+ },
+ {
+ "id": 9,
+ "name": "OpenIMPlatformWindows",
+ "type": "OpenIMPlatform",
+ "value": "3",
+ "signatureHash": "b41afae1e8edeeafde20ae166a139e47053e7eb4c0def7c984ceac67ddbdf206",
+ "edition": "public"
+ },
+ {
+ "id": 10,
+ "name": "OpenIMPlatformMacOSX",
+ "type": "OpenIMPlatform",
+ "value": "4",
+ "signatureHash": "90816949b6b443ef2496b58eebb6091afa35050a3400d4fb94da32d431b55ae7",
+ "edition": "public"
+ },
+ {
+ "id": 11,
+ "name": "OpenIMPlatformWeb",
+ "type": "OpenIMPlatform",
+ "value": "5",
+ "signatureHash": "f5376e51c3784fbbbf99e841924ec8888b018772799dde5c8162035adce7093f",
+ "edition": "public"
+ },
+ {
+ "id": 12,
+ "name": "OpenIMPlatformMiniWeb",
+ "type": "OpenIMPlatform",
+ "value": "6",
+ "signatureHash": "cb850fe970c49f30459c3106e1c94fd91d21d089c14dd5a72f7550b0738fbb0f",
+ "edition": "public"
+ },
+ {
+ "id": 13,
+ "name": "OpenIMPlatformLinux",
+ "type": "OpenIMPlatform",
+ "value": "7",
+ "signatureHash": "4e0bbbb9c862eaaff848bdeae582242b0c42091058a2f442da707d137f02079d",
+ "edition": "public"
+ },
+ {
+ "id": 14,
+ "name": "OpenIMPlatformAndroidPad",
+ "type": "OpenIMPlatform",
+ "value": "8",
+ "signatureHash": "060296c24e70b3c35c56c8a541e712c5be1818538c0fb3870d733d2a00cd2e4d",
+ "edition": "public"
+ },
+ {
+ "id": 15,
+ "name": "OpenIMPlatformIPad",
+ "type": "OpenIMPlatform",
+ "value": "9",
+ "signatureHash": "a65f7f7127fc25fee8d1a30d4ba3c27245bea17b5c162492f0ea9e06e06cfd49",
+ "edition": "public"
+ },
+ {
+ "id": 16,
+ "name": "OpenIMPlatformAdmin",
+ "type": "OpenIMPlatform",
+ "value": "10",
+ "signatureHash": "88769580d90807f6b33a082b6280a63c75513610306473852679d469492bd8d7",
+ "edition": "public"
+ },
+ {
+ "id": 17,
+ "name": "OpenIMPlatformHarmony",
+ "type": "OpenIMPlatform",
+ "value": "11",
+ "signatureHash": "d4d286cb1276a7e9ebe85b55dd6e6b0f4a8c49009e780f37e557338c10acedc4",
+ "edition": "public"
+ },
+ {
+ "id": 18,
+ "name": "OpenIMLogLevelPanic",
+ "type": "OpenIMLogLevel",
+ "value": "0",
+ "signatureHash": "c0a8c5932fe32bcf89c963a2159e7d1c7795204b16b550de80d39253f8b2d7ed",
+ "edition": "public"
+ },
+ {
+ "id": 19,
+ "name": "OpenIMLogLevelFatal",
+ "type": "OpenIMLogLevel",
+ "value": "1",
+ "signatureHash": "8e0068bb3abe2ba62268a777aa5cb304d06bb2f2655c22c43e8b044ddf5405e3",
+ "edition": "public"
+ },
+ {
+ "id": 20,
+ "name": "OpenIMLogLevelError",
+ "type": "OpenIMLogLevel",
+ "value": "2",
+ "signatureHash": "b90392e54565f0a3b45ca83979173727804d8b4dc84fb3152af1b0b186ff2d8b",
+ "edition": "public"
+ },
+ {
+ "id": 21,
+ "name": "OpenIMLogLevelWarn",
+ "type": "OpenIMLogLevel",
+ "value": "3",
+ "signatureHash": "4e98ffd53d102275b511c53fd32dc3ec14000d0b5c96c2fb7954da5cd1cefa99",
+ "edition": "public"
+ },
+ {
+ "id": 22,
+ "name": "OpenIMLogLevelInfo",
+ "type": "OpenIMLogLevel",
+ "value": "4",
+ "signatureHash": "feac04d582af5d99464224e52e576c9780f22538363164c3208dc1a59a317122",
+ "edition": "public"
+ },
+ {
+ "id": 23,
+ "name": "OpenIMLogLevelDebug",
+ "type": "OpenIMLogLevel",
+ "value": "5",
+ "signatureHash": "ec21ea478d6357ef935f4070688e3d1075965325c75d9725d94539c517697229",
+ "edition": "public"
+ },
+ {
+ "id": 24,
+ "name": "OpenIMLogLevelVerbose",
+ "type": "OpenIMLogLevel",
+ "value": "6",
+ "signatureHash": "7b8aac06c6557b7dfc445ef97babc4fc5ff240c7d3db31a4af5a2474601f9fbf",
+ "edition": "public"
+ },
+ {
+ "id": 25,
+ "name": "OpenIMMessageTypeText",
+ "type": "OpenIMMessageType",
+ "value": "101",
+ "signatureHash": "e59ced7cb303c70e55a67099cbdd00fe688ea0c0648bba8b319be58e14ed71f9",
+ "edition": "public"
+ },
+ {
+ "id": 26,
+ "name": "OpenIMMessageTypePicture",
+ "type": "OpenIMMessageType",
+ "value": "102",
+ "signatureHash": "e5c2fe4cba1366314eb30b4b4cfd2acba61284a2d4958bc52e5ea07a86cf3a32",
+ "edition": "public"
+ },
+ {
+ "id": 27,
+ "name": "OpenIMMessageTypeVoice",
+ "type": "OpenIMMessageType",
+ "value": "103",
+ "signatureHash": "e0adce21bb0e9b8bc66f1770d774aa64517c3cae10531ddb6568f65b6edbe83f",
+ "edition": "public"
+ },
+ {
+ "id": 28,
+ "name": "OpenIMMessageTypeVideo",
+ "type": "OpenIMMessageType",
+ "value": "104",
+ "signatureHash": "96a8ec045bec323a2af3a707aba03f95c68332fc5cd106aaa0cc1b3cf98c67b5",
+ "edition": "public"
+ },
+ {
+ "id": 29,
+ "name": "OpenIMMessageTypeFile",
+ "type": "OpenIMMessageType",
+ "value": "105",
+ "signatureHash": "d46a65a1d61a164d70d68bb4df0c986feb89385251dac68e1003e57612045242",
+ "edition": "public"
+ },
+ {
+ "id": 30,
+ "name": "OpenIMMessageTypeAtText",
+ "type": "OpenIMMessageType",
+ "value": "106",
+ "signatureHash": "7b76708a3e80ae11759af633b060abc2cad41b9736fc7f72bdbeee876e55f775",
+ "edition": "public"
+ },
+ {
+ "id": 31,
+ "name": "OpenIMMessageTypeMerge",
+ "type": "OpenIMMessageType",
+ "value": "107",
+ "signatureHash": "7ef0baf1e0b66a32ba28842ea3b474f5c045648de6d11cbde85cde4746540473",
+ "edition": "public"
+ },
+ {
+ "id": 32,
+ "name": "OpenIMMessageTypeCard",
+ "type": "OpenIMMessageType",
+ "value": "108",
+ "signatureHash": "87446dbf6c07eee050f3677be1bf8f8af8c48431d64059574ce94bd131ab2dff",
+ "edition": "public"
+ },
+ {
+ "id": 33,
+ "name": "OpenIMMessageTypeLocation",
+ "type": "OpenIMMessageType",
+ "value": "109",
+ "signatureHash": "180aa305e0e9a3541fcb46f1756c0789b8cea3fbee27d10ca369d59feccf2e4e",
+ "edition": "public"
+ },
+ {
+ "id": 34,
+ "name": "OpenIMMessageTypeCustom",
+ "type": "OpenIMMessageType",
+ "value": "110",
+ "signatureHash": "184c7c18e9d595c7b3bebca29d519869407fd459603a0453df6d9bbb6d3965d6",
+ "edition": "public"
+ },
+ {
+ "id": 35,
+ "name": "OpenIMMessageTypeRevoke",
+ "type": "OpenIMMessageType",
+ "value": "111",
+ "signatureHash": "73e358e0e75eec7fd893ff532d13ccef60effa8c621f751e8706f04816fa575f",
+ "edition": "public"
+ },
+ {
+ "id": 36,
+ "name": "OpenIMMessageTypeTyping",
+ "type": "OpenIMMessageType",
+ "value": "113",
+ "signatureHash": "a699dd4ac56aab9a14dbdde4dc26f9033fefe3c9c92c6efc5a835c269bd299f4",
+ "edition": "public"
+ },
+ {
+ "id": 37,
+ "name": "OpenIMMessageTypeQuote",
+ "type": "OpenIMMessageType",
+ "value": "114",
+ "signatureHash": "f034d2eb36576016b460885877e0c6a8caeeaa4bb0e9a4c416947eefc20ad8e2",
+ "edition": "public"
+ },
+ {
+ "id": 38,
+ "name": "OpenIMMessageTypeFace",
+ "type": "OpenIMMessageType",
+ "value": "115",
+ "signatureHash": "6fac65dc2a469f74ef365769a110e5384543defd0a4abbc8187e7c5720671ae4",
+ "edition": "public"
+ },
+ {
+ "id": 39,
+ "name": "OpenIMMessageTypeAdvancedText",
+ "type": "OpenIMMessageType",
+ "value": "117",
+ "signatureHash": "3a35eb1fe16a5888890844e6e747270e9df67a7b8238ffc267ec1d1b8d203b0f",
+ "edition": "public"
+ },
+ {
+ "id": 40,
+ "name": "OpenIMMessageTypeMarkdownText",
+ "type": "OpenIMMessageType",
+ "value": "118",
+ "signatureHash": "df5d043f97af2aa804122585527dab19c7e23da0b92291174c9f5cedfd5cc93f",
+ "edition": "public"
+ },
+ {
+ "id": 41,
+ "name": "OpenIMMessageTypeCustomNotTriggerConversation",
+ "type": "OpenIMMessageType",
+ "value": "119",
+ "signatureHash": "4cec7fa964ead6b7dd79ea8ca27ab13dcb288672776f1715b704a8c45b6d276c",
+ "edition": "public"
+ },
+ {
+ "id": 42,
+ "name": "OpenIMMessageTypeCustomOnlineOnly",
+ "type": "OpenIMMessageType",
+ "value": "120",
+ "signatureHash": "f073abc70384000b818510f4ff94e72283ae053fdfce4a3a642edd35a9b68525",
+ "edition": "public"
+ },
+ {
+ "id": 43,
+ "name": "OpenIMMessageTypeReactionModifier",
+ "type": "OpenIMMessageType",
+ "value": "121",
+ "signatureHash": "1409dcead0595e33e1f2d89d6bb0022052effee02fd702a2aa5db60700e5ffe4",
+ "edition": "public"
+ },
+ {
+ "id": 44,
+ "name": "OpenIMMessageTypeReactionDeleter",
+ "type": "OpenIMMessageType",
+ "value": "122",
+ "signatureHash": "4ac105d88abe582979595f9e4f88549b8a27670b586d39e75a96d7988086f1a5",
+ "edition": "public"
+ },
+ {
+ "id": 45,
+ "name": "OpenIMMessageTypeStream",
+ "type": "OpenIMMessageType",
+ "value": "143",
+ "signatureHash": "08831b08629d84dfed0f81b8d824321b1738f4808af02766e585f05b9aab678d",
+ "edition": "public"
+ },
+ {
+ "id": 46,
+ "name": "OpenIMMessageTypeCommon",
+ "type": "OpenIMMessageType",
+ "value": "200",
+ "signatureHash": "72fd4e17dc1564f0462b2c673fac4346f40e090e198751f8c167ebfab01107db",
+ "edition": "public"
+ },
+ {
+ "id": 47,
+ "name": "OpenIMMessageTypeGroupMsg",
+ "type": "OpenIMMessageType",
+ "value": "201",
+ "signatureHash": "479d65c81f9487fadd882dc9b7207a20581b026b3cf809adae7b11dbea367b66",
+ "edition": "public"
+ },
+ {
+ "id": 48,
+ "name": "OpenIMMessageTypeSignalMsg",
+ "type": "OpenIMMessageType",
+ "value": "202",
+ "signatureHash": "0633498bf4aa0cebabc10c5a02c11d78b9b774e087813e663c75e49a33fc03c8",
+ "edition": "public"
+ },
+ {
+ "id": 49,
+ "name": "OpenIMMessageTypeCustomNotification",
+ "type": "OpenIMMessageType",
+ "value": "203",
+ "signatureHash": "294ae910cc0dae841faff0c22dfda6c16b212f224a5faa6fb67c17b6882b349b",
+ "edition": "public"
+ },
+ {
+ "id": 50,
+ "name": "OpenIMMessageTypeFriendApplicationApproved",
+ "type": "OpenIMMessageType",
+ "value": "1201",
+ "signatureHash": "e917437a1bf81159bd18139502aa54fd1723dc57f6517c1a901d9982ba0ddb85",
+ "edition": "public"
+ },
+ {
+ "id": 51,
+ "name": "OpenIMMessageTypeFriendApplicationRejected",
+ "type": "OpenIMMessageType",
+ "value": "1202",
+ "signatureHash": "d9c885eab0e64b8d8ba4664111b5995833a373f285027865d897b4bfe62398c0",
+ "edition": "public"
+ },
+ {
+ "id": 52,
+ "name": "OpenIMMessageTypeFriendApplication",
+ "type": "OpenIMMessageType",
+ "value": "1203",
+ "signatureHash": "6bb4694b38d8d7154b74f5cdcd1005737951fc2566e482a1214b0af0252390ad",
+ "edition": "public"
+ },
+ {
+ "id": 53,
+ "name": "OpenIMMessageTypeFriendAdded",
+ "type": "OpenIMMessageType",
+ "value": "1204",
+ "signatureHash": "f81e08c5fe98bebebe6191b221066e06951e27c459a03a11f285fa01e99e741a",
+ "edition": "public"
+ },
+ {
+ "id": 54,
+ "name": "OpenIMMessageTypeFriendDeleted",
+ "type": "OpenIMMessageType",
+ "value": "1205",
+ "signatureHash": "9bbb020ec836e0261231ba2e667fa8c71512cb61467c370c5e0e077acd98097a",
+ "edition": "public"
+ },
+ {
+ "id": 55,
+ "name": "OpenIMMessageTypeFriendRemarkSet",
+ "type": "OpenIMMessageType",
+ "value": "1206",
+ "signatureHash": "b2ab8dee0430fced5f0ab29cd18e8918a2a55103fc9cf4c7d6e7731de7af7271",
+ "edition": "public"
+ },
+ {
+ "id": 56,
+ "name": "OpenIMMessageTypeBlackAdded",
+ "type": "OpenIMMessageType",
+ "value": "1207",
+ "signatureHash": "e7d92f8ca77eb51d6cc1f02ba38b07f586b5990afaa0c2d4038c08f4ee49297e",
+ "edition": "public"
+ },
+ {
+ "id": 57,
+ "name": "OpenIMMessageTypeBlackDeleted",
+ "type": "OpenIMMessageType",
+ "value": "1208",
+ "signatureHash": "29edb1aed1677b93f3927b6d6d717ee9b5e4cd6fd81dab632e0c44e92cfb866e",
+ "edition": "public"
+ },
+ {
+ "id": 58,
+ "name": "OpenIMMessageTypeFriendInfoUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1209",
+ "signatureHash": "4a50fd797c30391e94840ed101f5be09f3ff2884e8f362e7c77ec82c969470e2",
+ "edition": "public"
+ },
+ {
+ "id": 59,
+ "name": "OpenIMMessageTypeFriendsInfoUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1210",
+ "signatureHash": "7b871aead5bb83feae308459e09b5f1c38f41126cb19c138fe2c67d1c6ef5578",
+ "edition": "public"
+ },
+ {
+ "id": 60,
+ "name": "OpenIMMessageTypeConversationChanged",
+ "type": "OpenIMMessageType",
+ "value": "1300",
+ "signatureHash": "3efa94bfecd5a9fc8904e5c7b66f2f994b6855a442e446b8503b77bb7d02a159",
+ "edition": "public"
+ },
+ {
+ "id": 61,
+ "name": "OpenIMMessageTypeUserInfoUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1303",
+ "signatureHash": "7dd1b75a310cfdd8b01b6306af9756ba21a7dc03463a518ba063b94348ed1897",
+ "edition": "public"
+ },
+ {
+ "id": 62,
+ "name": "OpenIMMessageTypeUserStatusChanged",
+ "type": "OpenIMMessageType",
+ "value": "1304",
+ "signatureHash": "158f2115e8c1b8ff6da7ca4e023408e525a12d7d3d165214001cd12940b20322",
+ "edition": "public"
+ },
+ {
+ "id": 63,
+ "name": "OpenIMMessageTypeUserSubscribeOnlineStatus",
+ "type": "OpenIMMessageType",
+ "value": "1308",
+ "signatureHash": "8ae42b719541a04b42bcafa017f1f3fe318df82ab8a230b993966f01e2d445ca",
+ "edition": "public"
+ },
+ {
+ "id": 64,
+ "name": "OpenIMMessageTypeOANotification",
+ "type": "OpenIMMessageType",
+ "value": "1400",
+ "signatureHash": "56c83fb8f874a6f18ebddebb8583a1e61d3872c3f159705a6d063e4c2ba56ecd",
+ "edition": "public"
+ },
+ {
+ "id": 65,
+ "name": "OpenIMMessageTypeGroupCreated",
+ "type": "OpenIMMessageType",
+ "value": "1501",
+ "signatureHash": "bd1b1a645a92dbe313e457b961c01d012e55b2cc20e126cdd06cbf5622e7c9eb",
+ "edition": "public"
+ },
+ {
+ "id": 66,
+ "name": "OpenIMMessageTypeGroupInfoUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1502",
+ "signatureHash": "80c9fb644fba0c4cbdf9dd3d2195c696ba41aa7b64cda45ee14e5a0450732f2c",
+ "edition": "public"
+ },
+ {
+ "id": 67,
+ "name": "OpenIMMessageTypeJoinGroupApplication",
+ "type": "OpenIMMessageType",
+ "value": "1503",
+ "signatureHash": "484a7c4eecb280e27333f4b80f7831ebb4b7f1d1f25764abec56633afe66060f",
+ "edition": "public"
+ },
+ {
+ "id": 68,
+ "name": "OpenIMMessageTypeMemberQuit",
+ "type": "OpenIMMessageType",
+ "value": "1504",
+ "signatureHash": "ba0ffeefdf7ff09645fbcec9a4c0ec06c4507c90768e2410e3e4d236e8ebe0d2",
+ "edition": "public"
+ },
+ {
+ "id": 69,
+ "name": "OpenIMMessageTypeGroupApplicationAccepted",
+ "type": "OpenIMMessageType",
+ "value": "1505",
+ "signatureHash": "a281ff8f075f64313f182378715eabbd502bf6e187b43170c0594f383f55e8a4",
+ "edition": "public"
+ },
+ {
+ "id": 70,
+ "name": "OpenIMMessageTypeGroupApplicationRejected",
+ "type": "OpenIMMessageType",
+ "value": "1506",
+ "signatureHash": "465ff14d67e0cd9ef9376f36e1584e7de775aa5211fca1097158254926dc18c0",
+ "edition": "public"
+ },
+ {
+ "id": 71,
+ "name": "OpenIMMessageTypeGroupOwnerTransferred",
+ "type": "OpenIMMessageType",
+ "value": "1507",
+ "signatureHash": "2e3568f962310719898e8c49fe4c6f24825b6e71e00dd10cd80e56052bdcb5b9",
+ "edition": "public"
+ },
+ {
+ "id": 72,
+ "name": "OpenIMMessageTypeMemberKicked",
+ "type": "OpenIMMessageType",
+ "value": "1508",
+ "signatureHash": "eb7f8288a4921d76622f749e49927baefe1127511d025f7319216058434b6149",
+ "edition": "public"
+ },
+ {
+ "id": 73,
+ "name": "OpenIMMessageTypeMemberInvited",
+ "type": "OpenIMMessageType",
+ "value": "1509",
+ "signatureHash": "cd9e309b187ff3166aa66aff02d39798bb4da9a0728ac2e71e83b784bbf12c88",
+ "edition": "public"
+ },
+ {
+ "id": 74,
+ "name": "OpenIMMessageTypeMemberEnter",
+ "type": "OpenIMMessageType",
+ "value": "1510",
+ "signatureHash": "5ccccee453e561c6a1c7c22236049d85b7c7cac4f1f878e56ebc77626da334d6",
+ "edition": "public"
+ },
+ {
+ "id": 75,
+ "name": "OpenIMMessageTypeGroupDismissed",
+ "type": "OpenIMMessageType",
+ "value": "1511",
+ "signatureHash": "9b99cb57cce0e84205459f5cb4db94eda23e7563a8f5d51b6386c9dc76671bb8",
+ "edition": "public"
+ },
+ {
+ "id": 76,
+ "name": "OpenIMMessageTypeGroupMemberMuted",
+ "type": "OpenIMMessageType",
+ "value": "1512",
+ "signatureHash": "c0d5d8de0202e47af2b8ac939362a225e7de4af12ae2b9669f15a0c6d01d63a7",
+ "edition": "public"
+ },
+ {
+ "id": 77,
+ "name": "OpenIMMessageTypeGroupMemberCancelMuted",
+ "type": "OpenIMMessageType",
+ "value": "1513",
+ "signatureHash": "ae0fab64c6dcdebd2a70c961ccb57b4776278bbc3abf221a5870cba7621a42e6",
+ "edition": "public"
+ },
+ {
+ "id": 78,
+ "name": "OpenIMMessageTypeGroupMuted",
+ "type": "OpenIMMessageType",
+ "value": "1514",
+ "signatureHash": "ed1982e496801073ae7d26867cabee6fccd4a3c3ba4a0fc143417f808b801640",
+ "edition": "public"
+ },
+ {
+ "id": 79,
+ "name": "OpenIMMessageTypeGroupCancelMuted",
+ "type": "OpenIMMessageType",
+ "value": "1515",
+ "signatureHash": "f6bac2a5eb233123fbd5e8802edeb8894fb70e4922860de34253ad1c216a8ef2",
+ "edition": "public"
+ },
+ {
+ "id": 80,
+ "name": "OpenIMMessageTypeGroupMemberInfoUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1516",
+ "signatureHash": "5c045cbc1cc24ef75bd867265860cf05f160df31d539a1a184e2c72e7a805215",
+ "edition": "public"
+ },
+ {
+ "id": 81,
+ "name": "OpenIMMessageTypeGroupMemberSetToAdmin",
+ "type": "OpenIMMessageType",
+ "value": "1517",
+ "signatureHash": "e5b2c2407efa9abb7b8ba646f81ea075595e854d91eec0a9d84516b514c291f7",
+ "edition": "public"
+ },
+ {
+ "id": 82,
+ "name": "OpenIMMessageTypeGroupMemberSetToOrdinaryUser",
+ "type": "OpenIMMessageType",
+ "value": "1518",
+ "signatureHash": "b743e9afb175eb6c2d7e2a28ddc883144eb4be3da70b34b7bdc82d618f35ac08",
+ "edition": "public"
+ },
+ {
+ "id": 83,
+ "name": "OpenIMMessageTypeGroupAnnouncementUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1519",
+ "signatureHash": "c0a5857216c66ed71859cfa5cfae3892717db278596ae6fd56f038f93452aeb9",
+ "edition": "public"
+ },
+ {
+ "id": 84,
+ "name": "OpenIMMessageTypeGroupNameUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1520",
+ "signatureHash": "c1b6e4c0a8a99c8d24e125fd9def524a4d4bb5de6f25ba640286f95cbc3f83e0",
+ "edition": "public"
+ },
+ {
+ "id": 85,
+ "name": "OpenIMMessageTypeSuperGroupUpdated",
+ "type": "OpenIMMessageType",
+ "value": "1651",
+ "signatureHash": "42a3e7a5324c3eea35a9b960988ecfeda75906e698ed4bea846c275945eec3f3",
+ "edition": "public"
+ },
+ {
+ "id": 86,
+ "name": "OpenIMMessageTypeMsgDeleted",
+ "type": "OpenIMMessageType",
+ "value": "1652",
+ "signatureHash": "496eae88bdd81bf7040a4eaedb13340dc690b2f8179328b8a51d731440ffe071",
+ "edition": "public"
+ },
+ {
+ "id": 87,
+ "name": "OpenIMMessageTypeBurnMessageChange",
+ "type": "OpenIMMessageType",
+ "value": "1701",
+ "signatureHash": "07f3b0fd30bab3a763ea9c2bbc7582c8a7168e5a3bdd5d5a680f82de2d724b00",
+ "edition": "public"
+ },
+ {
+ "id": 88,
+ "name": "OpenIMMessageTypeConversationPrivateChat",
+ "type": "OpenIMMessageType",
+ "value": "1701",
+ "signatureHash": "41302b1649327e5b43328bbbc928e0229f2f27878b4b3cf37cc173924f6db317",
+ "edition": "public"
+ },
+ {
+ "id": 89,
+ "name": "OpenIMMessageTypeConversationUnread",
+ "type": "OpenIMMessageType",
+ "value": "1702",
+ "signatureHash": "2554e6b9a8e42a9713008b325d8161e24f6397202150aec964153ad60d305203",
+ "edition": "public"
+ },
+ {
+ "id": 90,
+ "name": "OpenIMMessageTypeClearConversation",
+ "type": "OpenIMMessageType",
+ "value": "1703",
+ "signatureHash": "9b03e7b7d33ea062af3be9ab6b11295fdda136e8b1e9e6933613267971c5d028",
+ "edition": "public"
+ },
+ {
+ "id": 91,
+ "name": "OpenIMMessageTypeConversationGroupChanged",
+ "type": "OpenIMMessageType",
+ "value": "1704",
+ "signatureHash": "11fd2db040c40c59f28425dbaabb7effd1c535c056862c8cbe710a5856741450",
+ "edition": "public"
+ },
+ {
+ "id": 92,
+ "name": "OpenIMMessageTypeBusinessNotification",
+ "type": "OpenIMMessageType",
+ "value": "2001",
+ "signatureHash": "2e090397c74a4a655ac236f1fb8bff5560205adb8a8ebfb8b3262217461a5ca7",
+ "edition": "public"
+ },
+ {
+ "id": 93,
+ "name": "OpenIMMessageTypeRevokeMessage",
+ "type": "OpenIMMessageType",
+ "value": "2101",
+ "signatureHash": "dfb60feb5232a1303a4a5aa3391e94e53678974a214cbd65980dbe9e06469418",
+ "edition": "public"
+ },
+ {
+ "id": 94,
+ "name": "OpenIMMessageTypeDeleteMessages",
+ "type": "OpenIMMessageType",
+ "value": "2102",
+ "signatureHash": "1a021e3a15c68b570ac2c2bb28f3338b5003f925e0638e609716301d9604a8e1",
+ "edition": "public"
+ },
+ {
+ "id": 95,
+ "name": "OpenIMMessageTypeModifyMessage",
+ "type": "OpenIMMessageType",
+ "value": "2103",
+ "signatureHash": "e9f254a20508cd856176a287a18261996c7ffbd0d86b5adcefea1b676bdde0d2",
+ "edition": "public"
+ },
+ {
+ "id": 96,
+ "name": "OpenIMMessageTypeDeleteUserAllMessagesInConversation",
+ "type": "OpenIMMessageType",
+ "value": "2150",
+ "signatureHash": "212c96d6b66c26acf56219978140a8e9923df51902da9111234969e14103df21",
+ "edition": "public"
+ },
+ {
+ "id": 97,
+ "name": "OpenIMMessageTypeHasReadReceipt",
+ "type": "OpenIMMessageType",
+ "value": "2200",
+ "signatureHash": "16dc95633a698fc1af48f1d1208418f2cf26a09595260fd73aa5ca2f15de79fc",
+ "edition": "public"
+ },
+ {
+ "id": 98,
+ "name": "OpenIMMessageTypeHasResetUnreadReceipt",
+ "type": "OpenIMMessageType",
+ "value": "2210",
+ "signatureHash": "eba37f5670dd25c39aca09240f9e2e0829419b2b0fb8bcea18047da65ab2760f",
+ "edition": "public"
+ },
+ {
+ "id": 99,
+ "name": "OpenIMMessageTypeHasGroupReadReceipt",
+ "type": "OpenIMMessageType",
+ "value": "2300",
+ "signatureHash": "bf64c05ff943cf993073771fc7325410f51077b919b8fc2142f28197005767a2",
+ "edition": "public"
+ },
+ {
+ "id": 100,
+ "name": "OpenIMMessageTypePinned",
+ "type": "OpenIMMessageType",
+ "value": "2400",
+ "signatureHash": "c10057828a57a53d32efeefa64280f84c49fe9f584031a9b19f24e42d7d8aea5",
+ "edition": "public"
+ },
+ {
+ "id": 101,
+ "name": "OpenIMMessageTypePinnedRead",
+ "type": "OpenIMMessageType",
+ "value": "2401",
+ "signatureHash": "df316b0c18a9cc4abb85fdc9c0ecc9b19f11a7022fdcbd5f6481099cc4c6e11c",
+ "edition": "public"
+ },
+ {
+ "id": 102,
+ "name": "OpenIMMessageTypeStreamNotification",
+ "type": "OpenIMMessageType",
+ "value": "2500",
+ "signatureHash": "777e3161b61a07a8f97bd4468b47fb9150b36ce50a22416929fc9b00bd6b4fef",
+ "edition": "public"
+ },
+ {
+ "id": 103,
+ "name": "OpenIMSessionTypeSingle",
+ "type": "OpenIMSessionType",
+ "value": "1",
+ "signatureHash": "68748002bd1f8251ec2268aaacf2518bc5cc40b14490fe02fc46fc39cec9e707",
+ "edition": "public"
+ },
+ {
+ "id": 104,
+ "name": "OpenIMSessionTypeWriteGroup",
+ "type": "OpenIMSessionType",
+ "value": "2",
+ "signatureHash": "61496eeda0e9535aae6221dabcf64dde69037008568b24a07bbf941cd79105e2",
+ "edition": "public"
+ },
+ {
+ "id": 105,
+ "name": "OpenIMSessionTypeGroup",
+ "type": "OpenIMSessionType",
+ "value": "3",
+ "signatureHash": "7f21ec4de72cc512a81855fdd6641d93f62303df49ff39f5cda2c6f63ca86ee7",
+ "edition": "public"
+ },
+ {
+ "id": 106,
+ "name": "OpenIMSessionTypeNotification",
+ "type": "OpenIMSessionType",
+ "value": "4",
+ "signatureHash": "ba39713f1abecc80e5a23cb582148bf460a41cd00c3ae0947772d212274b0b73",
+ "edition": "public"
+ },
+ {
+ "id": 107,
+ "name": "OpenIMLoginStatusLogout",
+ "type": "OpenIMLoginStatus",
+ "value": "1",
+ "signatureHash": "7c91f0aad42da1f3066a53034ce7e660fb6149904d880c73050c465301a326ec",
+ "edition": "public"
+ },
+ {
+ "id": 108,
+ "name": "OpenIMLoginStatusLogging",
+ "type": "OpenIMLoginStatus",
+ "value": "2",
+ "signatureHash": "a6df080b6db816fd30b632a66132e6dff4e7b3085ff3f276bb1408d406647e76",
+ "edition": "public"
+ },
+ {
+ "id": 109,
+ "name": "OpenIMLoginStatusLogged",
+ "type": "OpenIMLoginStatus",
+ "value": "3",
+ "signatureHash": "83d5ad7e02193fd11100ab63e2e9f5382d7c244807aa01156f24f11d129c00f5",
+ "edition": "public"
+ }
+ ],
+ "types": [
+ {
+ "id": 1001,
+ "name": "OpenIMMessageStatus",
+ "declaration": "export type OpenIMMessageStatus = 0 | 1 | 2 | 3 | 4 | 5",
+ "signatureHash": "b2f9f6298304e038fd8b54d90b728663fe36c3f9a9aa258f1fcfdd87644a5048",
+ "edition": "public"
+ },
+ {
+ "id": 1002,
+ "name": "OpenIMPlatform",
+ "declaration": "export type OpenIMPlatform = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11",
+ "signatureHash": "c7ecca9d16336958a9f6cf5d43d33585b9b70f8884255a1b7ee5cfa99511a700",
+ "edition": "public"
+ },
+ {
+ "id": 1003,
+ "name": "OpenIMLogLevel",
+ "declaration": "export type OpenIMLogLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6",
+ "signatureHash": "8f418680b6af67c6d8c0221fc8d0d18d3f058b45d7ada4eabf8a200cfb714425",
+ "edition": "public"
+ },
+ {
+ "id": 1004,
+ "name": "OpenIMMessageType",
+ "declaration": "export type OpenIMMessageType =\n 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 |\n 111 | 113 | 114 | 115 | 117 | 118 | 119 | 120 | 121 | 122 |\n 143 | 200 | 201 | 202 | 203 | 1201 | 1202 | 1203 | 1204 |\n 1205 | 1206 | 1207 | 1208 | 1209 | 1210 | 1300 | 1303 |\n 1304 | 1305 | 1306 | 1307 | 1308 | 1400 | 1501 | 1502 |\n 1503 | 1504 | 1505 | 1506 | 1507 | 1508 | 1509 | 1510 |\n 1511 | 1512 | 1513 | 1514 | 1515 | 1516 | 1517 | 1518 |\n 1519 | 1520 | 1651 | 1652 | 1701 | 1702 | 1703 | 1704 |\n 2001 | 2101 | 2102 | 2103 | 2150 | 2200 | 2210 | 2300 |\n 2400 | 2401 | 2500",
+ "signatureHash": "a896503a3dacf7674d5f9d9ceb3e70390cfc0551a99654263940bd1a21873807",
+ "edition": "public"
+ },
+ {
+ "id": 1005,
+ "name": "OpenIMSessionType",
+ "declaration": "export type OpenIMSessionType = 0 | 1 | 2 | 3 | 4",
+ "signatureHash": "3be98e61dd3e572f04aed92c518998a285b66af8308b999fc8f475d9a63d880c",
+ "edition": "public"
+ },
+ {
+ "id": 1006,
+ "name": "OpenIMLoginStatus",
+ "declaration": "export type OpenIMLoginStatus = 1 | 2 | 3",
+ "signatureHash": "64720e63372998e9bf1fd37bbe417e169a94c7a7207a92ce16f0df133acf30dc",
+ "edition": "public"
+ },
+ {
+ "id": 1007,
+ "name": "OpenIMSendMessageOptions",
+ "declaration": "export type OpenIMSendMessageOptions = {\n operationID ?: string | null\n message : OpenIMMessageItem\n recvID : string\n groupID : string\n offlinePushInfo ?: OpenIMOfflinePush | null\n isOnlineOnly ?: boolean | null\n}",
+ "signatureHash": "eac3f9993534e25873c5e326527e4f4a1ae84186d2fd74527af4d32b5952bdc2",
+ "edition": "public"
+ },
+ {
+ "id": 1008,
+ "name": "OpenIMUploadFileParams",
+ "declaration": "export type OpenIMUploadFileParams = {\n filepath : string\n name : string\n contentType : string\n uuid : string\n cancelID ?: string | null\n cause ?: string | null\n}",
+ "signatureHash": "84f7a2754e348014514f24217ff84759ee2c955d7e7d97ce990528771ae9b677",
+ "edition": "public"
+ },
+ {
+ "id": 1009,
+ "name": "OpenIMCreateSoundMessageParams",
+ "declaration": "export type OpenIMCreateSoundMessageParams = {\n soundPath : string\n duration : number\n}",
+ "signatureHash": "1ea28b2936efc33dfdbdbdbb9897f5d88efda5e8e04d71a6bd49bf5c049017ff",
+ "edition": "public"
+ },
+ {
+ "id": 1010,
+ "name": "OpenIMCreateVideoMessageParams",
+ "declaration": "export type OpenIMCreateVideoMessageParams = {\n videoPath : string\n videoType : string\n duration : number\n snapshotPath : string\n videoSourcePath ?: string | null\n snapshotSourcePath ?: string | null\n}",
+ "signatureHash": "751521ec6af7db95420faf899fbc8a6339c609596f349240c701259b6fb2f8d0",
+ "edition": "public"
+ },
+ {
+ "id": 1011,
+ "name": "OpenIMCreateFileMessageParams",
+ "declaration": "export type OpenIMCreateFileMessageParams = {\n filePath : string\n fileName : string\n fileSourcePath ?: string | null\n}",
+ "signatureHash": "56d15e22c2280cbfa593874d3bcbb8eb47af794592974d23a60666f498a94606",
+ "edition": "public"
+ },
+ {
+ "id": 1012,
+ "name": "OpenIMUploadFileResult",
+ "declaration": "export type OpenIMUploadFileResult = {\n url ?: string | null\n uri ?: string | null\n uuid ?: string | null\n size ?: number | null\n typ ?: number | null\n mediaID ?: string | null\n}",
+ "signatureHash": "219e6a0fb0566ea50ae525a28cf6e11336b700358aed3b587c483cbcd93af23e",
+ "edition": "public"
+ },
+ {
+ "id": 1013,
+ "name": "OpenIMUpdateFcmTokenParams",
+ "declaration": "export type OpenIMUpdateFcmTokenParams = {\n fcmToken : string\n expireTime : number\n}",
+ "signatureHash": "1857fade55acc23759b0efb9fb2178a606c2323615eeb7739352fc7632c2b449",
+ "edition": "public"
+ },
+ {
+ "id": 1014,
+ "name": "OpenIMUploadLogsParams",
+ "declaration": "export type OpenIMUploadLogsParams = {\n line : number\n ex : string\n}",
+ "signatureHash": "9114ee1d599165b3d41a2add587b07f71622c5c85e09629cdbf5bf930fe2578b",
+ "edition": "public"
+ },
+ {
+ "id": 1015,
+ "name": "OpenIMUploadFileProgressEvent",
+ "declaration": "export type OpenIMUploadFileProgressEvent = {\n progress : number\n}",
+ "signatureHash": "dfa7bf7e3fba9d430783547ec82ee7f59152712b7517bbc2696ae4c209ecf4c9",
+ "edition": "public"
+ },
+ {
+ "id": 1016,
+ "name": "OpenIMUploadLogsProgressEvent",
+ "declaration": "export type OpenIMUploadLogsProgressEvent = {\n progress : number\n}",
+ "signatureHash": "8c5ef7c1358d92260f092f6ed4ff2b809d11059568c819c3656ce91336513c69",
+ "edition": "public"
+ },
+ {
+ "id": 1017,
+ "name": "OpenIMSendMessageProgressEvent",
+ "declaration": "export type OpenIMSendMessageProgressEvent = {\n clientMsgID : string\n progress : number\n}",
+ "signatureHash": "54f0625244e81275e8a24272a0fac424ecac74448eaed729455eacfad5357abc",
+ "edition": "public"
+ },
+ {
+ "id": 1018,
+ "name": "OpenIMMessageKeyParams",
+ "declaration": "export type OpenIMMessageKeyParams = {\n conversationID : string\n clientMsgID : string\n}",
+ "signatureHash": "a4b08926a883fa47f808c5871818ea398db243fd9e29c36322edab8257b325e4",
+ "edition": "public"
+ },
+ {
+ "id": 1019,
+ "name": "OpenIMSetMessageLocalExParams",
+ "declaration": "export type OpenIMSetMessageLocalExParams = {\n conversationID : string\n clientMsgID : string\n localEx : string\n}",
+ "signatureHash": "5f827fd476e965160edb48de70da0bf7041fa6819a06f478c88da01acbe7323a",
+ "edition": "public"
+ },
+ {
+ "id": 1020,
+ "name": "OpenIMSetConversationBoolean",
+ "declaration": "export type OpenIMSetConversationBoolean = true | false",
+ "signatureHash": "9789e69ec980a591ffbc69d7e212af26c4096dffc73d0466144326b36202dde4",
+ "edition": "public"
+ },
+ {
+ "id": 1021,
+ "name": "OpenIMSetSelfInfoRecvMsgOpt",
+ "declaration": "export type OpenIMSetSelfInfoRecvMsgOpt = 0 | 1 | 2",
+ "signatureHash": "6af170121ec89812d978317f6308580bf371f923eefa0f5faf556da8aa8533fb",
+ "edition": "public"
+ },
+ {
+ "id": 1022,
+ "name": "OpenIMUpdateFriendBoolean",
+ "declaration": "export type OpenIMUpdateFriendBoolean = true | false",
+ "signatureHash": "6d90068c2baca1528f40ceeea5f210c04502688bfb31a09364cc6cd730bc109d",
+ "edition": "public"
+ },
+ {
+ "id": 1023,
+ "name": "OpenIMGroupNeedVerification",
+ "declaration": "export type OpenIMGroupNeedVerification = 0 | 1 | 2",
+ "signatureHash": "d917f362aa627f1c48128ac20cea7f394ff9ff5cd3e8ff285cffa55cd485bb0b",
+ "edition": "public"
+ },
+ {
+ "id": 1024,
+ "name": "OpenIMGroupOption",
+ "declaration": "export type OpenIMGroupOption = 0 | 1",
+ "signatureHash": "5cfc8db4d763fb4968c159241605ccc795eba8ccbe1b60630692b83389e350f8",
+ "edition": "public"
+ },
+ {
+ "id": 1025,
+ "name": "OpenIMGroupDisplayIsRead",
+ "declaration": "export type OpenIMGroupDisplayIsRead = true | false",
+ "signatureHash": "9fb3166f1208f9598d34f4a95da376a5e7cacf11d7740588262b702646daaa34",
+ "edition": "public"
+ },
+ {
+ "id": 1026,
+ "name": "OpenIMGroupMemberRoleLevel",
+ "declaration": "export type OpenIMGroupMemberRoleLevel = 20 | 60 | 100",
+ "signatureHash": "6dfeb17bdc44ec09d528b134e753009b308f897302792ff60be0dbc2e535d475",
+ "edition": "public"
+ },
+ {
+ "id": 1027,
+ "name": "OpenIMSetConversationParams",
+ "declaration": "export type OpenIMSetConversationParams = {\n conversationID : string\n recvMsgOpt ?: number | null\n isPinned ?: OpenIMSetConversationBoolean | null\n isPrivateChat ?: OpenIMSetConversationBoolean | null\n burnDuration ?: number | null\n groupAtType ?: number | null\n ex ?: string | null\n}",
+ "signatureHash": "be0ad0433ae82d7088f8330cb25a8c18a36827d55355d5f776be36635ede1506",
+ "edition": "public"
+ },
+ {
+ "id": 1028,
+ "name": "OpenIMSetSelfInfoParams",
+ "declaration": "export type OpenIMSetSelfInfoParams = {\n nickname ?: string | null\n faceURL ?: string | null\n ex ?: string | null\n globalRecvMsgOpt ?: OpenIMSetSelfInfoRecvMsgOpt | null\n}",
+ "signatureHash": "4923c4d16dcc83f754cb8bf299fe9f91b21f9771d071c0564d3a276bec48e34c",
+ "edition": "public"
+ },
+ {
+ "id": 1029,
+ "name": "OpenIMUpdateFriendsParams",
+ "declaration": "export type OpenIMUpdateFriendsParams = {\n friendUserIDs : Array\n isPinned ?: OpenIMUpdateFriendBoolean | null\n remark ?: string | null\n ex ?: string | null\n}",
+ "signatureHash": "3083b26e53a16884f99b4784e2cd30f4aaa2b4c76676f57499e47256abfa5cfc",
+ "edition": "public"
+ },
+ {
+ "id": 1030,
+ "name": "OpenIMCheckFriendResultItem",
+ "declaration": "export type OpenIMCheckFriendResultItem = {\n userID : string\n result : number\n}",
+ "signatureHash": "e50bf85d703cdd288d84161a79082ca94e204929fd3a30720b0a7fe820f3ce37",
+ "edition": "public"
+ },
+ {
+ "id": 1031,
+ "name": "OpenIMCheckFriendResult",
+ "declaration": "export type OpenIMCheckFriendResult = {\n result : Array\n}",
+ "signatureHash": "9fb50399497985a1dda92c6c2e00d1f986cf72192fcea3f1d8ba4bcaf247c951",
+ "edition": "public"
+ },
+ {
+ "id": 1032,
+ "name": "OpenIMInsertSingleMessageParams",
+ "declaration": "export type OpenIMInsertSingleMessageParams = {\n message : OpenIMMessageItem\n recvID : string\n sendID : string\n}",
+ "signatureHash": "d4501725cd0b5d85e03dc9496e70d48568294b0e99385fc054274302d1e1db34",
+ "edition": "public"
+ },
+ {
+ "id": 1033,
+ "name": "OpenIMInsertGroupMessageParams",
+ "declaration": "export type OpenIMInsertGroupMessageParams = {\n message : OpenIMMessageItem\n groupID : string\n sendID : string\n}",
+ "signatureHash": "1f8d36212c539d38926b6097d1883148dfe567a3ba740544dd6f9f9c3ec523ce",
+ "edition": "public"
+ },
+ {
+ "id": 1034,
+ "name": "OpenIMInputStateParams",
+ "declaration": "export type OpenIMInputStateParams = {\n conversationID : string\n userID ?: string | null\n focus : boolean\n}",
+ "signatureHash": "87257e63994511261c554c08716a18ae95cdddd77052833d79298ea99b0a5b20",
+ "edition": "public"
+ },
+ {
+ "id": 1035,
+ "name": "OpenIMSetConversationDraftParams",
+ "declaration": "export type OpenIMSetConversationDraftParams = {\n conversationID : string\n draftText : string\n}",
+ "signatureHash": "f2fb1522043f4c8ef413d03f484a205640c3da7a42150089cb223a6c5f6bda04",
+ "edition": "public"
+ },
+ {
+ "id": 1036,
+ "name": "OpenIMAddFriendParams",
+ "declaration": "export type OpenIMAddFriendParams = {\n toUserID : string\n reqMsg : string\n ex ?: string | null\n}",
+ "signatureHash": "a16116e0fbfedeada13e8398a485423ce91bef47eb67aa58f664df0ebafda6ef",
+ "edition": "public"
+ },
+ {
+ "id": 1037,
+ "name": "OpenIMSearchFriendsParams",
+ "declaration": "export type OpenIMSearchFriendsParams = {\n keywordList : Array\n isSearchUserID : boolean\n isSearchNickname : boolean\n isSearchRemark : boolean\n}",
+ "signatureHash": "588996d616658863839c01da93dfd76a1758ee19e10984ae3f6c2ec7c1f8b6af",
+ "edition": "public"
+ },
+ {
+ "id": 1038,
+ "name": "OpenIMGetSpecifiedFriendsInfoParams",
+ "declaration": "export type OpenIMGetSpecifiedFriendsInfoParams = {\n userIDList : Array\n filterBlack : boolean\n}",
+ "signatureHash": "63062033bb6ff8f863312012ea915095b4fb1dc55526b9b41a1fb2dc86b6333e",
+ "edition": "public"
+ },
+ {
+ "id": 1039,
+ "name": "OpenIMFriendApplicationHandleParams",
+ "declaration": "export type OpenIMFriendApplicationHandleParams = {\n toUserID : string\n handleMsg : string\n}",
+ "signatureHash": "0acb9df4416bb0c17ea5b80af18130e1f874c4b936301dd209dc20baa30330f5",
+ "edition": "public"
+ },
+ {
+ "id": 1040,
+ "name": "OpenIMAddBlackParams",
+ "declaration": "export type OpenIMAddBlackParams = {\n toUserID : string\n ex ?: string | null\n}",
+ "signatureHash": "a032838d52c66b5e1063228eb2ae81398a1d1bb3feead727f4c4f8d77d2be6b3",
+ "edition": "public"
+ },
+ {
+ "id": 1041,
+ "name": "OpenIMGroupUserListParams",
+ "declaration": "export type OpenIMGroupUserListParams = {\n groupID : string\n userIDList : Array\n}",
+ "signatureHash": "ac3d0f15f98f91af596c6d7d4e2a31e0b8efd35d6c8312473c2b899172ce0d68",
+ "edition": "public"
+ },
+ {
+ "id": 1042,
+ "name": "OpenIMGroupInviteParams",
+ "declaration": "export type OpenIMGroupInviteParams = {\n groupID : string\n reason : string\n userIDList : Array\n}",
+ "signatureHash": "aabedb02fbcb2eecdb9ca8cbad9551b4b9320c65938183e2bcf354f125951fd0",
+ "edition": "public"
+ },
+ {
+ "id": 1043,
+ "name": "OpenIMSearchGroupMembersParams",
+ "declaration": "export type OpenIMSearchGroupMembersParams = {\n groupID : string\n keywordList : Array\n isSearchUserID : boolean\n isSearchMemberNickname : boolean\n}",
+ "signatureHash": "6b849bfb059cd39e3a022e5f3d4c564c58c5778edff7ffa28e828442b4d2d6f0",
+ "edition": "public"
+ },
+ {
+ "id": 1044,
+ "name": "OpenIMCreateGroupInfo",
+ "declaration": "export type OpenIMCreateGroupInfo = {\n groupName : string\n groupType : 2\n notification ?: string | null\n introduction ?: string | null\n faceURL ?: string | null\n ex ?: string | null\n}",
+ "signatureHash": "ffec54165e4c12239b73917e333ffe16126376c86068de95f3ab36ec87a1c64b",
+ "edition": "public"
+ },
+ {
+ "id": 1045,
+ "name": "OpenIMCreateGroupParams",
+ "declaration": "export type OpenIMCreateGroupParams = {\n groupInfo : OpenIMCreateGroupInfo\n memberUserIDs : Array\n adminUserIDs ?: Array | null\n}",
+ "signatureHash": "b1109c4277ee0b7ac1d7fcb5a7b52706e821a2660d79b4ffbe28fc9b2905cb47",
+ "edition": "public"
+ },
+ {
+ "id": 1046,
+ "name": "OpenIMSetGroupInfoParams",
+ "declaration": "export type OpenIMSetGroupInfoParams = {\n groupID : string\n groupName ?: string | null\n notification ?: string | null\n introduction ?: string | null\n faceURL ?: string | null\n ex ?: string | null\n needVerification ?: OpenIMGroupNeedVerification | null\n lookMemberInfo ?: OpenIMGroupOption | null\n applyMemberFriend ?: OpenIMGroupOption | null\n displayIsRead ?: OpenIMGroupDisplayIsRead | null\n}",
+ "signatureHash": "b6da4a10753ad1184c55ab4f7f6f64d5fa20b4aa143879b730d1e163a21f4dfb",
+ "edition": "public"
+ },
+ {
+ "id": 1047,
+ "name": "OpenIMSetGroupMemberInfoParams",
+ "declaration": "export type OpenIMSetGroupMemberInfoParams = {\n groupID : string\n userID : string\n nickname ?: string | null\n faceURL ?: string | null\n roleLevel ?: OpenIMGroupMemberRoleLevel | null\n ex ?: string | null\n}",
+ "signatureHash": "be5a45a607a834119a540dd426b154a0f542eb1822ef8df4c704bc60e9e327e7",
+ "edition": "public"
+ },
+ {
+ "id": 1048,
+ "name": "OpenIMJoinGroupParams",
+ "declaration": "export type OpenIMJoinGroupParams = {\n groupID : string\n reqMsg : string\n joinSource : number\n ex ?: string | null\n}",
+ "signatureHash": "04d375b93c6de64b3b6a5bfe36ddaccd0f07f5f02c6c622a646f36d3c2c07eb5",
+ "edition": "public"
+ },
+ {
+ "id": 1049,
+ "name": "OpenIMSearchGroupsParams",
+ "declaration": "export type OpenIMSearchGroupsParams = {\n keywordList : Array\n isSearchGroupID : boolean\n isSearchGroupName : boolean\n}",
+ "signatureHash": "ffa28e5f24c96d16a54914ffc4a3701cab1f61437fc62121a6c4e76d43b726b2",
+ "edition": "public"
+ },
+ {
+ "id": 1050,
+ "name": "OpenIMChangeGroupMuteParams",
+ "declaration": "export type OpenIMChangeGroupMuteParams = {\n groupID : string\n isMute : boolean\n}",
+ "signatureHash": "aa17171474e80fd1e6a36a7dbe304166c234c3cfa6eeab576195946f52cc0256",
+ "edition": "public"
+ },
+ {
+ "id": 1051,
+ "name": "OpenIMChangeGroupMemberMuteParams",
+ "declaration": "export type OpenIMChangeGroupMemberMuteParams = {\n groupID : string\n userID : string\n mutedSeconds : number\n}",
+ "signatureHash": "6697ba759a76a4403895ac2dbf7de0a9368321cd2a8294ec92b11fec2a58cf2e",
+ "edition": "public"
+ },
+ {
+ "id": 1052,
+ "name": "OpenIMTransferGroupOwnerParams",
+ "declaration": "export type OpenIMTransferGroupOwnerParams = {\n groupID : string\n newOwnerUserID : string\n}",
+ "signatureHash": "9f7c7aee7ecdeed54731c5ad4ef0cf95a1c4923db8671b3f6727f6f9bf4e1d3e",
+ "edition": "public"
+ },
+ {
+ "id": 1053,
+ "name": "OpenIMGroupApplicationHandleParams",
+ "declaration": "export type OpenIMGroupApplicationHandleParams = {\n groupID : string\n fromUserID : string\n handleMsg : string\n}",
+ "signatureHash": "8ba30188c3e3cd4695c4793a7f8fc7bd32529b232b2c987db7111a9d308776d6",
+ "edition": "public"
+ },
+ {
+ "id": 1054,
+ "name": "OpenIMFindMessageParams",
+ "declaration": "export type OpenIMFindMessageParams = {\n conversationID : string\n clientMsgIDList : Array\n}",
+ "signatureHash": "d5a6e9e2e19d5dd2241a33a10da6aef942485b87af823429495e33f6873bf903",
+ "edition": "public"
+ },
+ {
+ "id": 1055,
+ "name": "OpenIMCreateCustomMessageParams",
+ "declaration": "export type OpenIMCreateCustomMessageParams = {\n data : string\n extension : string\n descriptionText : string\n}",
+ "signatureHash": "9bd7a01198c96058cb52d6fffa3d059b14082e4eab3b59f9c26b7370eb38be98",
+ "edition": "public"
+ },
+ {
+ "id": 1056,
+ "name": "OpenIMCreateQuoteMessageParams",
+ "declaration": "export type OpenIMCreateQuoteMessageParams = {\n text : string\n message : string\n}",
+ "signatureHash": "63f428d077669061ebb78118e8bcb19a413ad24872bb520e644650e239c214eb",
+ "edition": "public"
+ },
+ {
+ "id": 1057,
+ "name": "OpenIMCreateAdvancedQuoteMessageParams",
+ "declaration": "export type OpenIMCreateAdvancedQuoteMessageParams = {\n text : string\n message : string\n messageEntityList : Array\n}",
+ "signatureHash": "21b9c8457dc0ab691f098ed81c93908ee611c2f61e3b0db6df186dd8a7644f51",
+ "edition": "public"
+ },
+ {
+ "id": 1058,
+ "name": "OpenIMCreateAdvancedTextMessageParams",
+ "declaration": "export type OpenIMCreateAdvancedTextMessageParams = {\n text : string\n messageEntityList : Array\n}",
+ "signatureHash": "160e42977b232d732945b544b434124976ca12f5159b8c1a776acbc746a86641",
+ "edition": "public"
+ },
+ {
+ "id": 1059,
+ "name": "OpenIMCreateTextAtMessageParams",
+ "declaration": "export type OpenIMCreateTextAtMessageParams = {\n text : string\n atUserIDList : Array\n atUsersInfo ?: Array | null\n quoteMessage ?: OpenIMMessageItem | null\n}",
+ "signatureHash": "805f4869c2be9695182db1ae1bd542df39943f243f7b3bc45d61bb0b10b83d78",
+ "edition": "public"
+ },
+ {
+ "id": 1060,
+ "name": "OpenIMCreateMergerMessageParams",
+ "declaration": "export type OpenIMCreateMergerMessageParams = {\n messageList : Array\n title : string\n abstractList : Array\n}",
+ "signatureHash": "53f569e81369fd7ea141af0c1ff31dabcb8073e813cca1a201100509f202ba3e",
+ "edition": "public"
+ },
+ {
+ "id": 1061,
+ "name": "OpenIMCreateFaceMessageParams",
+ "declaration": "export type OpenIMCreateFaceMessageParams = {\n index : number\n data : string\n}",
+ "signatureHash": "bf4a90e528812c64c24c8a1cfe052bfe62eae542622cc3455a81e41c1dbb4c2a",
+ "edition": "public"
+ },
+ {
+ "id": 1062,
+ "name": "OpenIMCreateLocationMessageParams",
+ "declaration": "export type OpenIMCreateLocationMessageParams = {\n descriptionText : string\n longitude : number\n latitude : number\n}",
+ "signatureHash": "2b3dfb06f155a776b629519e9acea98e67b0806b5da142acd524295d4878ab6f",
+ "edition": "public"
+ },
+ {
+ "id": 1063,
+ "name": "OpenIMMessageEntity",
+ "declaration": "export type OpenIMMessageEntity = {\n type ?: string | null\n offset ?: number | null\n length ?: number | null\n url ?: string | null\n ex ?: string | null\n info ?: string | null\n}",
+ "signatureHash": "a1c002f8741dbb614ab2d9d48a75f9055fb3f7a7634608bbba329b4ac663e553",
+ "edition": "public"
+ },
+ {
+ "id": 1064,
+ "name": "OpenIMTextElem",
+ "declaration": "export type OpenIMTextElem = {\n content ?: string | null\n}",
+ "signatureHash": "0f49b7b5160434661322667b9cec3bb31799c5a767eb1fd3171a8e66e1287045",
+ "edition": "public"
+ },
+ {
+ "id": 1065,
+ "name": "OpenIMCardElem",
+ "declaration": "export type OpenIMCardElem = {\n userID ?: string | null\n nickname ?: string | null\n faceURL ?: string | null\n ex ?: string | null\n}",
+ "signatureHash": "a3368b7e2eda8f0248d03cb5555ff0ae5335817452c8ec49c9a038c21eb9ba43",
+ "edition": "public"
+ },
+ {
+ "id": 1066,
+ "name": "OpenIMAtUsersInfoItem",
+ "declaration": "export type OpenIMAtUsersInfoItem = {\n atUserID ?: string | null\n groupNickname ?: string | null\n}",
+ "signatureHash": "aed660c51226b8723b69c65bfb1b5d3382efc2a2e333a74135b4946521c1f8ab",
+ "edition": "public"
+ },
+ {
+ "id": 1067,
+ "name": "OpenIMAtTextElem",
+ "declaration": "export type OpenIMAtTextElem = {\n text ?: string | null\n atUserList ?: Array | null\n atUsersInfo ?: Array | null\n quoteMessage ?: OpenIMMessageItemRef | null\n isAtSelf ?: boolean | null\n}",
+ "signatureHash": "75efddfb740bffb13e16d424b7e34b025bf07362cb46860d6065c1f3438d9350",
+ "edition": "public"
+ },
+ {
+ "id": 1068,
+ "name": "OpenIMNotificationElem",
+ "declaration": "export type OpenIMNotificationElem = {\n detail ?: string | null\n}",
+ "signatureHash": "8ed1ab19f3af3ffbd158d394c27908b7e09d71f7b14e5c74f9b17241538b5199",
+ "edition": "public"
+ },
+ {
+ "id": 1069,
+ "name": "OpenIMAdvancedTextElem",
+ "declaration": "export type OpenIMAdvancedTextElem = {\n text ?: string | null\n messageEntityList ?: Array | null\n}",
+ "signatureHash": "ee82bd73672c4dcb3258d33df5ba72a01ad4dd378785d229f464e1c8478e7055",
+ "edition": "public"
+ },
+ {
+ "id": 1070,
+ "name": "OpenIMTypingElem",
+ "declaration": "export type OpenIMTypingElem = {\n msgTips ?: string | null\n}",
+ "signatureHash": "be42daaaead94a9138309b444aa9a63ce0150fc377dd29295365e0d471c2e0db",
+ "edition": "public"
+ },
+ {
+ "id": 1071,
+ "name": "OpenIMFileElem",
+ "declaration": "export type OpenIMFileElem = {\n filePath ?: string | null\n uuid ?: string | null\n sourceUrl ?: string | null\n fileName ?: string | null\n fileSize ?: number | null\n}",
+ "signatureHash": "71f34c3511c7edadf3ef9116effcca1d6f2bf0f1d4efe2d9ed5a14be23849ced",
+ "edition": "public"
+ },
+ {
+ "id": 1072,
+ "name": "OpenIMFaceElem",
+ "declaration": "export type OpenIMFaceElem = {\n index ?: number | null\n data ?: string | null\n}",
+ "signatureHash": "d1a016aef3afaade3a7eb4445cc7bf6c1adf289dedf01e313a4c9b74c6953b19",
+ "edition": "public"
+ },
+ {
+ "id": 1073,
+ "name": "OpenIMLocationElem",
+ "declaration": "export type OpenIMLocationElem = {\n descriptionText ?: string | null\n longitude ?: number | null\n latitude ?: number | null\n}",
+ "signatureHash": "e9c0c035a0c9820eae383005e7674f565909e3c047e0f20de51c9669b8a0e46c",
+ "edition": "public"
+ },
+ {
+ "id": 1074,
+ "name": "OpenIMCustomElem",
+ "declaration": "export type OpenIMCustomElem = {\n data ?: string | null\n descriptionText ?: string | null\n extensionText ?: string | null\n}",
+ "signatureHash": "a4d3376f2c455c65f34afd0bee12da76f53ba1b662ad40b57a7ca13dd3b328b1",
+ "edition": "public"
+ },
+ {
+ "id": 1075,
+ "name": "OpenIMMergeElem",
+ "declaration": "export type OpenIMMergeElem = {\n title ?: string | null\n abstractList ?: Array | null\n multiMessage ?: Array | null\n messageEntityList ?: Array | null\n}",
+ "signatureHash": "23fb44975d05b1105f0b158bb4d1ea7faa86a867c953dc6599a6625ea2aef659",
+ "edition": "public"
+ },
+ {
+ "id": 1076,
+ "name": "OpenIMOfflinePush",
+ "declaration": "export type OpenIMOfflinePush = {\n title ?: string | null\n desc ?: string | null\n ex ?: string | null\n iOSPushSound ?: string | null\n iOSBadgeCount ?: boolean | null\n}",
+ "signatureHash": "9b90be2a0c61ef7b0c249c26b30e687e3b184e250a3cb4a5866dc693321a5fda",
+ "edition": "public"
+ },
+ {
+ "id": 1077,
+ "name": "OpenIMPicture",
+ "declaration": "export type OpenIMPicture = {\n uuid ?: string | null\n type ?: string | null\n size ?: number | null\n width ?: number | null\n height ?: number | null\n url ?: string | null\n}",
+ "signatureHash": "f04bdadf101bb6ebc3ff41ac57a89d32e522763ca0f0be711b3ce9d4e3a53b25",
+ "edition": "public"
+ },
+ {
+ "id": 1078,
+ "name": "OpenIMPictureElem",
+ "declaration": "export type OpenIMPictureElem = {\n sourcePath ?: string | null\n sourcePicture ?: OpenIMPicture | null\n bigPicture ?: OpenIMPicture | null\n snapshotPicture ?: OpenIMPicture | null\n}",
+ "signatureHash": "70fbb702fb0804466b1924df67ffcd7ffe3568e52f8364867f40481044dd70ad",
+ "edition": "public"
+ },
+ {
+ "id": 1079,
+ "name": "OpenIMAttachedGroupHasReadInfo",
+ "declaration": "export type OpenIMAttachedGroupHasReadInfo = {\n hasReadCount ?: number | null\n unreadCount ?: number | null\n hasReadUserIDList ?: Array | null\n groupMemberCount ?: number | null\n}",
+ "signatureHash": "c03da824911cb525bb53693ae7bb1579cb5014febcb1f130d0b452447d4a76bd",
+ "edition": "public"
+ },
+ {
+ "id": 1080,
+ "name": "OpenIMUploadProgress",
+ "declaration": "export type OpenIMUploadProgress = {\n total ?: number | null\n save ?: number | null\n current ?: number | null\n uploadID ?: string | null\n}",
+ "signatureHash": "b52193934a41200dc2a4d272b12ffc53936dddf30170efc1b1eb7a12ce907ac6",
+ "edition": "public"
+ },
+ {
+ "id": 1081,
+ "name": "OpenIMAttachedInfoElem",
+ "declaration": "export type OpenIMAttachedInfoElem = {\n groupHasReadInfo ?: OpenIMAttachedGroupHasReadInfo | null\n isPrivateChat ?: boolean | null\n isEncryption ?: boolean | null\n inEncryptStatus ?: boolean | null\n burnDuration ?: number | null\n hasReadTime ?: number | null\n messageEntityList ?: Array | null\n uploadProgress ?: OpenIMUploadProgress | null\n}",
+ "signatureHash": "9ba2f2535b1577151196a45f0bb26866b48067bfd451085fa620e6ce9111e0d1",
+ "edition": "public"
+ },
+ {
+ "id": 1082,
+ "name": "OpenIMQuoteElem",
+ "declaration": "export type OpenIMQuoteElem = {\n text ?: string | null\n quoteMessage ?: OpenIMMessageItemRef | null\n messageEntityList ?: Array | null\n}",
+ "signatureHash": "31af4d22fa4fe24496e61fbda8ecd10b5b961c860ea7ceeb29cdda3a0e5ce7da",
+ "edition": "public"
+ },
+ {
+ "id": 1083,
+ "name": "OpenIMSoundElem",
+ "declaration": "export type OpenIMSoundElem = {\n uuid ?: string | null\n soundPath ?: string | null\n sourceUrl ?: string | null\n dataSize ?: number | null\n duration ?: number | null\n}",
+ "signatureHash": "50de258e4269a9118635019c551ab2b04703e423b7188d8dc668353fcbd0c8c7",
+ "edition": "public"
+ },
+ {
+ "id": 1084,
+ "name": "OpenIMVideoElem",
+ "declaration": "export type OpenIMVideoElem = {\n videoPath ?: string | null\n videoUUID ?: string | null\n videoUrl ?: string | null\n videoType ?: string | null\n videoSize ?: number | null\n duration ?: number | null\n snapshotPath ?: string | null\n snapshotUUID ?: string | null\n snapshotSize ?: number | null\n snapshotUrl ?: string | null\n snapshotWidth ?: number | null\n snapshotHeight ?: number | null\n}",
+ "signatureHash": "aa263f920958c6d75d1d3254f6c18e904248901bc49a832c5e70a5d7bf52678e",
+ "edition": "public"
+ },
+ {
+ "id": 1085,
+ "name": "OpenIMMessageItemRef",
+ "declaration": "export type OpenIMMessageItemRef = {\n clientMsgID ?: string | null\n serverMsgID ?: string | null\n createTime : number\n sendTime : number\n sessionType : OpenIMSessionType\n sendID ?: string | null\n recvID ?: string | null\n msgFrom : number\n contentType : OpenIMMessageType\n senderPlatformID : OpenIMPlatform\n senderNickname ?: string | null\n senderFaceUrl ?: string | null\n groupID ?: string | null\n content ?: string | null\n seq : number\n isRead : boolean\n status : OpenIMMessageStatus\n attachedInfo ?: string | null\n ex ?: string | null\n localEx ?: string | null\n textElem ?: OpenIMTextElem | null\n cardElem ?: OpenIMCardElem | null\n pictureElem ?: OpenIMPictureElem | null\n soundElem ?: OpenIMSoundElem | null\n videoElem ?: OpenIMVideoElem | null\n fileElem ?: OpenIMFileElem | null\n faceElem ?: OpenIMFaceElem | null\n locationElem ?: OpenIMLocationElem | null\n customElem ?: OpenIMCustomElem | null\n}",
+ "signatureHash": "1ac0f0db5fdc73648e4e5739aa1ea4cbd8542877e48ace677a90bbd5c6ea1e81",
+ "edition": "public"
+ },
+ {
+ "id": 1086,
+ "name": "OpenIMMessageItem",
+ "declaration": "export type OpenIMMessageItem = {\n clientMsgID ?: string | null\n serverMsgID ?: string | null\n createTime : number\n sendTime : number\n sessionType : OpenIMSessionType\n sendID ?: string | null\n recvID ?: string | null\n msgFrom : number\n contentType : OpenIMMessageType\n senderPlatformID : OpenIMPlatform\n senderNickname ?: string | null\n senderFaceUrl ?: string | null\n groupID ?: string | null\n content ?: string | null\n seq : number\n isRead : boolean\n status : OpenIMMessageStatus\n offlinePush ?: OpenIMOfflinePush | null\n attachedInfo ?: string | null\n ex ?: string | null\n localEx ?: string | null\n textElem ?: OpenIMTextElem | null\n cardElem ?: OpenIMCardElem | null\n pictureElem ?: OpenIMPictureElem | null\n soundElem ?: OpenIMSoundElem | null\n videoElem ?: OpenIMVideoElem | null\n fileElem ?: OpenIMFileElem | null\n mergeElem ?: OpenIMMergeElem | null\n atTextElem ?: OpenIMAtTextElem | null\n faceElem ?: OpenIMFaceElem | null\n locationElem ?: OpenIMLocationElem | null\n customElem ?: OpenIMCustomElem | null\n quoteElem ?: OpenIMQuoteElem | null\n notificationElem ?: OpenIMNotificationElem | null\n advancedTextElem ?: OpenIMAdvancedTextElem | null\n typingElem ?: OpenIMTypingElem | null\n attachedInfoElem ?: OpenIMAttachedInfoElem | null\n}",
+ "signatureHash": "5aec8cb3a7963f19d9f39e7f3d383620ff62e8748994ebb89f81b1bf15b3f141",
+ "edition": "public"
+ },
+ {
+ "id": 1087,
+ "name": "OpenIMConversationItem",
+ "declaration": "export type OpenIMConversationItem = {\n conversationID : string\n conversationType : OpenIMSessionType\n userID ?: string | null\n groupID ?: string | null\n showName : string\n faceURL : string\n recvMsgOpt : number\n unreadCount : number\n latestMsg ?: string | null\n latestMsgSendTime : number\n draftText : string\n draftTextTime : number\n isPinned : boolean\n isPrivateChat : boolean\n attachedInfo : string\n ex : string\n burnDuration : number\n minSeq : number\n maxSeq : number\n msgDestructTime : number\n groupAtType : number\n isMsgDestruct : boolean\n isNotInGroup : boolean\n updateUnreadCountTime : number\n}",
+ "signatureHash": "598414c4c588fa99562775080bb8d17daa4cbb793dd6b15aea42afb478f6ddd0",
+ "edition": "public"
+ },
+ {
+ "id": 1088,
+ "name": "OpenIMConversationListResult",
+ "declaration": "export type OpenIMConversationListResult = {\n conversations : Array\n}",
+ "signatureHash": "fd65acc4e6f32e7fb0e9e4c1f0feb1e0c5ed89b137a4507ca4ac87815b4b50ed",
+ "edition": "public"
+ },
+ {
+ "id": 1089,
+ "name": "OpenIMUserListResult",
+ "declaration": "export type OpenIMUserListResult = {\n users : Array\n}",
+ "signatureHash": "403313cbd3c36d50f047d193977c7a401a6d62d1680a149e4e1f2839e3b06fff",
+ "edition": "public"
+ },
+ {
+ "id": 1090,
+ "name": "OpenIMUserStatusItem",
+ "declaration": "export type OpenIMUserStatusItem = {\n userID : string\n status : number\n platformIDs : Array\n}",
+ "signatureHash": "a8d28054689489918abd8332b6339a2cb5cb28ad0941b0f7290e676fc46dda8d",
+ "edition": "public"
+ },
+ {
+ "id": 1091,
+ "name": "OpenIMUserStatusListResult",
+ "declaration": "export type OpenIMUserStatusListResult = {\n statuses : Array\n}",
+ "signatureHash": "80948b1e7f541d4a52cd9bed55cce5bb78017128f96988173be79a78b63cb66a",
+ "edition": "public"
+ },
+ {
+ "id": 1092,
+ "name": "OpenIMFriendListResult",
+ "declaration": "export type OpenIMFriendListResult = {\n friends : Array\n}",
+ "signatureHash": "95441a05fa85bd1d953d068544a351ec342404fe264e6ec6af553749e875341d",
+ "edition": "public"
+ },
+ {
+ "id": 1093,
+ "name": "OpenIMBlackListResult",
+ "declaration": "export type OpenIMBlackListResult = {\n blackUsers : Array\n}",
+ "signatureHash": "ad014afc58f1cc960ebd231eb7e347c6857a5a81806785080b3e375a9a5fc725",
+ "edition": "public"
+ },
+ {
+ "id": 1094,
+ "name": "OpenIMGroupListResult",
+ "declaration": "export type OpenIMGroupListResult = {\n groups : Array\n}",
+ "signatureHash": "e5c01b3fc76eeca5804c9383b089886e48467767603574caa3f9ae29a36a36ed",
+ "edition": "public"
+ },
+ {
+ "id": 1095,
+ "name": "OpenIMGroupMemberListResult",
+ "declaration": "export type OpenIMGroupMemberListResult = {\n members : Array\n}",
+ "signatureHash": "ce8e5c716e5aef111ba89bdaa67e2d26524320a59920aa9f40f241f8d875f58e",
+ "edition": "public"
+ },
+ {
+ "id": 1096,
+ "name": "OpenIMFriendApplicationListResult",
+ "declaration": "export type OpenIMFriendApplicationListResult = {\n applications : Array\n}",
+ "signatureHash": "e232583f1151817ca1fb1cf7886a9fcb471a4fd6fe84eb970bbf570c1c41e785",
+ "edition": "public"
+ },
+ {
+ "id": 1097,
+ "name": "OpenIMGroupApplicationListResult",
+ "declaration": "export type OpenIMGroupApplicationListResult = {\n applications : Array\n}",
+ "signatureHash": "46db95eab29b381521911d02a613bd6dcc54aed40a3d10117bd88fc3f25c2a95",
+ "edition": "public"
+ },
+ {
+ "id": 1098,
+ "name": "OpenIMMessageListResult",
+ "declaration": "export type OpenIMMessageListResult = {\n messages : Array\n}",
+ "signatureHash": "8e6e1f89a0fb403f7a2a3daddacfcd8c5a7e4cc53d9031d2f0a31b2500cd965a",
+ "edition": "public"
+ },
+ {
+ "id": 1099,
+ "name": "OpenIMUserInfo",
+ "declaration": "export type OpenIMUserInfo = {\n userID : string\n nickname : string\n faceURL : string\n ex : string\n createTime ?: number | null\n attachedInfo ?: string | null\n globalRecvMsgOpt ?: number | null\n}",
+ "signatureHash": "ce8160a04596bf7e963750e430746f3c09f8c8904972036030426300000b3f39",
+ "edition": "public"
+ },
+ {
+ "id": 1100,
+ "name": "OpenIMPublicUserItem",
+ "declaration": "export type OpenIMPublicUserItem = OpenIMUserInfo",
+ "signatureHash": "87765e398f97f0789dbdc4ba62eddeea11d36573d497bd42d31a196585d72e62",
+ "edition": "public"
+ },
+ {
+ "id": 1101,
+ "name": "OpenIMFriendUserItem",
+ "declaration": "export type OpenIMFriendUserItem = {\n ownerUserID : string\n userID : string\n nickname : string\n faceURL : string\n remark : string\n createTime : number\n addSource : number\n operatorUserID : string\n ex : string\n attachedInfo : string\n isPinned : boolean\n}",
+ "signatureHash": "3aab4773462c2927d59d3be09888222b758abd0bd95b11fcf1978fa39b7527c2",
+ "edition": "public"
+ },
+ {
+ "id": 1102,
+ "name": "OpenIMBlackUserItem",
+ "declaration": "export type OpenIMBlackUserItem = {\n ownerUserID : string\n userID : string\n nickname : string\n faceURL : string\n createTime : number\n addSource : number\n operatorUserID : string\n ex : string\n attachedInfo : string\n}",
+ "signatureHash": "713c267f837a34d9ba48d3a2fa5090dda8d058c131491b546b8480f7cbe9c237",
+ "edition": "public"
+ },
+ {
+ "id": 1103,
+ "name": "OpenIMGroupItem",
+ "declaration": "export type OpenIMGroupItem = {\n groupID : string\n groupName : string\n notification : string\n introduction : string\n faceURL : string\n ownerUserID : string\n createTime : number\n memberCount : number\n status : number\n creatorUserID : string\n groupType : number\n needVerification : number\n lookMemberInfo : number\n applyMemberFriend : number\n notificationUpdateTime : number\n notificationUserID : string\n ex : string\n attachedInfo : string\n}",
+ "signatureHash": "7a3c765d2938ab26d72e645d65f89483e94c0404c7dcf3e3210aa7b0d579aca7",
+ "edition": "public"
+ },
+ {
+ "id": 1104,
+ "name": "OpenIMGroupMemberItem",
+ "declaration": "export type OpenIMGroupMemberItem = {\n groupID : string\n userID : string\n nickname : string\n faceURL : string\n roleLevel : number\n joinTime : number\n joinSource : number\n operatorUserID : string\n ex : string\n muteEndTime : number\n inviterUserID : string\n attachedInfo : string\n}",
+ "signatureHash": "81ad1090935d1bb275b174f79bfb9c9a96939f692971de1c2481fb01e3e3234d",
+ "edition": "public"
+ },
+ {
+ "id": 1105,
+ "name": "OpenIMFriendApplicationItem",
+ "declaration": "export type OpenIMFriendApplicationItem = {\n fromUserID : string\n fromNickname : string\n fromFaceURL : string\n toUserID : string\n toNickname : string\n toFaceURL : string\n handleResult : number\n reqMsg : string\n createTime : number\n handlerUserID : string\n handleMsg : string\n handleTime : number\n ex : string\n attachedInfo : string\n}",
+ "signatureHash": "366f3242235b8dcb611776ececab41acfe647ae1ea7b9b97d36cc5c80e62fc8d",
+ "edition": "public"
+ },
+ {
+ "id": 1106,
+ "name": "OpenIMGroupApplicationItem",
+ "declaration": "export type OpenIMGroupApplicationItem = {\n groupID : string\n groupName : string\n notification : string\n introduction : string\n groupFaceURL : string\n ownerUserID : string\n createTime : number\n status : number\n creatorUserID : string\n groupType ?: number | null\n memberCount : number\n userID : string\n nickname : string\n userFaceURL : string\n handleResult : number\n reqMsg : string\n handledMsg : string\n reqTime : number\n joinSource : number\n inviterUserID : string\n handleUserID : string\n handledTime : number\n ex : string\n attachedInfo : string\n}",
+ "signatureHash": "7b33f7fe84a3f268f96ea23446c4ca9334624827f7c1607de708fd3ad6ed4e86",
+ "edition": "public"
+ },
+ {
+ "id": 1107,
+ "name": "OpenIMMessageRevokedItem",
+ "declaration": "export type OpenIMMessageRevokedItem = {\n revokerID : string\n revokerRole : number\n clientMsgID : string\n revokerNickname : string\n revokeTime : number\n sourceMessageSendTime : number\n sourceMessageSendID : string\n sourceMessageSenderNickname : string\n sessionType : OpenIMSessionType\n seq : number\n ex : string\n isAdminRevoke : boolean\n}",
+ "signatureHash": "b6ddba526c9690a96f36deebc7804168b8ccc8e017db7b96076797fed505758c",
+ "edition": "public"
+ },
+ {
+ "id": 1108,
+ "name": "OpenIMMessageReceiptItem",
+ "declaration": "export type OpenIMMessageReceiptItem = {\n groupID : string\n userID : string\n msgIDList : Array