From 040c07903db5f3882783f64f324ac73aab361f54 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 23 Dec 2024 13:50:04 +0800 Subject: [PATCH 1/4] Modify Android UIKit and SDK Quickstart --- docs/document/android/quickstart.md | 4 +++- .../chatuikit/android/chatuikit_integrated.md | 18 +++++++++++++++++- .../chatuikit/android/chatuikit_quickstart.md | 11 ++++++++--- docs/uikit/chatuikit/android/releasenote.md | 2 +- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/docs/document/android/quickstart.md b/docs/document/android/quickstart.md index 56790b1de..083c9d1c1 100644 --- a/docs/document/android/quickstart.md +++ b/docs/document/android/quickstart.md @@ -40,7 +40,7 @@ ### 2. 集成 SDK -你可以使用 mavenCentral 自动集成。该方法仅适用于 v3.8.2 或以上版本。获取最新 SDK 的版本号,详见 [SDK 更新日志](releasenote.html)。 +你可以使用 mavenCentral 自动集成。该方法仅适用于 v3.8.2 或以上版本。 除此之外,你还可以通过手动复制 SDK 文件和动态加载 `.so` 库文件的方法集成 IM SDK,详见[集成文档](integration.html)。 @@ -85,6 +85,8 @@ implementation 'io.hyphenate:hyphenate-sdk:3.7.5' // 完整版本,包含音视 implementation 'io.hyphenate:hyphenate-sdk-lite:3.7.5' // 精简版,只包含IM功能 ``` +若要查看最新版本号,请点击[这里](releasenote.html)。 + ### 3. 添加项目权限 根据场景需要,在 `/app/src/main/AndroidManifest.xml` 文件中添加如下行,获取相应的设备权限: diff --git a/docs/uikit/chatuikit/android/chatuikit_integrated.md b/docs/uikit/chatuikit/android/chatuikit_integrated.md index 5b99449d1..841c9eecb 100644 --- a/docs/uikit/chatuikit/android/chatuikit_integrated.md +++ b/docs/uikit/chatuikit/android/chatuikit_integrated.md @@ -19,8 +19,9 @@ 在 app 项目 `build.gradle.kts` 中添加以下依赖: ```kotlin -implementation("io.hyphenate:ease-chat-kit:4.7.0") +implementation("io.hyphenate:ease-chat-kit:4.11.1") ``` +若要查看最新版本号,请点击[这里](https://central.sonatype.com/artifact/io.hyphenate/ease-chat-kit/versions)。 ### 本地依赖 @@ -49,6 +50,21 @@ implementation(project(mapOf("path" to ":ease-im-kit"))) -dontwarn com.hyphenate.** ``` +## 初始化 + +在使用 UIKit 的控件前,必须要先初始化。例如在 `Application` 中: + +```kotlin +class DemoApplication: Application() { + + override fun onCreate() { + val options = ChatOptions() + options.appKey = "你的appkey" + ChatUIKitClient.init(this, options) + } +} +``` + ## 快速搭建页面 ### 创建聊天页面 diff --git a/docs/uikit/chatuikit/android/chatuikit_quickstart.md b/docs/uikit/chatuikit/android/chatuikit_quickstart.md index 0a92eb962..29a73c246 100644 --- a/docs/uikit/chatuikit/android/chatuikit_quickstart.md +++ b/docs/uikit/chatuikit/android/chatuikit_quickstart.md @@ -59,6 +59,7 @@ ```kotlin implementation("io.hyphenate:ease-chat-kit:4.11.1") ``` +若要查看 UIKit 的最新版本号,请点击[这里](https://central.sonatype.com/artifact/io.hyphenate/ease-chat-kit/versions)。 **本地依赖** @@ -168,7 +169,9 @@ implementation(project(mapOf("path" to ":ease-im-kit"))) ### 第二步 实现代码逻辑 -1. 实现登录和退出页面。 +1. 初始化UIKit。 + +2. 实现登录和退出页面。 :::tip 若你已集成了即时通讯 IM SDK,SDK 的所有用户 ID 均可用于登录单群聊 UIKit。 @@ -176,7 +179,9 @@ implementation(project(mapOf("path" to ":ease-im-kit"))) 你需要在环信控制台[创建 IM 用户](/product/enable_and_configure_IM.html#创建-im-用户),登录时传入用户 ID 和密码。 -打开 `MainActivity` 文件,并替换为如下代码: +完整实现示例代码: + +打开 `MainActivity` 文件,并替换为如下代码。 ```kotlin package com.easemob.quickstart @@ -311,7 +316,7 @@ fun Context.showToast(msg: String) { } ``` -2. 点击 `Sync Project with Gradle Files` 同步工程。现在可以测试你的应用了。 +3. 点击 `Sync Project with Gradle Files` 同步工程。现在可以测试你的应用了。 ### 第三步 发送第一条消息 diff --git a/docs/uikit/chatuikit/android/releasenote.md b/docs/uikit/chatuikit/android/releasenote.md index 539f10474..16695c6e0 100644 --- a/docs/uikit/chatuikit/android/releasenote.md +++ b/docs/uikit/chatuikit/android/releasenote.md @@ -1,6 +1,6 @@ # Android 单群聊 UIKit 更新日志 -## 版本 V4.11.0 +## 版本 V4.11.1 ### 新增特性 From 1f72c6c642c1bb485f6577406714c21675216214 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 23 Dec 2024 17:14:26 +0800 Subject: [PATCH 2/4] modify --- .../message_deliver_only_online.md | 2 +- .../react-native/push/push_display.md | 6 ++-- docs/document/web/overview.md | 2 +- .../chatroomuikit/flutter/roomuikit_theme.md | 2 +- .../react-native/roomuikit_best_practice.md | 8 ++--- .../react-native/roomuikit_config_item.md | 30 +++++++++---------- .../react-native/roomuikit_customize.md | 16 +++++----- .../react-native/roomuikit_quickstart.md | 6 ++-- .../react-native/roomuikit_run.md | 2 +- .../react-native/roomuikit_theme.md | 2 +- .../web/roomuikit_best_practice.md | 4 +-- .../chatroomuikit/web/roomuikit_customize.md | 4 +-- .../react-native/chatfeature_common.md | 2 +- .../react-native/chatfeature_message.md | 4 +-- .../react-native/chatuikit_advancedusage.md | 10 +++---- .../chatuikit/react-native/chatuikit_chat.md | 14 ++++----- .../react-native/chatuikit_contactlist.md | 8 ++--- .../react-native/chatuikit_conversation.md | 8 ++--- .../chatuikit_custom_contact_details.md | 4 +-- .../chatuikit_custom_group_details.md | 6 ++-- .../react-native/chatuikit_integrated.md | 14 ++++----- .../chatuikit_internationalization.md | 4 +-- .../react-native/chatuikit_quickstart.md | 2 +- .../chatuikit/react-native/chatuikit_theme.md | 6 ++-- .../react-native/chatuikit_userinfo.md | 4 +-- 25 files changed, 85 insertions(+), 85 deletions(-) diff --git a/docs/document/react-native/message_deliver_only_online.md b/docs/document/react-native/message_deliver_only_online.md index 47c92c013..07c7e7ffd 100644 --- a/docs/document/react-native/message_deliver_only_online.md +++ b/docs/document/react-native/message_deliver_only_online.md @@ -27,7 +27,7 @@ 下面以发送文本消息为例进行说明: -```ts +```typescript // 创建一条文本消息,`content` 为消息文字内容。 // `conversationId` 为消息接收方,单聊时为对端用户 ID、群聊时为群组 ID。 // `conversationIdType` 会话类型:单聊为 ChatMessageChatType.PeerChat,群聊为 ChatMessageChatType.GroupChat diff --git a/docs/document/react-native/push/push_display.md b/docs/document/react-native/push/push_display.md index 3677f8b30..2736fe5ec 100644 --- a/docs/document/react-native/push/push_display.md +++ b/docs/document/react-native/push/push_display.md @@ -102,7 +102,7 @@ ChatClient.getInstance() 这种情况下,创建消息时无需传入 `titleArgs` 和 `contentArgs` 参数。 -```ts +```typescript const message = ChatMessage.createTextMessage("", ""); // 设置推送模板 message.attributes = { @@ -152,7 +152,7 @@ ChatClient.getInstance().chatManager.sendMessage(message, { ![img](/images/android/push/push_template_custom_example.png) -```ts +```typescript const message = ChatMessage.createTextMessage("", ""); // 设置推送模板 message.attributes = { @@ -180,7 +180,7 @@ ChatClient.getInstance().chatManager.sendMessage(message, { 若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。 ::: -```ts +```typescript ChatClient.getInstance() .pushManager.selectPushTemplate("") .then(() => { diff --git a/docs/document/web/overview.md b/docs/document/web/overview.md index 3dbb49204..106529ee6 100644 --- a/docs/document/web/overview.md +++ b/docs/document/web/overview.md @@ -48,7 +48,7 @@ export default { Next 项目, 要使用客户端组件,你可以在文件顶部的导入上方添加 `use client` 指令。 -```tsx +```typescriptx 'use client' import { useEffect } from 'react' diff --git a/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md b/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md index 4c9b65002..e6ad098bc 100644 --- a/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md +++ b/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md @@ -16,7 +16,7 @@ 若切换 ChatUIKitTheme 内置的浅色或深色主题,可使用以下方法: -```tsx +```typescriptx // ... // 设置主题 ChatUIKitTheme( diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md b/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md index 6aa95c359..0763f19ad 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md @@ -4,7 +4,7 @@ 初始化是使用 ChatroomUIKit 的必要步骤,需在所有接口方法调用前完成。 -```tsx +```typescriptx export function App() { const palette = usePresetPalette(); const dark = useDarkTheme(palette); @@ -52,7 +52,7 @@ export function App() { 你可以通过使用工程中的用户对象并遵守 `UserInfoProtocol` 协议登录 ChatroomUIKit,示例代码如下: -```tsx +```typescriptx export function LoginScreen(props: Props) { const {} = props; const im = useRoomContext(); @@ -92,7 +92,7 @@ export function LoginScreen(props: Props) { 2. 加载聊天室视图 `Chatroom`,传入的参数包括聊天室 ID、聊天室所有者的用户 ID 及一些选项。 -```tsx +```typescriptx export function ChatroomScreen(props: Props) { return ( @@ -106,7 +106,7 @@ export function ChatroomScreen(props: Props) { 你可以调用 `useRoomListener` 方法添加监听器用于监听聊天室的事件和错误。 -```tsx +```typescriptx useRoomListener( React.useMemo(() => { return { diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md b/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md index 8e8795866..0a8225cdc 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md @@ -23,7 +23,7 @@ UIKit 支持多国语言切换,目前内置中文和英文,可以扩展其 例如:若要 UIKit 使用英文显示,可以如下设置: -```tsx +```typescriptx ``` @@ -35,7 +35,7 @@ UIKit 支持多国语言切换,目前内置中文和英文,可以扩展其 例如,若开发者希望 `UIKit` 和应用均使用中文,设置如下: -```tsx +```typescriptx // ... // 创建应用需要的语言包。 function createLanguage(type: LanguageCode): StringSet { @@ -58,7 +58,7 @@ return {tr('Chinese text.')}; 例如,若开发者希望应用和 UIKit 均显示法语,设置如下: -```tsx +```typescriptx // ... // 创建应用扩展语言集合。 function createAppLanguage(type: LanguageCode): StringSet { @@ -94,7 +94,7 @@ export function createUIKitLanguage(type: LanguageCode): StringSet { `Chatroom UIKit SDK` 的入口为 `Container` 组件,主要负责集成其他组件和参数配置。 -```tsx +```typescriptx export type ContainerProps = React.PropsWithChildren<{ appKey: string; isDevMode?: boolean; @@ -112,7 +112,7 @@ export type ContainerProps = React.PropsWithChildren<{ }>; ``` -```tsx +```typescriptx // 主要控制 `Chatroom` 组件中的组件是否加载。 export type RoomOption = { globalBroadcast: { @@ -154,7 +154,7 @@ export type RoomOption = { 通常 `Container` 会处于应用的底层,一般为根组件,或者与根组件同一级别。例如: -```tsx +```typescriptx export function App() { return {children}; } @@ -166,7 +166,7 @@ Chatroom 组件集成了成员列表组件 `ParticipantList`、消息输入组 示例如下: -```tsx +```typescriptx // ... // 创建引用对象 const ref = React.useRef({} as any); @@ -177,7 +177,7 @@ const ref = React.useRef({} as any); 由于 `UIKit` 没有路由 (`React-Native` 未内置),所以若需要成员搜索,设置如下: -```tsx +```typescriptx ({} as any); 示例代码如下: -```tsx +```typescriptx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -283,7 +283,7 @@ ref?.current?.addSendedMessage?.(message); 示例代码如下: -```tsx +```typescriptx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -331,7 +331,7 @@ ref?.current?.startShow?.(); 示例代码如下: -```tsx +```typescriptx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -370,7 +370,7 @@ ref.current?.pushTask({ 简单示例如下: -```tsx +```typescriptx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -413,7 +413,7 @@ ref.current?.pushTask?.({ 简单示例如下: -```tsx +```typescriptx // ... // 创建引用对象 const ref = React.useRef({} as any); @@ -467,7 +467,7 @@ ref?.current?.close?.(); 示例代码如下: -```tsx +```typescriptx // ... // 创建引用对象 const ref = React.useRef({} as any); @@ -526,7 +526,7 @@ ref?.current?.startShow?.(); 示例代码如下: -```tsx +```typescriptx // ... // 创建引用对象 const ref = React.useRef({} as any); diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md b/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md index 6b5a41e1a..e92708698 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md @@ -8,7 +8,7 @@ 若 ChatroomUIKit 中内置的打赏消息组件 `GiftMessageList` 无法满足需求,你可以在满足 `GiftMessageListComponent` 的约束的前提下创建新组件,例如 `MyGiftMessageList`,实现自定义业务逻辑和自定义样式。 -```tsx +```typescriptx export const MyGiftMessageList: GiftMessageListComponent = React.forwardRef< GiftMessageListRef, GiftMessageListProps @@ -35,7 +35,7 @@ export const MyGiftMessageList: GiftMessageListComponent = React.forwardRef< 利用新的 `MyGiftMessageList` 组件替换内置的 `GiftMessageList` 组件,添加到 Chatroom 组件。 -```tsx +```typescriptx ``` @@ -43,7 +43,7 @@ export const MyGiftMessageList: GiftMessageListComponent = React.forwardRef< 若 ChatroomUIKit 中内置的全局广播消息组件 `GlobalBroadcast` 无法满足需求,你可以在满足 `GlobalBroadcastComponent` 的约束的情况下创建新组件,例如 `MyGlobalBroadcast`,实现自定义业务逻辑和自定义样式。 -```tsx +```typescriptx export const MyGlobalBroadcast = React.forwardRef< GlobalBroadcastRef, GlobalBroadcastProps @@ -69,7 +69,7 @@ export const MyGlobalBroadcast = React.forwardRef< 利用 `MyGlobalBroadcast` 组件替换内置的 `GlobalBroadcast` 组件。 -```tsx +```typescriptx ``` @@ -77,7 +77,7 @@ export const MyGlobalBroadcast = React.forwardRef< 修改组件的消息样式。示例代码如下: -```tsx +```typescriptx export function MyMessageListItem(props: MessageListItemProps) { // todo:实现自己的业务逻辑或修改当前业务逻辑。 return <>; @@ -87,7 +87,7 @@ export const MyMessageListItemMemo = React.memo(MyMessageListItem); 更新消息列表项的样式。示例代码如下: -```tsx +```typescriptx ; @@ -112,7 +112,7 @@ export const MyParticipantListItemMemo = React.memo(MyParticipantListItem); 更新聊天室成员组件的列表项样式。示例代码如下: -```tsx +```typescriptx {/* // todo: 在这里添加组件 */}; @@ -62,7 +62,7 @@ export function App() { 在开发环境中,你需要在环信控制台[创建 IM 用户](/product/enable_and_configure_IM.html#创建-im-用户),从你的 App Server 获取用户 token,详见[使用环信用户 token 鉴权](/product/easemob_user_token.html)。 -```tsx +```typescriptx // ... // 获取 IM 服务对象 const im = useRoomContext(); @@ -89,7 +89,7 @@ im.login({ 通过加载 `Chatroom` 组件,你会自动加入聊天室,并返回是否成功加入。若该组件加载失败,你可以调用加入聊天室的 API 加入聊天室。 -```tsx +```typescriptx // ... // 创建组件引用对象。 const chatroomRef = React.useRef({} as any); diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_run.md b/docs/uikit/chatroomuikit/react-native/roomuikit_run.md index 345954668..2d4b12429 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_run.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_run.md @@ -14,7 +14,7 @@ ### 第一步 在项目中安装 ChatroomUIKit -```tsx +```typescriptx npm install react-native-chat-room // or yarn add react-native-chat-room diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md b/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md index 11d1265aa..cc96a7e4d 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md @@ -14,7 +14,7 @@ ChatroomUIkit 内置浅色和深色主题,默认为浅色主题。每个 UI 若切换 ChatroomUIKit 内置的浅色或深色主题,可使用以下方法: -```tsx +```typescriptx // ... // 设置主题 const palette = usePresetPalette(); diff --git a/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md b/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md index 4dcaa7bdc..44c912731 100644 --- a/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md +++ b/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md @@ -6,7 +6,7 @@ `Chatroom` 和 `ChatroomMember` 组件需要包裹在 `UIKitProvider` 组件内部使用。如果 `UIKitProvider` 在初始化完成前在组件内部使用 `useClient` 获取 SDK,则会获取失败,所以建议将 `UIKitProvider` 放在使用 `Chatroom` 或 `ChatroomMember` 组件的父组件中。 -```tsx +```typescriptx // App.ts // ... const App = () => { @@ -29,7 +29,7 @@ UIKit 提供两种登录方式: - 初始化时指定 `userId` 和 `password/token` 进行自动登录。 - 使用 `useClient` 获取 SDK 实例进行手动登录。 -```tsx +```typescriptx // 手动登录 // ... const App = () => { diff --git a/docs/uikit/chatroomuikit/web/roomuikit_customize.md b/docs/uikit/chatroomuikit/web/roomuikit_customize.md index 4258d4680..2b0fa074e 100644 --- a/docs/uikit/chatroomuikit/web/roomuikit_customize.md +++ b/docs/uikit/chatroomuikit/web/roomuikit_customize.md @@ -25,7 +25,7 @@ const ChatApp = () => { 你可以通过容器组件的 `renderMessageList` 方法渲染自定义聊天室消息区域: -```tsx +```typescriptx import { Chatroom, MessageList } from "easemob-chat-uikit"; const ChatApp = () => { @@ -58,7 +58,7 @@ const ChatApp = () => { 你可以通过容器组件的 `messageEditorProps` 属性自定义 `giftConfig`: -```tsx +```typescriptx import { Chatroom, MessageList } from "easemob-chat-uikit"; const ChatApp = () => { diff --git a/docs/uikit/chatuikit/react-native/chatfeature_common.md b/docs/uikit/chatuikit/react-native/chatfeature_common.md index 3b074e541..c4c3d3727 100644 --- a/docs/uikit/chatuikit/react-native/chatfeature_common.md +++ b/docs/uikit/chatuikit/react-native/chatfeature_common.md @@ -102,7 +102,7 @@ 示例代码如下: -```tsx +```typescriptx type Props = NativeStackScreenProps; export function MessageSearchScreen(props: Props) { const { route } = props; diff --git a/docs/uikit/chatuikit/react-native/chatfeature_message.md b/docs/uikit/chatuikit/react-native/chatfeature_message.md index f215094dd..d08b973e0 100644 --- a/docs/uikit/chatuikit/react-native/chatfeature_message.md +++ b/docs/uikit/chatuikit/react-native/chatfeature_message.md @@ -133,7 +133,7 @@ 下面的示例代码为如何开启消息置顶功能: -```tsx +```typescriptx import { NavigationContainer } from "@react-navigation/native"; import { Container as UIKitContainer } from "react-native-chat-uikit"; export function App() { @@ -168,7 +168,7 @@ export function App() { 示例代码如下: -```tsx +```typescriptx export function App() { // 设置是否启用正在输入状态 const enableTypingRef = React.useRef(false); diff --git a/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md b/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md index 0efe5f3bc..fbecd7f1d 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md @@ -87,7 +87,7 @@ 例如: -```tsx +```typescriptx export function SomeView() { const { colors } = usePaletteContext(); const { getColor } = useColors({ @@ -112,7 +112,7 @@ export function SomeView() { 例如: -```tsx +```typescriptx export function SomeView() { const [value, setValue] = React.useState(""); const { delayExecTask: deferSearch } = useDelayExecTask( @@ -140,7 +140,7 @@ export function SomeView() { 例如: -```tsx +```typescriptx export function SomeView() { const count = React.useRef(0); const { updater } = useForceUpdate(); @@ -166,7 +166,7 @@ export function SomeView() { 例如: -```tsx +```typescriptx export function SomeView(props) { const { containerStyle } = props; const { getStyleSize } = useGetStyleProps(); @@ -193,7 +193,7 @@ export function SomeView(props) { 例如: -```tsx +```typescriptx export function SomeView() { const { getPermission } = usePermissions(); React.useEffect(() => { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_chat.md b/docs/uikit/chatuikit/react-native/chatuikit_chat.md index ec75a051d..b6678e564 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_chat.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_chat.md @@ -23,7 +23,7 @@ 示例代码如下: -```tsx +```typescriptx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; import type { RootParamsName, RootScreenParamsList } from "../routes"; type Props = NativeStackScreenProps; @@ -235,7 +235,7 @@ export function ConversationDetailScreen(props: Props) { ### 设置消息列表的背景颜色 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function ConversationDetailScreen(props: Props) { const { route } = props; @@ -259,7 +259,7 @@ export function ConversationDetailScreen(props: Props) { ### 设置消息列表的背景图片 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function ConversationDetailScreen(props: Props) { const { route } = props; @@ -285,7 +285,7 @@ export function ConversationDetailScreen(props: Props) { 设置消息气泡下面的时间戳,需要在初始化部分进行。 示例代码如下: -```tsx +```typescriptx export function App() { const { getOptions } = useApp(); @@ -309,7 +309,7 @@ export function App() { 对于消息列表项,可以设置头像、昵称、气泡布局、样式、事件等。 -```tsx +```typescriptx export function MyMessageContent(props: MessageContentProps) { const { msg, layoutType, isSupport, contentMaxWidth } = props; if (msg.body.type === ChatMessageType.TXT) { @@ -353,7 +353,7 @@ export function ConversationDetailScreen(props: Props) { 其它自定义的内容,可以参考 `MessageViewProps` 属性。 -```tsx +```typescriptx export function MyMessageView(props: MessageViewProps) { if (props.model.layoutType === 'left') { // todo: 如果是左边的消息,则不显示头像 @@ -483,7 +483,7 @@ export function App() { 示例如下: -```tsx +```typescriptx export function MyMessageContent(props: MessageContentProps) { const { msg } = props; if (msg.body.type === ChatMessageType.CUSTOM) { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md b/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md index f876bc257..35e63a3f9 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md @@ -12,7 +12,7 @@ 默认使用示例如下: -```tsx +```typescriptx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; export function ContactListScreen(props: Props) { @@ -82,7 +82,7 @@ export function ContactListScreen(props: Props) { 自定义 Header 列表项,可以添加、删除、修改列表项,每个列表项可以实现样式、布局、颜色等属性的修改。 -```tsx +```typescriptx export const MyCustomItemView = (props: ContactItemProps) => { const {} = props; return ; @@ -108,7 +108,7 @@ function MyContactListScreen(props: MyContactListScreenProps) { ## 是否显示字母索引表和字母导航列表 -```tsx +```typescriptx export type MyContactListScreenProps = {}; function MyContactListScreen(props: MyContactListScreenProps) { const {} = props; @@ -127,7 +127,7 @@ function MyContactListScreen(props: MyContactListScreenProps) { 自定义列表项可以修改头像、昵称、样式(例如,列表项的高度和背景颜色)、布局等。 -```tsx +```typescriptx export type MyContactListScreenProps = {}; function MyContactListScreen(props: MyContactListScreenProps) { const {} = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_conversation.md b/docs/uikit/chatuikit/react-native/chatuikit_conversation.md index 2c4882023..94d5a4fe5 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_conversation.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_conversation.md @@ -25,7 +25,7 @@ 使用默认参数时的示例代码如下: -```tsx +```typescriptx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; export function ConversationListScreen(props: Props) { @@ -95,7 +95,7 @@ export function ConversationListScreen(props: Props) { 你也可以使用 `View` 组件实现自定义导航栏。相对于 `TopNavigationBar` 组件,`View` 组件较为灵活,例如支持设置导航栏背景色。 -```tsx +```typescriptx type MyConversationListScreenProps = {}; function MyConversationListScreen(props: MyConversationListScreenProps) { const {} = props; @@ -140,7 +140,7 @@ function MyConversationListScreen(props: MyConversationListScreenProps) { 通过 `ListItemRender` 属性实现列表项的样式、布局修改,例如,会话列表项的高度、宽度、背景颜色、上下边距、左右边距以及会话列表项的自定义点击行为和长按行为等。 -```tsx +```typescriptx type MyConversationListScreenProps = {}; function MyConversationListScreen(props: MyConversationListScreenProps) { const {} = props; @@ -175,7 +175,7 @@ function MyConversationListScreen(props: MyConversationListScreenProps) { 默认组件不支持侧滑,你需要自定义列表项组件,例如,在左滑和右滑菜单中添加按钮。其中,`SlideListItem` 组件在 `uikit` 中提供,示例如下: -```tsx +```typescriptx type MyConversationListScreenProps = {}; function MyConversationListScreen(props: MyConversationListScreenProps) { const {} = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md b/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md index c765b3655..c08420204 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md @@ -16,7 +16,7 @@ 可以添加、删除、修改按钮项,每个按钮项可以修改样式、布局、事件等内容。 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function ContactInfoScreen(props: Props) { const { route } = props; @@ -43,7 +43,7 @@ export function ContactInfoScreen(props: Props) { 可以添加、删除、修改列表项,每个列表项可以修改样式、布局、事件等内容。 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function ContactInfoScreen(props: Props) { const { route } = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md b/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md index a3828b4c6..7a50649b4 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md @@ -10,7 +10,7 @@ 该导航栏组件为通用组件,在成员页面,导航栏左边组件为返回按钮、右边为功能扩展菜单。自定义方式和方法和会话列表类似。 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function GroupParticipantListScreen(props: Props) { const { route } = props; @@ -57,7 +57,7 @@ export function GroupParticipantListScreen(props: Props) { 可以添加、删除、修改按钮项,每个按钮项可以修改样式、布局、事件等内容。 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function GroupInfoScreen(props: Props) { const { route } = props; @@ -86,7 +86,7 @@ export function GroupInfoScreen(props: Props) { 可以添加、删除、修改列表项,每个列表项可以修改样式、布局、事件等内容。 -```tsx +```typescriptx type Props = NativeStackScreenProps; export function GroupInfoScreen(props: Props) { const { route } = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_integrated.md b/docs/uikit/chatuikit/react-native/chatuikit_integrated.md index 194339ddd..3d868ba3e 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_integrated.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_integrated.md @@ -99,7 +99,7 @@ twemoji@>=14.0.2 例如: -```tsx +```typescriptx function App(): React.JSX.Element { return ( @@ -113,7 +113,7 @@ function App(): React.JSX.Element { 通过 `Container` 组件提供的属性设置主题,示例代码如下: -```tsx +```typescriptx function App(): React.JSX.Element { const palette = usePresetPalette(); const light = useLightTheme(palette); @@ -129,7 +129,7 @@ function App(): React.JSX.Element { 通过 `Container` 组件提供的属性设置国际化,示例代码如下: -```tsx +```typescriptx function App(): React.JSX.Element { return ( @@ -145,7 +145,7 @@ function App(): React.JSX.Element { 例如: -```tsx +```typescriptx function App(): React.JSX.Element { return ( @@ -170,7 +170,7 @@ function App(): React.JSX.Element { 如果想要进行搜索,需要使用 `SearchConversation` 组件,例如: -```tsx +```typescriptx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; @@ -216,7 +216,7 @@ export function ConversationListScreen(props: Props) { 例如: -```tsx +```typescriptx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; @@ -253,7 +253,7 @@ export function ContactListScreen(props: Props) { 例如: -```tsx +```typescriptx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; import type { RootParamsName, RootScreenParamsList } from "../routes"; type Props = NativeStackScreenProps; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md b/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md index f7fc8e124..071bacd02 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md @@ -6,7 +6,7 @@ 例如: -```tsx +```typescriptx export function App() { // 如果没有指定语言,则通过系统获取默认语言。 const [language] = React.useState("zh-Hans"); @@ -25,7 +25,7 @@ export function App() { 例如: -```tsx +```typescriptx // 创建法语语言包 export function createStringSetFr(): StringSet { return { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md b/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md index 141c24ced..78b98c926 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md @@ -103,7 +103,7 @@ npx react-native --version 0.73.2 init ProjectName 添加的主要代码包括登录、登出、发送消息。 -```tsx +```typescriptx import * as React from "react"; import { Pressable, SafeAreaView, Text, View } from "react-native"; import { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_theme.md b/docs/uikit/chatuikit/react-native/chatuikit_theme.md index 4232d5e2d..52c94322d 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_theme.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_theme.md @@ -18,7 +18,7 @@ 使用默认主题,代码如下: -```tsx +```typescriptx export function App() { const palette = usePresetPalette(); const dark = useDarkTheme(palette); @@ -59,7 +59,7 @@ export function App() { 例如: -```tsx +```typescriptx export function App() { const { createPalette } = useCreatePalette({ colors: { @@ -85,7 +85,7 @@ export function App() { 除了颜色,你还可以修改字体、边框圆角等样式。 -```tsx +```typescriptx export function App() { // 通过调色板修改 const palette = usePresetPalette(); diff --git a/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md b/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md index f4132e57c..5754c27e3 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md @@ -18,7 +18,7 @@ 示例如下: -```tsx +```typescriptx export function App() { const onUsersHandler = React.useCallback( async (data: Map) => { @@ -102,7 +102,7 @@ export function App() { 示例如下: -```tsx +```typescriptx // 假设更新群组名称 export function SomeComponent() { const im = useChatContext(); From 5b8e092e025248d31709984cb05dbff31057c2df Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 23 Dec 2024 17:16:09 +0800 Subject: [PATCH 3/4] modify --- docs/document/web/overview.md | 2 +- .../chatroomuikit/flutter/roomuikit_theme.md | 2 +- .../react-native/roomuikit_best_practice.md | 8 ++--- .../react-native/roomuikit_config_item.md | 30 +++++++++---------- .../react-native/roomuikit_customize.md | 16 +++++----- .../react-native/roomuikit_quickstart.md | 6 ++-- .../react-native/roomuikit_run.md | 2 +- .../react-native/roomuikit_theme.md | 2 +- .../web/roomuikit_best_practice.md | 4 +-- .../chatroomuikit/web/roomuikit_customize.md | 4 +-- .../react-native/chatfeature_common.md | 2 +- .../react-native/chatfeature_message.md | 4 +-- .../react-native/chatuikit_advancedusage.md | 10 +++---- .../chatuikit/react-native/chatuikit_chat.md | 14 ++++----- .../react-native/chatuikit_contactlist.md | 8 ++--- .../react-native/chatuikit_conversation.md | 8 ++--- .../chatuikit_custom_contact_details.md | 4 +-- .../chatuikit_custom_group_details.md | 6 ++-- .../react-native/chatuikit_integrated.md | 14 ++++----- .../chatuikit_internationalization.md | 4 +-- .../react-native/chatuikit_quickstart.md | 2 +- .../chatuikit/react-native/chatuikit_theme.md | 6 ++-- .../react-native/chatuikit_userinfo.md | 4 +-- 23 files changed, 81 insertions(+), 81 deletions(-) diff --git a/docs/document/web/overview.md b/docs/document/web/overview.md index 106529ee6..3dbb49204 100644 --- a/docs/document/web/overview.md +++ b/docs/document/web/overview.md @@ -48,7 +48,7 @@ export default { Next 项目, 要使用客户端组件,你可以在文件顶部的导入上方添加 `use client` 指令。 -```typescriptx +```tsx 'use client' import { useEffect } from 'react' diff --git a/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md b/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md index e6ad098bc..4c9b65002 100644 --- a/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md +++ b/docs/uikit/chatroomuikit/flutter/roomuikit_theme.md @@ -16,7 +16,7 @@ 若切换 ChatUIKitTheme 内置的浅色或深色主题,可使用以下方法: -```typescriptx +```tsx // ... // 设置主题 ChatUIKitTheme( diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md b/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md index 0763f19ad..6aa95c359 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_best_practice.md @@ -4,7 +4,7 @@ 初始化是使用 ChatroomUIKit 的必要步骤,需在所有接口方法调用前完成。 -```typescriptx +```tsx export function App() { const palette = usePresetPalette(); const dark = useDarkTheme(palette); @@ -52,7 +52,7 @@ export function App() { 你可以通过使用工程中的用户对象并遵守 `UserInfoProtocol` 协议登录 ChatroomUIKit,示例代码如下: -```typescriptx +```tsx export function LoginScreen(props: Props) { const {} = props; const im = useRoomContext(); @@ -92,7 +92,7 @@ export function LoginScreen(props: Props) { 2. 加载聊天室视图 `Chatroom`,传入的参数包括聊天室 ID、聊天室所有者的用户 ID 及一些选项。 -```typescriptx +```tsx export function ChatroomScreen(props: Props) { return ( @@ -106,7 +106,7 @@ export function ChatroomScreen(props: Props) { 你可以调用 `useRoomListener` 方法添加监听器用于监听聊天室的事件和错误。 -```typescriptx +```tsx useRoomListener( React.useMemo(() => { return { diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md b/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md index 0a8225cdc..8e8795866 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_config_item.md @@ -23,7 +23,7 @@ UIKit 支持多国语言切换,目前内置中文和英文,可以扩展其 例如:若要 UIKit 使用英文显示,可以如下设置: -```typescriptx +```tsx ``` @@ -35,7 +35,7 @@ UIKit 支持多国语言切换,目前内置中文和英文,可以扩展其 例如,若开发者希望 `UIKit` 和应用均使用中文,设置如下: -```typescriptx +```tsx // ... // 创建应用需要的语言包。 function createLanguage(type: LanguageCode): StringSet { @@ -58,7 +58,7 @@ return {tr('Chinese text.')}; 例如,若开发者希望应用和 UIKit 均显示法语,设置如下: -```typescriptx +```tsx // ... // 创建应用扩展语言集合。 function createAppLanguage(type: LanguageCode): StringSet { @@ -94,7 +94,7 @@ export function createUIKitLanguage(type: LanguageCode): StringSet { `Chatroom UIKit SDK` 的入口为 `Container` 组件,主要负责集成其他组件和参数配置。 -```typescriptx +```tsx export type ContainerProps = React.PropsWithChildren<{ appKey: string; isDevMode?: boolean; @@ -112,7 +112,7 @@ export type ContainerProps = React.PropsWithChildren<{ }>; ``` -```typescriptx +```tsx // 主要控制 `Chatroom` 组件中的组件是否加载。 export type RoomOption = { globalBroadcast: { @@ -154,7 +154,7 @@ export type RoomOption = { 通常 `Container` 会处于应用的底层,一般为根组件,或者与根组件同一级别。例如: -```typescriptx +```tsx export function App() { return {children}; } @@ -166,7 +166,7 @@ Chatroom 组件集成了成员列表组件 `ParticipantList`、消息输入组 示例如下: -```typescriptx +```tsx // ... // 创建引用对象 const ref = React.useRef({} as any); @@ -177,7 +177,7 @@ const ref = React.useRef({} as any); 由于 `UIKit` 没有路由 (`React-Native` 未内置),所以若需要成员搜索,设置如下: -```typescriptx +```tsx ({} as any); 示例代码如下: -```typescriptx +```tsx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -283,7 +283,7 @@ ref?.current?.addSendedMessage?.(message); 示例代码如下: -```typescriptx +```tsx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -331,7 +331,7 @@ ref?.current?.startShow?.(); 示例代码如下: -```typescriptx +```tsx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -370,7 +370,7 @@ ref.current?.pushTask({ 简单示例如下: -```typescriptx +```tsx // ... // 创建组件引用对象 const ref = React.useRef({} as any); @@ -413,7 +413,7 @@ ref.current?.pushTask?.({ 简单示例如下: -```typescriptx +```tsx // ... // 创建引用对象 const ref = React.useRef({} as any); @@ -467,7 +467,7 @@ ref?.current?.close?.(); 示例代码如下: -```typescriptx +```tsx // ... // 创建引用对象 const ref = React.useRef({} as any); @@ -526,7 +526,7 @@ ref?.current?.startShow?.(); 示例代码如下: -```typescriptx +```tsx // ... // 创建引用对象 const ref = React.useRef({} as any); diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md b/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md index e92708698..6b5a41e1a 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_customize.md @@ -8,7 +8,7 @@ 若 ChatroomUIKit 中内置的打赏消息组件 `GiftMessageList` 无法满足需求,你可以在满足 `GiftMessageListComponent` 的约束的前提下创建新组件,例如 `MyGiftMessageList`,实现自定义业务逻辑和自定义样式。 -```typescriptx +```tsx export const MyGiftMessageList: GiftMessageListComponent = React.forwardRef< GiftMessageListRef, GiftMessageListProps @@ -35,7 +35,7 @@ export const MyGiftMessageList: GiftMessageListComponent = React.forwardRef< 利用新的 `MyGiftMessageList` 组件替换内置的 `GiftMessageList` 组件,添加到 Chatroom 组件。 -```typescriptx +```tsx ``` @@ -43,7 +43,7 @@ export const MyGiftMessageList: GiftMessageListComponent = React.forwardRef< 若 ChatroomUIKit 中内置的全局广播消息组件 `GlobalBroadcast` 无法满足需求,你可以在满足 `GlobalBroadcastComponent` 的约束的情况下创建新组件,例如 `MyGlobalBroadcast`,实现自定义业务逻辑和自定义样式。 -```typescriptx +```tsx export const MyGlobalBroadcast = React.forwardRef< GlobalBroadcastRef, GlobalBroadcastProps @@ -69,7 +69,7 @@ export const MyGlobalBroadcast = React.forwardRef< 利用 `MyGlobalBroadcast` 组件替换内置的 `GlobalBroadcast` 组件。 -```typescriptx +```tsx ``` @@ -77,7 +77,7 @@ export const MyGlobalBroadcast = React.forwardRef< 修改组件的消息样式。示例代码如下: -```typescriptx +```tsx export function MyMessageListItem(props: MessageListItemProps) { // todo:实现自己的业务逻辑或修改当前业务逻辑。 return <>; @@ -87,7 +87,7 @@ export const MyMessageListItemMemo = React.memo(MyMessageListItem); 更新消息列表项的样式。示例代码如下: -```typescriptx +```tsx ; @@ -112,7 +112,7 @@ export const MyParticipantListItemMemo = React.memo(MyParticipantListItem); 更新聊天室成员组件的列表项样式。示例代码如下: -```typescriptx +```tsx {/* // todo: 在这里添加组件 */}; @@ -62,7 +62,7 @@ export function App() { 在开发环境中,你需要在环信控制台[创建 IM 用户](/product/enable_and_configure_IM.html#创建-im-用户),从你的 App Server 获取用户 token,详见[使用环信用户 token 鉴权](/product/easemob_user_token.html)。 -```typescriptx +```tsx // ... // 获取 IM 服务对象 const im = useRoomContext(); @@ -89,7 +89,7 @@ im.login({ 通过加载 `Chatroom` 组件,你会自动加入聊天室,并返回是否成功加入。若该组件加载失败,你可以调用加入聊天室的 API 加入聊天室。 -```typescriptx +```tsx // ... // 创建组件引用对象。 const chatroomRef = React.useRef({} as any); diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_run.md b/docs/uikit/chatroomuikit/react-native/roomuikit_run.md index 2d4b12429..345954668 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_run.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_run.md @@ -14,7 +14,7 @@ ### 第一步 在项目中安装 ChatroomUIKit -```typescriptx +```tsx npm install react-native-chat-room // or yarn add react-native-chat-room diff --git a/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md b/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md index cc96a7e4d..11d1265aa 100644 --- a/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md +++ b/docs/uikit/chatroomuikit/react-native/roomuikit_theme.md @@ -14,7 +14,7 @@ ChatroomUIkit 内置浅色和深色主题,默认为浅色主题。每个 UI 若切换 ChatroomUIKit 内置的浅色或深色主题,可使用以下方法: -```typescriptx +```tsx // ... // 设置主题 const palette = usePresetPalette(); diff --git a/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md b/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md index 44c912731..4dcaa7bdc 100644 --- a/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md +++ b/docs/uikit/chatroomuikit/web/roomuikit_best_practice.md @@ -6,7 +6,7 @@ `Chatroom` 和 `ChatroomMember` 组件需要包裹在 `UIKitProvider` 组件内部使用。如果 `UIKitProvider` 在初始化完成前在组件内部使用 `useClient` 获取 SDK,则会获取失败,所以建议将 `UIKitProvider` 放在使用 `Chatroom` 或 `ChatroomMember` 组件的父组件中。 -```typescriptx +```tsx // App.ts // ... const App = () => { @@ -29,7 +29,7 @@ UIKit 提供两种登录方式: - 初始化时指定 `userId` 和 `password/token` 进行自动登录。 - 使用 `useClient` 获取 SDK 实例进行手动登录。 -```typescriptx +```tsx // 手动登录 // ... const App = () => { diff --git a/docs/uikit/chatroomuikit/web/roomuikit_customize.md b/docs/uikit/chatroomuikit/web/roomuikit_customize.md index 2b0fa074e..4258d4680 100644 --- a/docs/uikit/chatroomuikit/web/roomuikit_customize.md +++ b/docs/uikit/chatroomuikit/web/roomuikit_customize.md @@ -25,7 +25,7 @@ const ChatApp = () => { 你可以通过容器组件的 `renderMessageList` 方法渲染自定义聊天室消息区域: -```typescriptx +```tsx import { Chatroom, MessageList } from "easemob-chat-uikit"; const ChatApp = () => { @@ -58,7 +58,7 @@ const ChatApp = () => { 你可以通过容器组件的 `messageEditorProps` 属性自定义 `giftConfig`: -```typescriptx +```tsx import { Chatroom, MessageList } from "easemob-chat-uikit"; const ChatApp = () => { diff --git a/docs/uikit/chatuikit/react-native/chatfeature_common.md b/docs/uikit/chatuikit/react-native/chatfeature_common.md index c4c3d3727..3b074e541 100644 --- a/docs/uikit/chatuikit/react-native/chatfeature_common.md +++ b/docs/uikit/chatuikit/react-native/chatfeature_common.md @@ -102,7 +102,7 @@ 示例代码如下: -```typescriptx +```tsx type Props = NativeStackScreenProps; export function MessageSearchScreen(props: Props) { const { route } = props; diff --git a/docs/uikit/chatuikit/react-native/chatfeature_message.md b/docs/uikit/chatuikit/react-native/chatfeature_message.md index d08b973e0..f215094dd 100644 --- a/docs/uikit/chatuikit/react-native/chatfeature_message.md +++ b/docs/uikit/chatuikit/react-native/chatfeature_message.md @@ -133,7 +133,7 @@ 下面的示例代码为如何开启消息置顶功能: -```typescriptx +```tsx import { NavigationContainer } from "@react-navigation/native"; import { Container as UIKitContainer } from "react-native-chat-uikit"; export function App() { @@ -168,7 +168,7 @@ export function App() { 示例代码如下: -```typescriptx +```tsx export function App() { // 设置是否启用正在输入状态 const enableTypingRef = React.useRef(false); diff --git a/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md b/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md index fbecd7f1d..0efe5f3bc 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_advancedusage.md @@ -87,7 +87,7 @@ 例如: -```typescriptx +```tsx export function SomeView() { const { colors } = usePaletteContext(); const { getColor } = useColors({ @@ -112,7 +112,7 @@ export function SomeView() { 例如: -```typescriptx +```tsx export function SomeView() { const [value, setValue] = React.useState(""); const { delayExecTask: deferSearch } = useDelayExecTask( @@ -140,7 +140,7 @@ export function SomeView() { 例如: -```typescriptx +```tsx export function SomeView() { const count = React.useRef(0); const { updater } = useForceUpdate(); @@ -166,7 +166,7 @@ export function SomeView() { 例如: -```typescriptx +```tsx export function SomeView(props) { const { containerStyle } = props; const { getStyleSize } = useGetStyleProps(); @@ -193,7 +193,7 @@ export function SomeView(props) { 例如: -```typescriptx +```tsx export function SomeView() { const { getPermission } = usePermissions(); React.useEffect(() => { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_chat.md b/docs/uikit/chatuikit/react-native/chatuikit_chat.md index b6678e564..ec75a051d 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_chat.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_chat.md @@ -23,7 +23,7 @@ 示例代码如下: -```typescriptx +```tsx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; import type { RootParamsName, RootScreenParamsList } from "../routes"; type Props = NativeStackScreenProps; @@ -235,7 +235,7 @@ export function ConversationDetailScreen(props: Props) { ### 设置消息列表的背景颜色 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function ConversationDetailScreen(props: Props) { const { route } = props; @@ -259,7 +259,7 @@ export function ConversationDetailScreen(props: Props) { ### 设置消息列表的背景图片 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function ConversationDetailScreen(props: Props) { const { route } = props; @@ -285,7 +285,7 @@ export function ConversationDetailScreen(props: Props) { 设置消息气泡下面的时间戳,需要在初始化部分进行。 示例代码如下: -```typescriptx +```tsx export function App() { const { getOptions } = useApp(); @@ -309,7 +309,7 @@ export function App() { 对于消息列表项,可以设置头像、昵称、气泡布局、样式、事件等。 -```typescriptx +```tsx export function MyMessageContent(props: MessageContentProps) { const { msg, layoutType, isSupport, contentMaxWidth } = props; if (msg.body.type === ChatMessageType.TXT) { @@ -353,7 +353,7 @@ export function ConversationDetailScreen(props: Props) { 其它自定义的内容,可以参考 `MessageViewProps` 属性。 -```typescriptx +```tsx export function MyMessageView(props: MessageViewProps) { if (props.model.layoutType === 'left') { // todo: 如果是左边的消息,则不显示头像 @@ -483,7 +483,7 @@ export function App() { 示例如下: -```typescriptx +```tsx export function MyMessageContent(props: MessageContentProps) { const { msg } = props; if (msg.body.type === ChatMessageType.CUSTOM) { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md b/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md index 35e63a3f9..f876bc257 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_contactlist.md @@ -12,7 +12,7 @@ 默认使用示例如下: -```typescriptx +```tsx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; export function ContactListScreen(props: Props) { @@ -82,7 +82,7 @@ export function ContactListScreen(props: Props) { 自定义 Header 列表项,可以添加、删除、修改列表项,每个列表项可以实现样式、布局、颜色等属性的修改。 -```typescriptx +```tsx export const MyCustomItemView = (props: ContactItemProps) => { const {} = props; return ; @@ -108,7 +108,7 @@ function MyContactListScreen(props: MyContactListScreenProps) { ## 是否显示字母索引表和字母导航列表 -```typescriptx +```tsx export type MyContactListScreenProps = {}; function MyContactListScreen(props: MyContactListScreenProps) { const {} = props; @@ -127,7 +127,7 @@ function MyContactListScreen(props: MyContactListScreenProps) { 自定义列表项可以修改头像、昵称、样式(例如,列表项的高度和背景颜色)、布局等。 -```typescriptx +```tsx export type MyContactListScreenProps = {}; function MyContactListScreen(props: MyContactListScreenProps) { const {} = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_conversation.md b/docs/uikit/chatuikit/react-native/chatuikit_conversation.md index 94d5a4fe5..2c4882023 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_conversation.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_conversation.md @@ -25,7 +25,7 @@ 使用默认参数时的示例代码如下: -```typescriptx +```tsx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; export function ConversationListScreen(props: Props) { @@ -95,7 +95,7 @@ export function ConversationListScreen(props: Props) { 你也可以使用 `View` 组件实现自定义导航栏。相对于 `TopNavigationBar` 组件,`View` 组件较为灵活,例如支持设置导航栏背景色。 -```typescriptx +```tsx type MyConversationListScreenProps = {}; function MyConversationListScreen(props: MyConversationListScreenProps) { const {} = props; @@ -140,7 +140,7 @@ function MyConversationListScreen(props: MyConversationListScreenProps) { 通过 `ListItemRender` 属性实现列表项的样式、布局修改,例如,会话列表项的高度、宽度、背景颜色、上下边距、左右边距以及会话列表项的自定义点击行为和长按行为等。 -```typescriptx +```tsx type MyConversationListScreenProps = {}; function MyConversationListScreen(props: MyConversationListScreenProps) { const {} = props; @@ -175,7 +175,7 @@ function MyConversationListScreen(props: MyConversationListScreenProps) { 默认组件不支持侧滑,你需要自定义列表项组件,例如,在左滑和右滑菜单中添加按钮。其中,`SlideListItem` 组件在 `uikit` 中提供,示例如下: -```typescriptx +```tsx type MyConversationListScreenProps = {}; function MyConversationListScreen(props: MyConversationListScreenProps) { const {} = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md b/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md index c08420204..c765b3655 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_custom_contact_details.md @@ -16,7 +16,7 @@ 可以添加、删除、修改按钮项,每个按钮项可以修改样式、布局、事件等内容。 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function ContactInfoScreen(props: Props) { const { route } = props; @@ -43,7 +43,7 @@ export function ContactInfoScreen(props: Props) { 可以添加、删除、修改列表项,每个列表项可以修改样式、布局、事件等内容。 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function ContactInfoScreen(props: Props) { const { route } = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md b/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md index 7a50649b4..a3828b4c6 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_custom_group_details.md @@ -10,7 +10,7 @@ 该导航栏组件为通用组件,在成员页面,导航栏左边组件为返回按钮、右边为功能扩展菜单。自定义方式和方法和会话列表类似。 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function GroupParticipantListScreen(props: Props) { const { route } = props; @@ -57,7 +57,7 @@ export function GroupParticipantListScreen(props: Props) { 可以添加、删除、修改按钮项,每个按钮项可以修改样式、布局、事件等内容。 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function GroupInfoScreen(props: Props) { const { route } = props; @@ -86,7 +86,7 @@ export function GroupInfoScreen(props: Props) { 可以添加、删除、修改列表项,每个列表项可以修改样式、布局、事件等内容。 -```typescriptx +```tsx type Props = NativeStackScreenProps; export function GroupInfoScreen(props: Props) { const { route } = props; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_integrated.md b/docs/uikit/chatuikit/react-native/chatuikit_integrated.md index 3d868ba3e..194339ddd 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_integrated.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_integrated.md @@ -99,7 +99,7 @@ twemoji@>=14.0.2 例如: -```typescriptx +```tsx function App(): React.JSX.Element { return ( @@ -113,7 +113,7 @@ function App(): React.JSX.Element { 通过 `Container` 组件提供的属性设置主题,示例代码如下: -```typescriptx +```tsx function App(): React.JSX.Element { const palette = usePresetPalette(); const light = useLightTheme(palette); @@ -129,7 +129,7 @@ function App(): React.JSX.Element { 通过 `Container` 组件提供的属性设置国际化,示例代码如下: -```typescriptx +```tsx function App(): React.JSX.Element { return ( @@ -145,7 +145,7 @@ function App(): React.JSX.Element { 例如: -```typescriptx +```tsx function App(): React.JSX.Element { return ( @@ -170,7 +170,7 @@ function App(): React.JSX.Element { 如果想要进行搜索,需要使用 `SearchConversation` 组件,例如: -```typescriptx +```tsx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; @@ -216,7 +216,7 @@ export function ConversationListScreen(props: Props) { 例如: -```typescriptx +```tsx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; type Props = NativeStackScreenProps; @@ -253,7 +253,7 @@ export function ContactListScreen(props: Props) { 例如: -```typescriptx +```tsx import type { NativeStackScreenProps } from "@react-navigation/native-stack"; import type { RootParamsName, RootScreenParamsList } from "../routes"; type Props = NativeStackScreenProps; diff --git a/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md b/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md index 071bacd02..f7fc8e124 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_internationalization.md @@ -6,7 +6,7 @@ 例如: -```typescriptx +```tsx export function App() { // 如果没有指定语言,则通过系统获取默认语言。 const [language] = React.useState("zh-Hans"); @@ -25,7 +25,7 @@ export function App() { 例如: -```typescriptx +```tsx // 创建法语语言包 export function createStringSetFr(): StringSet { return { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md b/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md index 78b98c926..141c24ced 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_quickstart.md @@ -103,7 +103,7 @@ npx react-native --version 0.73.2 init ProjectName 添加的主要代码包括登录、登出、发送消息。 -```typescriptx +```tsx import * as React from "react"; import { Pressable, SafeAreaView, Text, View } from "react-native"; import { diff --git a/docs/uikit/chatuikit/react-native/chatuikit_theme.md b/docs/uikit/chatuikit/react-native/chatuikit_theme.md index 52c94322d..4232d5e2d 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_theme.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_theme.md @@ -18,7 +18,7 @@ 使用默认主题,代码如下: -```typescriptx +```tsx export function App() { const palette = usePresetPalette(); const dark = useDarkTheme(palette); @@ -59,7 +59,7 @@ export function App() { 例如: -```typescriptx +```tsx export function App() { const { createPalette } = useCreatePalette({ colors: { @@ -85,7 +85,7 @@ export function App() { 除了颜色,你还可以修改字体、边框圆角等样式。 -```typescriptx +```tsx export function App() { // 通过调色板修改 const palette = usePresetPalette(); diff --git a/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md b/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md index 5754c27e3..f4132e57c 100644 --- a/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md +++ b/docs/uikit/chatuikit/react-native/chatuikit_userinfo.md @@ -18,7 +18,7 @@ 示例如下: -```typescriptx +```tsx export function App() { const onUsersHandler = React.useCallback( async (data: Map) => { @@ -102,7 +102,7 @@ export function App() { 示例如下: -```typescriptx +```tsx // 假设更新群组名称 export function SomeComponent() { const im = useChatContext(); From 717a989899b4fd8edf02407ebc8027bb80354ea6 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 23 Dec 2024 17:21:14 +0800 Subject: [PATCH 4/4] modify --- docs/document/ios/conversation_delete.md | 6 +- docs/document/ios/conversation_list.md | 4 +- docs/document/ios/conversation_mark.md | 12 +- docs/document/ios/conversation_overview.md | 2 +- docs/document/ios/conversation_pin.md | 4 +- docs/document/ios/conversation_receipt.md | 4 +- docs/document/ios/conversation_unread.md | 8 +- docs/document/ios/easecallkit.md | 30 ++--- docs/document/ios/group_attributes.md | 18 +-- docs/document/ios/group_manage.md | 26 ++-- docs/document/ios/group_members.md | 54 ++++---- docs/document/ios/log.md | 2 +- docs/document/ios/login.md | 4 +- docs/document/ios/message_delete.md | 2 +- .../ios/message_deliver_only_online.md | 2 +- docs/document/ios/message_import_insert.md | 4 +- docs/document/ios/message_modify.md | 2 +- docs/document/ios/message_recall.md | 6 +- docs/document/ios/message_receipt.md | 22 ++-- docs/document/ios/message_retrieve.md | 10 +- docs/document/ios/message_search.md | 2 +- docs/document/ios/message_send_receive.md | 46 +++---- docs/document/ios/message_traffic_statis.md | 6 +- docs/document/ios/message_translation.md | 10 +- docs/document/ios/message_update.md | 2 +- docs/document/ios/moderation.md | 2 +- docs/document/ios/multi_device.md | 18 +-- docs/document/ios/overview.md | 18 +-- docs/document/ios/presence.md | 14 +-- docs/document/ios/privatecloud.md | 6 +- docs/document/ios/push/push_apns.md | 4 +- docs/document/ios/push/push_display.md | 14 +-- docs/document/ios/push/push_extension.md | 12 +- .../ios/push/push_notification_mode_dnd.md | 12 +- docs/document/ios/push/push_parsing.md | 4 +- docs/document/ios/push/push_translation.md | 2 +- docs/document/ios/quickstart.md | 10 +- docs/document/ios/reaction.md | 8 +- docs/document/ios/room_attributes.md | 28 ++--- docs/document/ios/room_manage.md | 12 +- docs/document/ios/room_members.md | 40 +++--- docs/document/ios/thread.md | 26 ++-- docs/document/ios/thread_message.md | 10 +- docs/document/ios/user_relationship.md | 34 ++--- docs/document/ios/userprofile.md | 10 +- .../push/push_get_device_token.md | 10 +- docs/private/im/uc_iOS_private.md | 6 +- docs/push/push_apns_deliver_statistics.md | 4 +- docs/push/push_integration_note_ios.md | 18 +-- docs/push/push_integration_process_ios.md | 12 +- docs/uikit/chatuikit/ios/ui_historic.md | 118 +++++++++--------- 51 files changed, 370 insertions(+), 370 deletions(-) diff --git a/docs/document/ios/conversation_delete.md b/docs/document/ios/conversation_delete.md index b6b7ae13f..653569721 100644 --- a/docs/document/ios/conversation_delete.md +++ b/docs/document/ios/conversation_delete.md @@ -22,7 +22,7 @@ 你可以调用 `deleteServerConversation` 方法单向删除服务器端和本地会话,并选择是否删除服务端和本地的历史消息。会话和消息删除后,当前用户无法从服务器获取该会话和消息。该接口不影响其他用户的会话和消息。 -```objective-c +```objectivec // 删除指定会话,如果需要保留服务端和本地的历史消息,`isDeleteServerMessages` 参数传 `NO`,异步方法。 [[EMClient sharedClient].chatManager deleteServerConversation:@"conversationId1" conversationType:EMConversationTypeChat isDeleteServerMessages:YES completion:^(NSString *aConversationId, EMError *aError) { // 删除回调 @@ -33,7 +33,7 @@ 你可以删除本地会话和历史消息,示例代码如下: -```objective-c +```objectivec // 删除指定会话,如果需要保留历史消息,`isDeleteMessages` 参数传 `NO`,异步方法。 [[EMClient sharedClient].chatManager deleteConversation:conversationId isDeleteMessages:YES completion:nil]; // 删除一组会话。 @@ -41,7 +41,7 @@ NSArray *conversations = @{@"conversationID1",@"conversationID2"}; [[EMClient sharedClient].chatManager deleteConversations:conversations isDeleteMessages:YES completion:nil]; ``` -```objective-c +```objectivec // 删除当前会话中指定的一条历史消息。 EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:conversationId type:type createIfNotExist:YES]; [conversation deleteMessageWithId:.messageId error:nil]; diff --git a/docs/document/ios/conversation_list.md b/docs/document/ios/conversation_list.md index e55e04b0a..2103d704d 100644 --- a/docs/document/ios/conversation_list.md +++ b/docs/document/ios/conversation_list.md @@ -38,7 +38,7 @@ 示例代码如下: -```objective-c +```objectivec // pageSize: 每页返回的会话数。取值范围为 [1,50]。 // cursor:查询的开始位置。若传入 `nil` 或 `@""`,SDK 从最新活跃的会话开始获取。 NSString *cursor = @""; @@ -82,7 +82,7 @@ NSString *cursor = @""; 示例代码如下: -```objective-c +```objectivec NSArray *conversations = [EMClient.sharedClient.chatManager getAllConversations:YES]; ``` diff --git a/docs/document/ios/conversation_mark.md b/docs/document/ios/conversation_mark.md index ba789519a..0e885623f 100644 --- a/docs/document/ios/conversation_mark.md +++ b/docs/document/ios/conversation_mark.md @@ -8,7 +8,7 @@ 你需要自行维护会话标记与具体业务含义(比如 `EMMarkType0` 为重要会话)之间的映射关系。例如: -```objective-c +```objectivec NSDictionary* mapping = @{ @(EMMarkType0): @"important", @(EMMarkType1): @"normal", @@ -48,7 +48,7 @@ NSDictionary* mapping = @{ 对会话添加标记,例如会话标星,并不影响会话的其他逻辑,例如会话的未读消息数。 ::: -```objective-c +```objectivec [EMClient.sharedClient.chatManager addConversationMark:@[@"conversationId1"] mark:EMMarkType0 completion:^(EMError * _Nullable aError) { }]; @@ -60,7 +60,7 @@ NSDictionary* mapping = @{ 调用该方法会同时移除本地和服务器端会话的标记。 -```objective-c +```objectivec [EMClient.sharedClient.chatManager removeConversationMark:@[@"conversationId1"] mark:EMMarkType0 completion:^(EMError * _Nullable aError) { }]; @@ -71,7 +71,7 @@ NSDictionary* mapping = @{ 你可以调用 `getConversationsFromServerWithCursor` 方法根据会话标记从服务器分页获取会话列表。SDK 会按会话标记的时间的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)、会话标记以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。 -```objective-c +```objectivec //cursor:查询的开始位置。若传入空字符串,SDK 从最新标记操作的会话开始获取。 // filter:会话查询选项,包括会话标记和每页获取的会话条数(最多可获取 10 条)。 EMConversationFilter* filter = [[EMConversationFilter alloc] initWithMark:EMMarkType0 pageSize:10]; @@ -84,7 +84,7 @@ EMConversationFilter* filter = [[EMConversationFilter alloc] initWithMark:EMMark 对于本地会话,你可以调用 `getAllConversations` 方法获取本地所有会话后自己进行会话过滤。下面以查询标记了 `EMMarkType0` 的所有本地会话为例。 -```objective-c +```objectivec //最终的查询结果全部放入 result 中。 NSMutableArray* result = [NSMutableArray array]; NSArray* allConversations = [EMClient.sharedClient.chatManager getAllConversations]; @@ -99,7 +99,7 @@ for (EMConversation* conversation in allConversations) { 要获取本地单个会话的所有标记,你需要首先调用 `getConversationWithConvId` 方法获取本地单个会话,然后从会话的 `marks` 属性中查看该会话的所有标记,示例代码如下: -```objective-c +```objectivec EMConversation* conversation = [EMClient.sharedClient.chatManager getConversationWithConvId:@"conversationId"]; NSArray* marks = conversation.marks; ``` diff --git a/docs/document/ios/conversation_overview.md b/docs/document/ios/conversation_overview.md index 30040637a..cc4ddb0d1 100644 --- a/docs/document/ios/conversation_overview.md +++ b/docs/document/ios/conversation_overview.md @@ -48,7 +48,7 @@ 示例代码如下: -```objective-c +```objectivec // 收到会话已读的事件。该事件在以下场景中触发: // 1. 当消息接收方调用 `ackConversationRead()` 方法,SDK 会执行此回调, // 会将本地数据库中该会话中消息的 `isAcked` 属性置为 `true`。 diff --git a/docs/document/ios/conversation_pin.md b/docs/document/ios/conversation_pin.md index db9c757d4..e8833947d 100644 --- a/docs/document/ios/conversation_pin.md +++ b/docs/document/ios/conversation_pin.md @@ -31,7 +31,7 @@ 示例代码如下: -```objective-c +```objectivec [EMClient.sharedClient.chatManager pinConversation:self.conversation.conversationId isPinned:aSwitch.isOn completionBlock:^(EMError * _Nullable error) { }]; ``` @@ -46,7 +46,7 @@ 示例代码如下: -```objective-c +```objectivec // pageSize: 每页返回的会话数。取值范围为 [1,50]。 // cursor:查询的开始位置。若传入 `nil` 或 `@""`,SDK 从最新置顶的会话开始查询。 NSString *cursor = @""; diff --git a/docs/document/ios/conversation_receipt.md b/docs/document/ios/conversation_receipt.md index 6e7bbec17..94ef21479 100644 --- a/docs/document/ios/conversation_receipt.md +++ b/docs/document/ios/conversation_receipt.md @@ -35,7 +35,7 @@ 若会话中存在多条未读消息,建议调用该方法,因为若调用发送消息已读回执方法 `sendMessageReadAck`,则需要调用多次。 -```objective-c +```objectivec [[EMClient sharedClient].chatManager ackConversationRead:conversationId completion:nil]; ``` @@ -47,7 +47,7 @@ 对于群组聊天,会话已读回执只用于清空服务端的群组会话的未读数,消息发送方不会通过 `OnConversationRead` 回调收到会话已读回执。 ::: -```objective-c +```objectivec // 继承并实现监听器。 EMChatManagerDelegate diff --git a/docs/document/ios/conversation_unread.md b/docs/document/ios/conversation_unread.md index 47d2497cd..5e41b771f 100644 --- a/docs/document/ios/conversation_unread.md +++ b/docs/document/ios/conversation_unread.md @@ -27,7 +27,7 @@ 你可以调用 `getAllConversations` 方法获取每个本地会话的未读消息数量,即`EMConversation#unreadMessagesCount`,然后累加该数量,得到所有会话的未读消息数,示例代码如下: -```objective-c +```objectivec NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations]; NSInteger unreadCount = 0; for (EMConversation *conversation in conversations) { @@ -39,7 +39,7 @@ for (EMConversation *conversation in conversations) { 你可以调用 `unreadMessagesCount` 方法获取本地指定会话的未读消息数,示例代码如下: -```objective-c +```objectivec // 获取指定会话 ID 的会话。 EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:conversationId type:type createIfNotExist:YES]; // 获取未读消息数。 @@ -65,7 +65,7 @@ let err = EMClient.shared().chatManager?.markAllConversationsAsRead() 你可以调用 `markAllMessagesAsRead` 方法对指定会话的未读消息数清零,示例代码如下: -```objective-c +```objectivec EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:conversationId type:type createIfNotExist:YES]; [conversation markAllMessagesAsRead:nil]; ``` @@ -74,7 +74,7 @@ EMConversation *conversation = [[EMClient sharedClient].chatManager getConversat 你可以调用 `markMessageAsReadWithId` 方法将指定会话的单条未读消息置为已读。 -```objective-c +```objectivec EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:conversationId type:type createIfNotExist:YES]; [conversation markMessageAsReadWithId:messageId error:nil]; ``` diff --git a/docs/document/ios/easecallkit.md b/docs/document/ios/easecallkit.md index 1f4183c4c..91043c6a7 100644 --- a/docs/document/ios/easecallkit.md +++ b/docs/document/ios/easecallkit.md @@ -103,7 +103,7 @@ end 在环信 IM SDK 初始化完成后,同时初始化 `EaseCallKit`,初始化的同时开启回调监听,设置常用配置项。代码如下: -```objective-c +```objectivec EaseCallConfig* config = [[EaseCallConfig alloc] init]; EaseCallUser* usr = [[EaseCallUser alloc] init]; usr.nickName = @"自定义昵称"; @@ -115,7 +115,7 @@ config.agoraAppId=@"声网 AppID"; 可设置的配置项包括以下内容: -```objective-c +```objectivec @interface EaseCallConfig : NSObject // 默认头像。 @property (nonatomic) NSURL* defaultHeadImage; @@ -140,7 +140,7 @@ config.agoraAppId=@"声网 AppID"; 一对一通话分为语音通话与视频通话,发起过程如下: -```objective-c +```objectivec // 发起一对一通话。 // remoteUser 邀请对象的环信 ID。 // type 通话类型。`EaseCallType1v1Audio` 表示语音通话,`EaseCallType1v1Video` 表示视频通话。 @@ -154,7 +154,7 @@ config.agoraAppId=@"声网 AppID"; 你可以从群组成员列表或者好友列表中选择用户,发起多人音视频通话。具体实现可参考 Demo 中的 `ConfInviteUsersViewController`。 -```objective-c +```objectivec //邀请用户加入多人通话。 // aInviteUsers 受邀用户的环信 ID 数组。 // ext 可设置扩展信息,如果从群组发起,可通过 `ext` 设置群组 ID,其他用户也可邀请该群组成员。 @@ -175,7 +175,7 @@ config.agoraAppId=@"声网 AppID"; 被叫振铃的同时,会触发以下回调: -```objective-c +```objectivec - (void)callDidReceive:(EaseCallType)aType inviter:(NSString*_Nonnull)user ext:(NSDictionary*)aExt { @@ -186,7 +186,7 @@ config.agoraAppId=@"声网 AppID"; 多人通话中,当前用户可以点击通话界面右上角的邀请按钮再次向其他用户发起邀请。这种情况下,会触发 `EaseCallKitListener` 中的 `multiCallDidInvitingWithCurVC` 回调: -```objective-c +```objectivec // 多人音视频邀请按钮的回调。 // vc 当前视图控制器。 // users 通话中已存在的用户。 @@ -220,7 +220,7 @@ config.agoraAppId=@"声网 AppID"; 自 `EaseCallKit` 3.8.1 新增 `callDidJoinChannel` 方法,在用户加入通话后会收到回调: -```objective-c +```objectivec - (void)callDidJoinChannel:(NSString*_Nonnull)aChannelName uid:(NSUInteger)aUid { //此时,可以获取当前频道中已有用户的声网 ID 与环信 ID 的映射表,并将映射表设置到 `EaseCallKit`,同时也可以更新用户的头像和昵称。 @@ -234,7 +234,7 @@ config.agoraAppId=@"声网 AppID"; 自 `EaseCallKit` 3.8.1 新增 `remoteUserDidJoinChannel` 方法,在对方用户加入通话后会收到回调。 -```objective-c +```objectivec -(void)remoteUserDidJoinChannel:( NSString*_Nonnull)aChannelName uid:(NSInteger)aUid username:(NSString*_Nullable)aUserName { // 此时,可以获取当前频道中已有用户的声网 RTC UID 与环信 ID 的映射表,并将映射表设置到 `EaseCallKit`,同时也可以更新用户的头像和昵称。 @@ -247,7 +247,7 @@ config.agoraAppId=@"声网 AppID"; 在一对一音视频通话中,若其中一方挂断,双方的通话会自动结束,而多人音视频通话中需要主动挂断才能结束通话。通话结束后,会触发 `callDidEnd` 回调: -```objective-c +```objectivec // 通话结束回调。 // aChannelName 通话使用的声网频道名称,用户可以根据频道名称,到声网 Console 的水晶球查询通话质量。 // aTm 通话时长,单位为秒。 @@ -296,7 +296,7 @@ config.agoraAppId=@"声网 AppID"; 异常包括业务逻辑异常、音视频异常以及 Easemob IM 异常。 -```objective-c +```objectivec // 通话异常回调。 // aError 为异常信息,包括了 Easemob IM 异常,RTC 异常,业务异常三种情况。 - (void)callDidOccurError:(EaseCallError *)aError @@ -307,7 +307,7 @@ config.agoraAppId=@"声网 AppID"; `EaseCallError` 异常包括 IM 异常,RTC 异常以及业务逻辑异常。 -```objective-c +```objectivec @interface EaseCallError : NSObject // 异常类型,包括 Easemob IM 异常、RTC 异常和业务逻辑异常。 @property (nonatomic) EaseCallErrorType aErrorType; @@ -321,7 +321,7 @@ config.agoraAppId=@"声网 AppID"; `EaseCallKit` 库初始化之后,可调用该方法修改配置: -```objective-c +```objectivec // 以下为修改铃声过程。 EaseCallConfig* config = [[EaseCallManager sharedManager] getEaseCallConfig]; NSString* path = [[NSBundle mainBundle] pathForResource:@"huahai128" ofType:@"mp3"]; @@ -332,7 +332,7 @@ config.ringFileUrl = [NSURL fileURLWithPath:path]; 自 `EaseCallKit` 3.8.1 开始,新增了修改头像昵称的接口,用户加入频道后可修改自己和通话中其他人的头像昵称,修改方法如下: -```objective-c +```objectivec EaseCallUser* user = [EaseCallUser userWithNickName:info.nickName image:[NSURL URLWithString:info.avatarUrl]]; [[[EaseCallManager sharedManager] getEaseCallConfig] setUser:username info:user]; ``` @@ -343,7 +343,7 @@ EaseCallUser* user = [EaseCallUser userWithNickName:info.nickName image:[NSURL U 用户加入音视频通话时,如果需要进行声网 token 鉴权,需要先开启 token 验证开关,开启过程如下: -```objective-c +```objectivec EaseCallUser* callUser = [[EaseCallUser alloc] init]; config.enableRTCTokenValidate = YES;// 开启 RTC Token 验证,默认不开启。 [[EaseCallManager sharedManager] initWithConfig:config delegate:self]; @@ -351,7 +351,7 @@ config.enableRTCTokenValidate = YES;// 开启 RTC Token 验证,默认不开启 获取 token 的过程由用户自己完成,开启后在通话时,会收到 `callDidRequestRTCTokenForAppId`回调,用户需要在回调中,实现从用户自己的 App Server 中获取 token(App Server 的实现参见 [生成声网 Token](https://docportal.shengwang.cn/cn/video-call-4.x/token_server_ios_ng),然后调用 `setRTCToken:channelName:` 接口。 -```objective-c +```objectivec - (void)callDidRequestRTCTokenForAppId:(NSString * _Nonnull)aAppId channelName:(NSString * _Nonnull)aChannelName account:(NSString * _Nonnull)aUserAccount diff --git a/docs/document/ios/group_attributes.md b/docs/document/ios/group_attributes.md index 4891f7468..a9449baf5 100644 --- a/docs/document/ios/group_attributes.md +++ b/docs/document/ios/group_attributes.md @@ -29,7 +29,7 @@ 仅群主和群管理员可以调用 `changeGroupSubject` 方法设置和修改群组名称,其他群成员都会收到 `EMGroupManagerDelegate#groupSpecificationDidUpdate` 回调,群名称的长度限制为 128 个字符。 -```objective-c +```objectivec [[EMClient sharedClient].groupManager changeGroupSubject:@"subject"]; ``` @@ -37,7 +37,7 @@ 仅群主和群管理员可以调用 `changeDescription` 方法设置和修改群组描述,其他群成员都会收到 `EMGroupManagerDelegate#groupSpecificationDidUpdate` 回调,群描述的长度限制为 512 个字符。 -```objective-c +```objectivec [[EMClient sharedClient].groupManager changeDescription:@"desc" forGroup:@"groupID" error:nil]; @@ -49,7 +49,7 @@ 示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager updateGroupAnnouncementWithId:announcement:completion:] [[EMClient sharedClient].groupManager updateGroupAnnouncementWithId:@"groupID" announcement:@"announcement" @@ -62,7 +62,7 @@ 示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager getGroupAnnouncementWithId:completion:] [[EMClient sharedClient].groupManager getGroupAnnouncementWithId:@"groupID" error:nil]; ``` @@ -75,7 +75,7 @@ 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager uploadGroupSharedFileWithId:@"groupID" filePath:@"filePath" @@ -87,7 +87,7 @@ 所有群成员均可调用 `downloadGroupSharedFileWithId` 方法下载群组共享文件。 -```objective-c +```objectivec [EMClient.sharedClient.groupManager downloadGroupSharedFileWithId:@"groupId" filePath:@"filePath" sharedFileId:@"fileId" progress:nil completion:^(EMGroup * _Nullable aGroup, EMError * _Nullable aError) { }]; @@ -99,7 +99,7 @@ 群主和群管理员可删除全部的群共享文件,群成员只能删除自己上传的群文件。 -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager removeGroupSharedFileWithId:sharedFileId:completion:] [[EMClient sharedClient].groupManager removeGroupSharedFileWithId:@"groupID" sharedFileId:@"fileID" @@ -110,7 +110,7 @@ 所有群成员均可以调用 `getGroupFileListWithId` 方法获取群共享文件。 -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager getGroupFileListWithId:pageNumber:pageSize:completion:] [[EMClient sharedClient].groupManager getGroupFileListWithId:@"groupID" pageNumber:pageNumber @@ -124,7 +124,7 @@ 示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager updateGroupExtWithId:ext:completion:] [[EMClient sharedClient].groupManager updateGroupExtWithId:@"groupID" ext:@"ext" diff --git a/docs/document/ios/group_manage.md b/docs/document/ios/group_manage.md index 08a36120d..33f3dff9d 100644 --- a/docs/document/ios/group_manage.md +++ b/docs/document/ios/group_manage.md @@ -76,7 +76,7 @@ 示例代码如下: -```objective-c +```objectivec EMGroupOptions *options = [[EMGroupOptions alloc] init]; // 设置群组最大成员数量。 options.maxUsersCount = self.maxMemNum; @@ -106,7 +106,7 @@ NSArray *members = @{@"member1",@"member2"}; 示例代码如下: -```objective-c +```objectivec //群组解散后,群成员将会收到 `EMGroupManagerDelegate#didLeaveGroup` 回调。 // 同步方法,异步方法见 [EMGroupManager destroyGroup:finishCompletion:] [[EMClient sharedClient].groupManager destroyGroup:@"groupID"]; @@ -121,7 +121,7 @@ NSArray *members = @{@"member1",@"member2"}; 群成员也可以调用 `getGroupSpecificationFromServerWithId` 方法从服务器获取群组详情。返回的结果包括群组 ID、群组名称、群组描述、群组基本属性、群主、群组管理员列表、是否已屏蔽群组消息以及群组是否禁用。另外,若将该方法的 `fetchMembers` 参数设置为 `true`,可获取群成员列表,默认最多包括 200 个成员。 -```objective-c +```objectivec // 原型 异步方法 - (void)getGroupSpecificationFromServerWithId:(NSString *)aGroupId fetchMembers:(BOOL)fetchMembers @@ -146,7 +146,7 @@ NSArray *admins = aGroup.adminList; - 当群成员少于 200 人时,你可以调用从服务器获取群组详情的方法 `getGroupSpecificationFromServerWithId` 获取获取群成员列表,包括群主、群管理员和普通群成员: -```objective-c +```objectivec // 第二个参数传入 TRUE,默认取 200 人的群成员列表。 // 同步方法,异步方法见 [EMGroupManager getGroupSpecificationFromServerWithId:fetchMembers:completion:] EMGroup *group = [[EMClient sharedClient].groupManager @@ -158,7 +158,7 @@ NSArray *memberList = group.memberList; - 当群成员数量大于等于 200 时,你可以首先调用 `getGroupSpecificationFromServerWithId` 方法获取群主和群管理员,然后调用 `getGroupMemberListFromServerWithId` 方法获取普通群成员列表: -```objective-c +```objectivec EMGroup *group = [[EMClient sharedClient].groupManager getGroupSpecificationFromServerWithId:@"groupID" fetchMembers:NO @@ -183,7 +183,7 @@ do { 用户可以调用 `getJoinedGroupsFromServer` 方法从服务器获取自己加入和创建的群组列表。示例代码如下: -```objective-c +```objectivec // 异步方法 NSArray *groupList = [[EMClient sharedClient].groupManager getJoinedGroupsFromServerWithPage:0 pageSize:20 needMemberCount:YES needRole:YES completion:^(NSArray * _Nullable aList, EMError * _Nullable aError) { // got group list @@ -192,14 +192,14 @@ NSArray *groupList = [[EMClient sharedClient].groupManager getJoinedGroupsFromSe - 用户可以调用 `getJoinedGroups` 方法加载本地群组列表。为了保证数据的正确性,需要先从服务器获取自己加入和创建的群组列表。示例代码如下: -```objective-c +```objectivec // 同步方法,本地缓存加载 NSArray *groupList = [[EMClient sharedClient].groupManager getJoinedGroups]; ``` - 用户还可以调用 `getPublicGroupsFromServerWithCursor` 方法分页获取公开群列表: -```objective-c +```objectivec NSMutableArray *memberList = [[NSMutableArray alloc]init]; NSInteger pageSize = 50; NSString *cursor = nil; @@ -219,7 +219,7 @@ do { 自 4.2.0 版本开始,你可以调用 `EMGroupManager#getJoinedGroupsCountFromServerWithCompletion` 方法用于从服务器获取当前用户已加入的群组数量。单个用户可加入群组数量的上限取决于你订阅的即时通讯的套餐包,详见[产品价格](/product/pricing.html#套餐包功能详情)。 -```objective-c +```objectivec [EMClient.sharedClient.groupManager getJoinedGroupsCountFromServerWithCompletion:^(NSInteger groupCount, EMError * _Nullable aError) { }]; @@ -231,7 +231,7 @@ do { 群成员可以调用 `blockGroup` 方法屏蔽群消息。屏蔽群消息后,该成员不再从指定群组接收群消息,群主和群管理员不能进行此操作。示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager blockGroup:completion:] [[EMClient sharedClient].groupManager blockGroup:@"groupID" error:nil]; ``` @@ -240,7 +240,7 @@ do { 群成员可以调用 `unblockGroup` 方法解除屏蔽群消息。示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager unblockGroup:completion:] [[EMClient sharedClient].groupManager unblockGroup:@"groupID" error:nil]; ``` @@ -255,7 +255,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 添加代理。 - (void)viewDidLoad { @@ -271,7 +271,7 @@ do { 群组事件如下(在该方法的举例中,用户 A 表示当前用户): -```objective-c +```objectivec // 当前用户收到了入群邀请。受邀用户会收到该回调。例如,用户 B 邀请用户 A 入群,则用户 A 会收到该回调。 - (void)groupInvitationDidReceive:(NSString *)aGroupId inviter:(NSString *)aInviter message:(NSString *)aMessage { diff --git a/docs/document/ios/group_members.md b/docs/document/ios/group_members.md index 8b619f82e..3e775ec5d 100644 --- a/docs/document/ios/group_members.md +++ b/docs/document/ios/group_members.md @@ -52,7 +52,7 @@ 1. 调用 `getPublicGroupsFromServerWithCursor` 方法从服务器获取公开群列表,查询到想要加入的群组 ID。示例代码如下: -```objective-c +```objectivec NSMutableArray *memberList = [[NSMutableArray alloc]init]; NSInteger pageSize = 50; NSString *cursor = nil; @@ -73,7 +73,7 @@ do { - 如果公开群无需群主或管理员审批,即 `EMGroupStyle` 为 `EMGroupStylePublicOpenJoin`,申请人会直接加入群组,其他群成员会收到 `EMGroupManagerDelegate#userDidJoinGroup` 回调。 - 如果公开群需要群主或管理员审批,即 `EMGroupStyle` 为 `EMGroupStylePublicJoinNeedApproval`,申请人不会直接加入群组,群主和群管理员收到 `EMGroupManagerDelegate#joinGroupRequestDidReceive` 回调。待群主或管理员同意入群申请后,申请人会收到joinGroupRequestDidApprove的回调。示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager requestToJoinPublicGroup:@"groupId" message:nil completion:^(EMGroup *aGroup1, EMError *aError) { if (aError == nil) { @@ -93,7 +93,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager approveJoinGroupRequest:@"groupId" sender:@"userId" completion:^(EMGroup *aGroup, EMError *aError) { @@ -104,7 +104,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager declineJoinGroupRequest:@"groupId" sender:@"userId" reason:@"reason" completion:^(EMGroup *aGroup, EMError *aError) { @@ -121,7 +121,7 @@ do { - 群主或群管理员可以邀请人入群,对于私有群 `EMGroupStyle` 设置为 `EMGroupStylePrivateMemberCanInvite` 时,普通群成员也可以邀请人进群。邀请人入群需要调用 `addMembers` 方法: - ```objective-c + ```objectivec // 异步方法 [[EMClient sharedClient].groupManager addMembers:@{@"member1",@"member2"} toGroup:@"groupID" @@ -133,14 +133,14 @@ do { - 受邀用户同意加入群组,需要调用 `acceptInvitationFromGroup` 方法。 - ```objective-c + ```objectivec [[EMClient sharedClient].groupManager acceptInvitationFromGroup:@"groupId" inviter:@"userId" completion:^(EMGroup *aGroup, EMError *aError) { }]; ``` - 受邀人拒绝入群组,需要调用 `declineGroupInvitation` 方法。 - ```objective-c + ```objectivec [[EMClient sharedClient].groupManager declineGroupInvitation:@"groupId" inviter:@"inviter" reason:@"reason" completion:^(EMError *aError) { }]; @@ -156,7 +156,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见 [EMGroupManager leaveGroup:completion:] [[EMClient sharedClient].groupManager leaveGroup:@"groupID" error:nil]; ``` @@ -167,7 +167,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.groupManager removeMembers:@[@"member1",@"member2"] fromGroup:@"groupId" completion:^(EMGroup * _Nullable aGroup, EMError * _Nullable aError) { @@ -190,7 +190,7 @@ do { 示例代码如下: -```objective-c +```objectivec [EMClient.sharedClient.groupManager setMemberAttribute:groupId userId:userName attributes:@{key:value} completion:^(EMError * _Nullable error) { if (error == nil) { [self updateCacheWithGroupId:groupId userName:userName key:key value:value]; @@ -207,7 +207,7 @@ do { 示例代码如下: -```objective-c +```objectivec [EMClient.sharedClient.groupManager fetchMemberAttribute:aGroupId userId:EMClient.sharedClient.currentUsername completion:^(NSDictionary * _Nullable attributes, EMError * _Nullable error) { if (error == nil) { //refresh UI according to attributes or cache. @@ -225,7 +225,7 @@ do { 示例代码如下: -```objective-c +```objectivec // keys:要获取自定义属性的 key 的数组。若 keys 为空数组或不传则获取这些成员的所有自定义属性。 [EMClient.sharedClient.groupManager fetchMembersAttributes:groupId userIds:@[userId] keys:@[@"1",@"2"] completion:^(NSDictionary *> * _Nullable attributes, EMError * _Nullable error) { //根据获取的自定义属性或缓存刷新 UI。 @@ -240,7 +240,7 @@ do { 示例如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager updateGroupOwner:@"groupID" newOwner:@"newOwner" @@ -255,7 +255,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager addAdmin:@"member" toGroup:@"groupID" @@ -270,7 +270,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager removeAdmin:@"admin" fromGroup:@"groupID" @@ -287,7 +287,7 @@ do { 即使开启了群组全员禁言,群组白名单中的成员仍可以发送群组消息。不过,禁言列表上的用户即使加入了群白名单仍无法在群组中发送消息。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager addWhiteListMembers:members fromGroup:@"groupID" @@ -300,7 +300,7 @@ do { 群成员被群主或者群管理员移除群白名单后,该群成员及其他未操作的群管理员和群主将会收到群组事件回调 `EMGroupManagerDelegate#groupWhiteListDidUpdate`。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager removeWhiteListMembers:members fromGroup:@"groupID" @@ -311,7 +311,7 @@ do { 所有群成员可以调用 `isMemberInWhiteListFromServerWithGroupId` 方法检查自己是否在群白名单中,示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager isMemberInWhiteListFromServerWithGroupId:@"groupID" @@ -322,7 +322,7 @@ do { 仅群主和群管理员可以调用 `getGroupWhiteListFromServerWithId` 方法从服务器获取当前群组的白名单。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager getGroupWhiteListFromServerWithId:@"groupID" completion:nil]; ``` @@ -337,7 +337,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager blockMembers:members fromGroup:@"groupID" @@ -350,7 +350,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager unblockMembers:members fromGroup:@"groupID" @@ -363,7 +363,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager getGroupBlacklistFromServerWithId:@"groupId" pageNumber:pageNumber @@ -385,7 +385,7 @@ do { 群成员被移出禁言列表后可以在群组中正常发送消息,被禁言成员和其他未操作的管理员或者群主将会收到群组事件回调 `EMGroupManagerDelegate#groupMuteListDidUpdate`。 -```objective-c +```objectivec // 异步方法 // `muteMilliseconds`:禁言时间。传 -1 表示永久禁言。 [[EMClient sharedClient].groupManager muteMembers:members @@ -400,7 +400,7 @@ do { 群成员被群主或者群管理员移出禁言列表后,被移出的群成员及其他未操作的管理员或者群主将会收到群组事件回调 `EMGroupManagerDelegate#groupMuteListDidUpdate`。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager unmuteMembers:members fromGroup:@"groupID" @@ -413,7 +413,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager getGroupMuteListFromServerWithId:@"groupID" pageNumber:pageNumber @@ -431,7 +431,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager muteAllMembersFromGroup:@"groupID" completion:nil]; ``` @@ -442,7 +442,7 @@ do { 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].groupManager unmuteAllMembersFromGroup:@"groupID" completion:nil]; ``` diff --git a/docs/document/ios/log.md b/docs/document/ios/log.md index 0492bd979..4db03b4a4 100644 --- a/docs/document/ios/log.md +++ b/docs/document/ios/log.md @@ -16,7 +16,7 @@ SDK 的 `EMOptions#logLevel` 指定了日志输出级别,默认为 `EMLogLevel 开发阶段若希望在 XCode console 上输出 SDK 日志,可在 SDK 初始化时打开开关。 -```objective-c +```objectivec EMOptions* option = [EMOptions optionsWithAppkey:@"<#appkey#>"]; // 日志输出到 XCode console option.enableConsoleLog = YES; diff --git a/docs/document/ios/login.md b/docs/document/ios/login.md index 20dc2263f..b40d31855 100644 --- a/docs/document/ios/login.md +++ b/docs/document/ios/login.md @@ -10,7 +10,7 @@ 示例代码如下所示: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient] registerWithUsername:@"username" password:@"your password" @@ -40,7 +40,7 @@ EMClient.shared().login(withUsername: "userId", token: "token") { userId, err in 2. **用户 ID + 密码** 是传统的登录方式。用户名和密码均由你的终端用户自行决定,密码需要符合密码规则要求。 -```objective-c +```objectivec //SDK 初始化 `EMOptions` 时可以传入 `loginExtensionInfo` 属性投递给被踢下线的设备。该属性需要开启多设备登录的情况下才能生效。 EMOptions *options = [EMOptions optionsWithAppkey:<#AppKey#>]; options.loginExtensionInfo = @"you was kicked out by other device"; diff --git a/docs/document/ios/message_delete.md b/docs/document/ios/message_delete.md index af307842e..929c7cc97 100644 --- a/docs/document/ios/message_delete.md +++ b/docs/document/ios/message_delete.md @@ -54,7 +54,7 @@ 示例代码如下: -```objective-c +```objectivec // 按时间删除消息 [self.conversation removeMessagesFromServerWithTimeStamp:message.timestamp completion:^(EMError * _Nullable aError) { diff --git a/docs/document/ios/message_deliver_only_online.md b/docs/document/ios/message_deliver_only_online.md index 06d764f9f..3c6e6b956 100644 --- a/docs/document/ios/message_deliver_only_online.md +++ b/docs/document/ios/message_deliver_only_online.md @@ -27,7 +27,7 @@ 下面以发送文本消息为例进行说明: -```objective-c +```objectivec // 调用 initWithText 创建文本消息。`content` 为文本消息的内容。 EMTextMessageBody *textMessageBody = [[EMTextMessageBody alloc] initWithText:content]; // 消息接收方:单聊为对端用户的 ID,群聊为群组 ID。 diff --git a/docs/document/ios/message_import_insert.md b/docs/document/ios/message_import_insert.md index 9367c6e4b..a45c9b858 100644 --- a/docs/document/ios/message_import_insert.md +++ b/docs/document/ios/message_import_insert.md @@ -28,7 +28,7 @@ 推荐一次导入 1,000 条以内的数据。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].chatManager importMessages:messages completion:nil]; ``` @@ -41,7 +41,7 @@ 消息会根据消息中的 Unix 时间戳插入本地数据库,SDK 会更新会话的 `latestMessage` 等属性。 -```objective-c +```objectivec EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:conversationId type:type createIfNotExist:YES]; [conversation insertMessage:message error:nil]; ``` diff --git a/docs/document/ios/message_modify.md b/docs/document/ios/message_modify.md index 7afaecf14..5edbebab8 100644 --- a/docs/document/ios/message_modify.md +++ b/docs/document/ios/message_modify.md @@ -35,7 +35,7 @@ 示例代码如下: -```objective-c +```objectivec [EMClient.sharedClient.chatManager modifyMessage:model.message.messageId body:body completion:^(EMError * _Nullable error, EMChatMessage * _Nullable message) { if (!error) { //refresh UI diff --git a/docs/document/ios/message_recall.md b/docs/document/ios/message_recall.md index ae78839f1..ec7f87882 100644 --- a/docs/document/ios/message_recall.md +++ b/docs/document/ios/message_recall.md @@ -31,7 +31,7 @@ 调用该方法后,服务端的该条消息(历史消息,离线消息或漫游消息)以及消息发送方和接收方的内存和数据库中的消息均会被移除,消息的接收方会收到 `messagesInfoDidRecall` 事件。对于附件类型消息,包括图片、音频和视频和文件消息,撤回消息后,消息附件也相应删除。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].chatManager recallMessageWithMessageId:messageId ext:@"extension info" completion:^(EMError *aError) { if (!aError) { @@ -44,7 +44,7 @@ - 对于 SDK 4.6.0 之前的版本,你可以调用 `recallMessageWithMessageId` 方法撤回一条发送成功的消息。该方法不支持通过 `ext` 字段传入自定义信息。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].chatManager recallMessageWithMessageId:messageId completion:^(EMError *aError) { if (!aError) { @@ -62,7 +62,7 @@ - 若用户在线接收了消息,消息撤回时,该事件中的 `EMRecallMessageInfo` 中的 `recallMessage` 为撤回的消息。 - 若消息发送和撤回时接收方离线,该事件中的 `EMRecallMessageInfo` 中的 `recallMessage` 为空。 -```objective-c +```objectivec - (void)messagesInfoDidRecall:(NSArray * _Nonnull)aRecallMessagesInfo; { } diff --git a/docs/document/ios/message_receipt.md b/docs/document/ios/message_receipt.md index e98f13915..cc52278ea 100644 --- a/docs/document/ios/message_receipt.md +++ b/docs/document/ios/message_receipt.md @@ -48,7 +48,7 @@ 当接收方收到消息后,SDK 底层会自动进行消息送达回执。 -```objective-c +```objectivec // 设置是否需要接收方送达确认,默认为 `NO` 即不需要。 options.enableDeliveryAck = YES; ``` @@ -57,7 +57,7 @@ options.enableDeliveryAck = YES; 3. 发送方监听 `EMChatManagerDelegate#messagesDidDeliver` 事件,收到接收方的送达回执。你可以在收到该通知时,显示消息的送达状态。 -```objective-c +```objectivec // 继承并实现监听器。 EMChatManagerDelegate @@ -88,7 +88,7 @@ EMChatManagerDelegate 该功能开启后,接收方阅读消息后,SDK 底层会自动进行消息已读回执。 -```objective-c +```objectivec options.enableRequireReadAck = YES; ``` @@ -98,13 +98,13 @@ options.enableRequireReadAck = YES; 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 -```objective-c +```objectivec [[EMClient sharedClient].chatManager ackConversationRead:conversationId completion:nil]; ``` - 接收方在聊天页面打开时,接收到消息时,再根据消息类型发送单个消息已读回执。 -```objective-c +```objectivec // 接收消息回调。 - (void)messagesDidReceive:(NSArray *)aMessages { @@ -134,7 +134,7 @@ options.enableRequireReadAck = YES; 消息发送方可以通过 `EMChatManagerDelegate#messagesDidRead` 事件监听指定消息是否已读,示例代码如下: -```objective-c +```objectivec // 继承并实现监听器。 EMChatManagerDelegate @@ -172,20 +172,20 @@ EMChatManagerDelegate 该功能开启后,接收方阅读消息后,SDK 底层会自动进行消息已读回执。 -```objective-c +```objectivec options.enableRequireReadAck = YES; ``` 2. 发送方发送消息时设置 `EMChatMessage#isNeedGroupAck` 属性为 `YES`。 -```objective-c +```objectivec EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to from:from to:to body:aBody ext:aExt]; message.isNeedGroupAck = YES; ``` 3. 消息接收方发送群组消息的已读回执。 -```objective-c +```objectivec - (void)sendGroupMessageReadAck:(EMChatMessage *)msg { if (msg.isNeedGroupAck && !msg.isReadAcked) { @@ -204,7 +204,7 @@ message.isNeedGroupAck = YES; 发送方接收到群组消息已读回执后,其发出消息的属性 `groupAckCount` 会有相应变化。 -```objective-c +```objectivec // 继承并实现监听器。 EMChatManagerDelegate @@ -227,7 +227,7 @@ EMChatManagerDelegate 你可以调用 `IEMChatManager#asyncFetchGroupMessageAcksFromServer` 方法从服务器获取单条消息的已读回执的详情。 -```objective-c +```objectivec // 异步方法。 // aMessageId 要获取的消息 ID。 // aGroupId 要获取回执对应的群 ID。 diff --git a/docs/document/ios/message_retrieve.md b/docs/document/ios/message_retrieve.md index 05fe2f449..097e36cfa 100644 --- a/docs/document/ios/message_retrieve.md +++ b/docs/document/ios/message_retrieve.md @@ -65,7 +65,7 @@ let option = EMFetchServerMessagesOption(); 此外,你也可以调用 `asyncFetchHistoryMessagesFromServer` 方法从服务器获取指定会话的消息。你可以指定消息查询方向,即明确按时间顺序或逆序获取。为确保数据可靠,我们建议你每次最多获取 50 条消息,可多次获取。拉取后,SDK 会自动将消息更新到本地数据库。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].chatManager asyncFetchHistoryMessagesFromServer:conversation.conversationId conversationType:conversation.type startMessageId:self.moreMsgId pageSize:10 completion:^(EMCursorResult *aResult, EMError *aError) { [self.conversation loadMessagesStartFromId:self.moreMsgId count:10 searchDirection:EMMessageSearchDirectionUp completion:block]; @@ -76,7 +76,7 @@ let option = EMFetchServerMessagesOption(); 你可以调用以下方法从数据库中读取指定会话的消息: -```objective-c +```objectivec // 获取指定会话 ID 的会话。 EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:conversationId type:type createIfNotExist:YES]; //startMsgId:查询的起始消息 ID; count:每次获取的消息条数。如果设为小于等于 0,SDK 获取 1 条消息。 @@ -88,7 +88,7 @@ NSArray *messages = [conversation loadMessagesStartFromId:start 你可以调用 `getMessageWithMessageId` 方法根据消息 ID 获取本地存储的指定消息。如果消息不存在会返回空值。 -```objective-c +```objectivec // 同步方法 EMConversation* conv = [EMClient.sharedClient.chatManager getConversationWithConvId:@"conversationId"]; EMError* err = nil; @@ -100,7 +100,7 @@ EMChatMessage* message = [EMClient.sharedClient.chatManager getMessageWithMessag 你可以调用 `loadMessagesWithType` 方法从本地存储中获取指定会话中特定类型的消息。每次最多可获取 400 条消息。若未获取到任何消息,SDK 返回空列表。 -```objective-c +```objectivec // 异步方法 EMConversation* conv = [EMClient.sharedClient.chatManager getConversationWithConvId:@"conversationId"]; // timestamp:消息搜索的起始时间戳,单位为毫秒。该参数设置后,SDK 从指定的时间戳的消息开始,按照搜索方向对消息进行搜索。若设置为负数,SDK 从当前时间开始,按消息时间戳的逆序搜索。 @@ -117,7 +117,7 @@ EMConversation* conv = [EMClient.sharedClient.chatManager getConversationWithCon 每次最多可获取 400 条消息。 -```objective-c +```objectivec // 异步方法 EMConversation* conv = [EMClient.sharedClient.chatManager getConversationWithConvId:@"conversationId"]; // startTime:查询的起始时间戳,单位为毫秒;endTime:查询的结束时间戳,单位为毫秒;count:每次获取的消息数量。取值范围为 [1,400]。 diff --git a/docs/document/ios/message_search.md b/docs/document/ios/message_search.md index afaef1f33..809e6d665 100644 --- a/docs/document/ios/message_search.md +++ b/docs/document/ios/message_search.md @@ -27,7 +27,7 @@ 你可以调用 `loadMessagesWithKeyword` 方法根据关键字搜索本地数据库中单个会话中指定用户发送的消息,示例代码如下: -```objective-c +```objectivec // 同步方法,异步方法见[EMConversation loadMessagesWithKeyword:timestamp:count:fromUser:searchDirection:completion] EMConversation* conversation = [EMClient.sharedClient.chatManager getConversationWithConvId:@"conversationId"]; NSArray *messages = [conversation loadMessagesWithKeyword:@"keyword" timestamp:0 count:50 fromUser:nil searchDirection:EMMessageSearchDirectionDown]; diff --git a/docs/document/ios/message_send_receive.md b/docs/document/ios/message_send_receive.md index 3bb54e8d6..044d904f0 100644 --- a/docs/document/ios/message_send_receive.md +++ b/docs/document/ios/message_send_receive.md @@ -23,7 +23,7 @@ 默认情况下,SDK 对单个用户发送消息的频率未做限制。如果你联系了环信商务设置了该限制,一旦在单聊、群聊或聊天室中单个用户的消息发送频率超过设定的上限,SDK 会上报错误,即错误码 509 `EMErrorMessageCurrentLimiting`。示例代码如下: -```objective-c +```objectivec // 调用 initWithText 创建文本消息。`content` 为文本消息的内容。 EMTextMessageBody *textMessageBody = [[EMTextMessageBody alloc] initWithText:content]; // 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。 @@ -46,7 +46,7 @@ message.chatType = EMChatTypeChatRoom; 对于聊天室消息,你可以通过消息的 `EMChatMessage#broadcast` 属性判断该消息是否为[通过 REST API 发送的聊天室全局广播消息](/document/server-side/message_chatroom.html#发送聊天室全局广播消息)。 -```objective-c +```objectivec // 添加代理。 [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil]; @@ -86,7 +86,7 @@ message.chatType = EMChatTypeChatRoom; 2. 发送方调用 `initWithLocalPath` 和 `initWithConversationID` 方法传入语音文件的 URI、语音时长和接收方的用户 ID(群聊或聊天室分别为群组 ID 或聊天室 ID)创建语音消息,然后调用 `sendMessage` 方法发送消息。SDK 会将文件上传至环信服务器。 -```objective-c +```objectivec // `localPath` 为语音文件本地资源路径,`displayName` 为附件的显示名称。 EMVoiceMessageBody *body = [[EMVoiceMessageBody alloc] initWithLocalPath:localPath displayName:displayName]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; @@ -100,7 +100,7 @@ message.chatType = EMChatTypeGroupChat; 4. 接收方收到 [messagesDidReceive 回调](#发送和接收文本消息),调用 `remotePath` 或 `localPath` 方法获取语音文件的服务器地址或本地路径,从而获取语音文件。 -```objective-c +```objectivec EMVoiceMessageBody *voiceBody = (EMVoiceMessageBody *)message.body; // 获取语音文件在服务器的地址。 NSString *voiceRemotePath = voiceBody.remotePath; @@ -114,7 +114,7 @@ NSString *voiceLocalPath = voiceBody.localPath; 1. 发送方调用 `initWithData` 和 `initWithConversationID` 方法传入图片的本地资源标志符 URI、设置是否发送原图以及接收方的用户 ID(群聊或聊天室分别为群组 ID 或聊天室 ID)创建图片消息,然后调用 `sendMessage` 方法发送该消息。SDK 会将图片上传至环信服务器,服务器自动生成图片缩略图。 -```objective-c +```objectivec // `imageData` 为图片本地资源,`displayName` 为附件的显示名称。 EMImageMessageBody *body = [[EMImageMessageBody alloc] initWithData:imageData displayName:displayName]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; @@ -125,7 +125,7 @@ message.chatType = EMChatTypeGroupChat; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil]; ``` -```objective-c +```objectivec // 发送成功后,获取图片消息缩略图及附件。 EMImageMessageBody *body = (EMImageMessageBody *)message.body; // 从服务器端获取图片文件。 @@ -147,7 +147,7 @@ NSString *thumbnailLocalPath = body.thumbnailLocalPath; 下载完成后,在回调里调用相应消息 `body` 的 `thumbnailLocalPath` 获取缩略图路径。 -```objective-c +```objectivec EMImageMessageBody *imageBody = (EMImageMessageBody *)message.body; // 图片文件的本地缩略图资源路径。 NSString *thumbnailLocalPath = imageBody.thumbnailLocalPath; @@ -155,7 +155,7 @@ NSString *thumbnailLocalPath = imageBody.thumbnailLocalPath; 4. 获取图片消息的附件。 -```objective-c +```objectivec [[EMClient sharedClient].chatManager downloadMessageAttachment:message progress:nil completion:^(EMChatMessage *message, EMError *error) { if (!error) { EMImageMessageBody *imageBody = (EMImageMessageBody *)message.body; @@ -172,7 +172,7 @@ NSString *thumbnailLocalPath = imageBody.thumbnailLocalPath; 2. 发送方调用 `initWithLocalPath` 方法传入视频文件的本地资源标志符、消息的显示名称和视频时长,构建视频消息体。然后,调用 `initWithConversationID` 方法传入会话 ID 和视频消息体,构建视频消息。最后,调用 `sendMessage` 方法发送消息。SDK 会将视频文件上传至环信消息服务器,自动将视频的首帧作为视频缩略图。 -```objective-c +```objectivec // `localPath` 为本地资源路径,`displayName` 为视频的显示名称。 EMVideoMessageBody *body = [[EMVideoMessageBody alloc] initWithLocalPath:localPath displayName:@"displayName"]; body.duration = duration;// 视频时长。 @@ -190,7 +190,7 @@ message.chatType = EMChatTypeGroupChat; 5. 获取视频缩略图和视频原文件。 -```objective-c +```objectivec // 发送成功后,获取视频消息缩略图及附件。 EMVideoMessageBody *body = (EMVideoMessageBody *)message.body; // 从服务器端获取视频文件的地址。 @@ -209,7 +209,7 @@ NSString *thumbnailLocalPath = body.thumbnailLocalPath; 1. 发送方调用 `initWithData` 和 `initWithConversationID` 方法传入文件的本地资源标志符和接收方的用户 ID(群聊或聊天室分别为群组 ID 或聊天室 ID)创建文件消息,然后调用 `sendMessage` 方法发送文件消息。SDK 将文件上传至环信服务器。 -```objective-c +```objectivec // `fileData` 为本地资源,`fileName` 为附件的显示名称。 EMFileMessageBody *body = [[EMFileMessageBody alloc] initWithData:fileData displayName:fileName]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; @@ -221,7 +221,7 @@ message.chatType = EMChatTypeGroupChat; 2. 接收方收到 [messagesDidReceive 回调](#发送和接收文本消息),调用 `downloadMessageAttachment` 方法下载文件。 -```objective-c +```objectivec [[EMClient sharedClient].chatManager downloadMessageAttachment:message progress:nil completion:^(EMChatMessage *message, EMError *error) { if (!error) { // 附件下载成功 @@ -231,7 +231,7 @@ message.chatType = EMChatTypeGroupChat; 3. 调用以下方法从服务器或本地获取文件附件: -```objective-c +```objectivec EMFileMessageBody *body = (EMFileMessageBody *)message.body; // 从服务器端获取文件路径。 NSString *remotePath = body.remotePath; @@ -245,7 +245,7 @@ NSString *localPath = body.localPath; 发送位置时,需要集成第三方的地图服务,获取到位置点的经纬度信息。 -```objective-c +```objectivec // `latitude` 为纬度,`longitude` 为经度,`address` 为具体位置内容。 EMLocationMessageBody *body = [[EMLocationMessageBody alloc] initWithLatitude:latitude longitude:longitude address:aAddress]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; @@ -275,7 +275,7 @@ message.chatType = EMChatTypeGroupChat; 1. 创建和发送透传消息。 -```objective-c +```objectivec // `action` 自定义 `NSString` 类型的命令内容。 EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; @@ -290,7 +290,7 @@ EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action]; 2. 接收方通过 `cmdMessagesDidReceive` 回调接收透传消息,方便用户进行不同的处理。 -```objective-c +```objectivec // 收到透传消息。 - (void)cmdMessagesDidReceive:(NSArray *)aCmdMessages{ for (EMChatMessage *message in aCmdMessages) { @@ -306,7 +306,7 @@ EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action]; 1. 创建和发送自定义类型消息。 -```objective-c +```objectivec // event 为需要传递的自定义消息事件,比如名片消息,可以设置 "userCard";`ext` 为事件扩展字段,比如可以设置 `uid`,`nickname`,`avatar`。 EMCustomMessageBody* body = [[EMCustomMessageBody alloc] initWithEvent:@"userCard" ext:@{@"uid":aUid ,@"nickname":aNickName,@"avatar":aUrl}]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; @@ -353,7 +353,7 @@ message.chatType = EMChatTypeGroupChat; 示例代码如下: -```objective-c +```objectivec EMCombineMessageBody* combineMsgBody = [[EMCombineMessageBody alloc] initWithTitle:@"combineTitle" summary:@"combineSummary" compatibleText:@"combineCompatibleText" messageIdList:@[@"messageId1",@"messageId2"]]; EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"conversationId" body:combineMsgBody ext:nil]; [EMClient.sharedClient.chatManager sendMessage:msg progress:nil completion:^(EMChatMessage * _Nullable message, EMError * _Nullable error) { @@ -374,7 +374,7 @@ EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"conversatio - 若附件已存在,该方法会直接解析附件并返回原始消息列表。 - 若附件不存在,该方法首先下载附件,然后解析附件并返回原始消息列表。 -```objective-c +```objectivec - (void)messagesDidReceive:(NSArray *)aMessages { @@ -410,7 +410,7 @@ EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"conversatio 下面以文本消息为例介绍如何发送定向消息,示例代码如下: -```objective-c +```objectivec // 创建一条文本消息。 EMTextMessageBody* textBody = [[EMTextMessageBody alloc] initWithText:@"hello"]; EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"groupId" body:textBody ext:nil]; @@ -432,7 +432,7 @@ msg.receiverList = @[@"A",@"B"]; 当目前消息类型不满足用户需求时,可以在扩展部分保存更多信息,例如消息中需要携带被回复的消息内容或者是图文消息等场景。 -```objective-c +```objectivec EMTextMessageBody *textMessageBody = [[EMTextMessageBody alloc] initWithText:content]; // 增加自定义属性。 NSDictionary *messageExt = @{@"attribute":@"value"}; @@ -459,7 +459,7 @@ message.chatType = EMChatTypeChat; 对于聊天室消息,可设置消息优先级。示例代码如下: -```objective-c +```objectivec EMTextMessageBody* textBody = [[EMTextMessageBody alloc] initWithText:@"Hi"]; EMChatMessage* message = [[EMChatMessage alloc] initWithConversationID:@"roomId" body:textBody ext:nil]; message.chatType = EMChatTypeChatRoom; @@ -472,7 +472,7 @@ message.priority = EMChatRoomMessagePriorityHigh; 发送附件类型消息时,可以在 `progress` 回调中获取附件上传的进度,以百分比表示,示例代码如下: -```objective-c +```objectivec // 发送消息时可以设置 completion 回调,在该回调中更新消息的显示状态。例如消息发送失败后的提示等等。 [[EMClient sharedClient].chatManager sendMessage:message progress:^(int progress) { // progress 为附件上传进度块的百分比。 diff --git a/docs/document/ios/message_traffic_statis.md b/docs/document/ios/message_traffic_statis.md index a9427b3ba..8c04b4295 100644 --- a/docs/document/ios/message_traffic_statis.md +++ b/docs/document/ios/message_traffic_statis.md @@ -43,7 +43,7 @@ SDK 仅统计本地消息的流量,而非消息的实际流量。一般而言 示例代码如下: -```objective-c +```objectivec EMChatMessageStatistics * msgStatistics = [[[EMClient sharedClient] statisticsManager] getMessageStatisticsById:@"msgId"]; ``` @@ -51,7 +51,7 @@ EMChatMessageStatistics * msgStatistics = [[[EMClient sharedClient] statisticsMa 你可以统计一定时间段内发送和/或接收的指定或全部类型的消息,示例代码如下: -```objective-c +```objectivec NSInteger count = [EMClient.sharedClient.statisticsManager getMessageCountWithStart:startTime end:endTime direction:EMMessageStatisticsDirectionAll type:EMMessageStatisticsTypeText]; ``` @@ -61,6 +61,6 @@ NSInteger count = [EMClient.sharedClient.statisticsManager getMessageCountWithSt 示例代码如下: -```objective-c +```objectivec NSInteger bytes = [EMClient.sharedClient.statisticsManager getMessageStatisticsSizeWithStart:startTime end:endTime direction:EMMessageStatisticsDirectionAll type:EMMessageStatisticsTypeAll]; ``` \ No newline at end of file diff --git a/docs/document/ios/message_translation.md b/docs/document/ios/message_translation.md index 61d535b17..0dfa0a3d8 100644 --- a/docs/document/ios/message_translation.md +++ b/docs/document/ios/message_translation.md @@ -39,7 +39,7 @@ iOS SDK 支持你通过调用 API 在项目中实现如下功能: SDK 支持所有微软翻译服务支持的语言,你可以使用 EMChatManager 模块的如下接口获取翻译功能支持的目标语言。 -```objective-c +```objectivec /** * 获取翻译服务支持的语言。 * @param aCompletionBlock 完成的回调。 @@ -50,7 +50,7 @@ SDK 支持所有微软翻译服务支持的语言,你可以使用 EMChatManage 使用过程如下: -```objective-c +```objectivec // 异步方法 [[[EMClient sharedClient] chatManager] fetchSupportedLanguages:^(NSArray * _Nullable languages, EMError * _Nullable error) { @@ -63,7 +63,7 @@ SDK 支持所有微软翻译服务支持的语言,你可以使用 EMChatManage 用户可以在收到文本消息后调用消息翻译接口进行翻译。接口定义如下: -```objective-c +```objectivec /** * 翻译消息,异步方法。 * @@ -78,7 +78,7 @@ SDK 支持所有微软翻译服务支持的语言,你可以使用 EMChatManage 调用过程如下: -```objective-c +```objectivec // 消息必须为文本消息。 [[[EMClient sharedClient] chatManager] translateMessage:msg targetLanguages:@[@"en",@"ja"] completion:^(EMChatMessage *message, EMError *error) { // 翻译后的译文信息获取。 @@ -91,7 +91,7 @@ SDK 支持所有微软翻译服务支持的语言,你可以使用 EMChatManage 用户可以在发送文本消息时,设置消息的目标语言,消息将在翻译后进行发送,接收方收到的消息将包含译文信息。使用过程如下: -```objective-c +```objectivec EMTextMessageBody* msgBody = [[EMTextMessageBody alloc] initWithText:@"你好"]; msgBody.targetLanguages = @[@"en",@"ja"]; EMMessage*message = [[EMMessage alloc] initWithConversationID:@"to" from:@"from" to:@"to" body:msgBody ext:nil]; diff --git a/docs/document/ios/message_update.md b/docs/document/ios/message_update.md index 5789b7e91..09eb4c83b 100644 --- a/docs/document/ios/message_update.md +++ b/docs/document/ios/message_update.md @@ -23,7 +23,7 @@ 你可以调用 `updateMessage` 方法更新本地数据库中的消息。 -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.chatManager updateMessage:message completion:^(EMChatMessage *aMessage, EMError *aError) { if (!aError) { diff --git a/docs/document/ios/moderation.md b/docs/document/ios/moderation.md index 3333e2bba..9cff37915 100644 --- a/docs/document/ios/moderation.md +++ b/docs/document/ios/moderation.md @@ -27,7 +27,7 @@ 举报违规消息的示例代码如下: -```objective-c +```objectivec // 异步方法 // msgId:要举报的消息 ID。 // tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。 diff --git a/docs/document/ios/multi_device.md b/docs/document/ios/multi_device.md index ff10d095d..cdfed52c7 100644 --- a/docs/document/ios/multi_device.md +++ b/docs/document/ios/multi_device.md @@ -61,7 +61,7 @@ iOS SDK 初始化时会生成登录 ID 用于在多设备登录和消息推送 你可以调用 `getSelfIdsOnOtherPlatformWithCompletion:` 方法获取其他登录设备的登录 ID 列表,然后选择目标登录 ID 作为消息接收方向指定设备发送消息。 -```objective-c +```objectivec [EMClient.sharedClient.contactManager getSelfIdsOnOtherPlatformWithCompletion:^(NSArray * _Nullable aList, EMError * _Nullable aError) { // 选择一个登录 ID 作为消息接收方。 NSString *to = aList.firstObject; @@ -80,7 +80,7 @@ iOS SDK 初始化时会生成登录 ID 用于在多设备登录和消息推送 你可以调用 `getLoggedInDevicesFromServerWithUsername` 或 `getLoggedInDevicesFromServerWithUserId` 方法通过传入用户 ID 和登录密码或用户 token 从服务器获取指定账号的在线登录设备的列表。调用该方法后,在 SDK 返回的信息中,`EMDeviceConfig` 中的 `deviceName` 属性表示自定义设备名称,若未自定义设备名称,返回设备型号。 -```objective-c +```objectivec // 用户 ID + 密码 [EMClient.sharedClient getLoggedInDevicesFromServerWithUsername:<#userId#> password:<#password#> completion:^(NSArray * _Nullable aList, EMError * _Nullable aError) { @@ -101,7 +101,7 @@ iOS SDK 初始化时会生成登录 ID 用于在多设备登录和消息推送 登录成功后才会将该设置发送到服务器。 ::: -```objective-c +```objectivec EMOptions* option = [EMOptions optionsWithAppkey:Appkey]; option.customDeviceName = @"XXX的iPad"; [EMClient.sharedClient initializeSDKWithOptions:option]; @@ -126,7 +126,7 @@ option.customDeviceName = @"XXX的iPad"; 登录成功后才会将该设置发送到服务器。 ::: -```objective-c +```objectivec EMOptions* option = [EMOptions optionsWithAppkey:Appkey]; option.customOSType = 60; [EMClient.sharedClient initializeSDKWithOptions:option]; @@ -142,7 +142,7 @@ option.customOSType = 60; 登录成功后才会将该设置发送到服务器。 ::: -```objective-c +```objectivec EMClient.sharedClient.option.loginExtensionInfo = @"you was kicked out by other device"; - (void)userAccountDidLoginFromOtherDeviceWithInfo:(EMLoginExtensionInfo* _Nullable)info { @@ -159,7 +159,7 @@ EMClient.sharedClient.option.loginExtensionInfo = @"you was kicked out by other 不登录也可以使用该接口。 ::: -```objective-c +```objectivec // username:账户名称,password:账户密码。 NSString *username = @""; NSString *password = @""; @@ -181,7 +181,7 @@ NSString *password = @""; 不登录也可以使用该接口。 ::: -```objective-c +```objectivec // 用户 ID + 密码 [EMClient.sharedClient kickAllDevicesWithUsername:username password:password completion:^(EMError * _Nullable aError) { }]; @@ -202,7 +202,7 @@ NSString *password = @""; 多端多设备场景下,无聊天室操作相关事件,只支持聊天室中发送和接收消息的同步。 ::: -```objective-c +```objectivec //实现 `EMMultiDevicesDelegate` 监听其他设备上的操作。 @interface ViewController () @@ -353,7 +353,7 @@ NSString *password = @""; 当 PC 端和移动端登录同一个账号时,在移动端可以通过调用方法获取到 PC 端的登录 ID。该登录 ID 相当于特殊的好友用户 ID,可以直接使用于聊天,使用方法与好友的用户 ID 类似。 -```objective-c +```objectivec NSArray *otherPlatformIds = [[EMClient sharedClient].contactManager getSelfIdsOnOtherPlatformWithError:nil]; if ([otherPlatformIds count] > 0) { NSString *chatter = otherPlatformIds[0]; diff --git a/docs/document/ios/overview.md b/docs/document/ios/overview.md index 64609e505..45ca34bc0 100644 --- a/docs/document/ios/overview.md +++ b/docs/document/ios/overview.md @@ -20,7 +20,7 @@ 初始化示例代码: -```objective-c +```objectivec // appkey 替换成你在环信即时通讯 IM 管理后台注册应用中的 App Key EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; [[EMClient sharedClient] initializeSDKWithOptions:options]; @@ -45,7 +45,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; 若支持 SDK 注册,需登录[环信即时通讯云控制台](https://console.easemob.com/user/login),选择 **即时通讯** > **服务概览**,将 **设置**下的 **用户注册模式** 设置为 **开放注册**。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient] registerWithUsername:@"username" password:@"your password" @@ -74,7 +74,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; **用户 ID + 密码** 是传统的登录方式。用户名和密码均由你的终端用户自行决定,密码需要符合密码规则要求。 -```objective-c +```objectivec //SDK 初始化 `EMOptions` 时可以传入 `loginExtensionInfo` 属性投递给被踢下线的设备。该属性需要开启多设备登录的情况下才能生效。 EMOptions *options = [EMOptions optionsWithAppkey:<#AppKey#>]; options.loginExtensionInfo = @"you was kicked out by other device"; @@ -95,7 +95,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; 使用 token 登录时需要处理 token 过期的问题,比如每次登录时更新 token 等机制。 ::: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient loginWithUsername:@"username" token:@"token" completion:^(NSString * _Nonnull aUsername, EMError * _Nullable aError) { @@ -113,7 +113,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; 自动登录完成后,触发 `EMClientDelegate` 中的以下回调: -```objective-c +```objectivec - (void)autoLoginDidCompleteWithError:(EMError * _Nullable)aError { } @@ -123,7 +123,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; ## 退出登录 -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient logout:YES completion:^(EMError * _Nullable aError) { @@ -134,7 +134,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; 你可以通过注册连接监听 `EMClientDelegate` 确认连接状态。 -```objective-c +```objectivec - viewDidLoad { ... @@ -184,7 +184,7 @@ EMOptions *options = [EMOptions optionsWithAppkey:@"<#appkey#>"]; 你可以通过监听 `EMClientDelegate` 中的以下回调,调用 `EMClient#logout:completion:` 退出登录并返回登录界面。 -```objective-c +```objectivec // 当前登录账号在其它设备登录时,当前登录的设备被踢下线时会触发该回调。该回调在 4.7.0 及其以后版本已经被弃用,由 `userAccountDidLoginFromOtherDeviceWithInfo` 回调替换。 - (void)userAccountDidLoginFromOtherDevice { @@ -230,7 +230,7 @@ SDK 的 `EMOptions#logLevel` 指定了日志输出级别,默认为 `EMLogLevel 开发阶段若希望在 XCode console 上输出 SDK 日志,可在 SDK 初始化时打开开关。 -```objective-c +```objectivec EMOptions* option = [EMOptions optionsWithAppkey:@"<#appkey#>"]; // 日志输出到 XCode console option.enableConsoleLog = YES; diff --git a/docs/document/ios/presence.md b/docs/document/ios/presence.md index 9601df3ec..b112a767a 100644 --- a/docs/document/ios/presence.md +++ b/docs/document/ios/presence.md @@ -48,7 +48,7 @@ 默认情况下,你不关注任何其他用户的在线状态。你可以通过调用 `subscribe` 方法订阅指定用户的在线状态,示例代码如下: -```objective-c +```objectivec [[[EMClient sharedClient] presenceManager] subscribe:@[@"Alice",@"Bob"] expiry:7*24*3600 completion:^(NSArray *presences, EMError *error) { }]; ``` @@ -68,7 +68,7 @@ 用户在线时,可调用 `publishPresenceWithDescription` 方法发布自定义在线状态: -```objective-c +```objectivec // 异步方法 [[[EMClient sharedClient] presenceManager] publishPresenceWithDescription:@"custom presence" completion:^(EMError *error) { }]; @@ -80,13 +80,13 @@ 参考如下代码,添加用户在线状态的监听器: -```objective-c +```objectivec [[[EMClient sharedClient] presenceManager] addDelegate:self delegateQueue:nil]; ``` 监听器实现以下代理方法: -```objective-c +```objectivec - (void) presenceStatusDidChanged:(NSArray*)presences { NSLog(@"presenceStatusDidChanged:%@",presences); @@ -97,7 +97,7 @@ 若取消指定用户的在线状态订阅,可调用 `unsubscribe` 方法,示例代码如下: -```objective-c +```objectivec // 异步方法 [[[EMClient sharedClient] presenceManager] unsubscribe:@[@"Alice"] completion:^(EMError *error) { @@ -108,7 +108,7 @@ 为方便用户管理订阅关系,SDK 提供 `fetchSubscribedMembersWithPageNum` 方法,可使用户分页查询自己订阅的用户列表,示例代码如下: -```objective-c +```objectivec // 异步方法 [[[EMClient sharedClient] presenceManager] fetchSubscribedMembersWithPageNum:0 pageSize:50 Completion:^(NSArray* members,EMError*error){ }]; @@ -118,7 +118,7 @@ 如果不关注用户的在线状态变更,你可以调用 `fetchPresenceStatus` 获取用户当前的在线状态,而无需订阅状态。示例代码如下: -```objective-c +```objectivec // 异步方法 // 每次最多可传 100 个用户 ID。 [[[EMClient sharedClient] presenceManager] fetchPresenceStatus:@[@"Alice",@"Tom"] completion:^(NSArray* presences,EMError*error){ diff --git a/docs/document/ios/privatecloud.md b/docs/document/ios/privatecloud.md index 5521f5791..ec3d3cf10 100644 --- a/docs/document/ios/privatecloud.md +++ b/docs/document/ios/privatecloud.md @@ -6,7 +6,7 @@ SDK 默认指向公有云地址,在部署私有云后,需要将地址重新指向到新的地址,以下是地址修改方法: -```objective-c +```objectivec EMOptions *options = [EMOptions optionsWithAppkey:appkey]; options.enableDnsConfig = NO; options.chatPort = 8080;//设置端口号 @@ -20,7 +20,7 @@ options.rtcUrlDomain= "wss://mprtc.easemob.com";//设置多人音视频的服务 如果需要配置 HTTPS 只需加一个属性即可。 ::: -```objective-c +```objectivec options.usingHttpsOnly = YES; ``` @@ -29,6 +29,6 @@ options.usingHttpsOnly = YES; 1. 服务器端配置 DNS 地址表 2. 设置服务器端配置的 URL 地址 -```objective-c +```objectivec options.dnsURL = @"xxxx";//设置服务器端配置的 URL 地址 ``` \ No newline at end of file diff --git a/docs/document/ios/push/push_apns.md b/docs/document/ios/push/push_apns.md index bf4c02dee..86c3c9926 100644 --- a/docs/document/ios/push/push_apns.md +++ b/docs/document/ios/push/push_apns.md @@ -142,7 +142,7 @@ ### **步骤二 将证书名称传递给 SDK** -```objective-c +```objectivec - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 注册推送。 [application registerForRemoteNotifications]; @@ -164,7 +164,7 @@ DeviceToken 注册后,iOS 系统会通过以下方式将 DeviceToken 回调给你,你需要把 DeviceToken 传给 SDK。 -```objective-c +```objectivec - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // 异步方法 [EMClient.sharedClient registerForRemoteNotificationsWithDeviceToken:deviceToken completion:^(EMError *aError) { diff --git a/docs/document/ios/push/push_display.md b/docs/document/ios/push/push_display.md index 4d4a79be5..d31813cd0 100644 --- a/docs/document/ios/push/push_display.md +++ b/docs/document/ios/push/push_display.md @@ -14,7 +14,7 @@ 你可以调用 `updatePushDisplayName` 设置推送通知中显示的昵称,如以下代码示例所示: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.pushManager updatePushDisplayName:@"displayName" completion:^(NSString * aDisplayName, EMError * aError) { if (aError) { @@ -25,7 +25,7 @@ 你也可以调用 `updatePushDisplayStyle` 设置推送通知的显示样式,如下代码示例所示: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.pushManager updatePushDisplayStyle:EMPushDisplayStyleSimpleBanner completion:^(EMError * aError) { @@ -56,7 +56,7 @@ 你可以调用 `getPushNotificationOptionsFromServerWithCompletion` 方法获取推送通知中的显示属性,如以下代码示例所示: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.pushManager getPushNotificationOptionsFromServerWithCompletion:^(EMPushOptions * aOptions, EMError * aError) { @@ -112,7 +112,7 @@ 这种情况下,创建消息时无需传入 `title_args` 和 `content_args` 参数。 -```objective-c +```objectivec //下面以文本消息为例,其他类型的消息设置方法相同。 EMTextMessageBody *body = [[EMTextMessageBody alloc]initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil]; @@ -160,7 +160,7 @@ message.chatType = EMChatTypeChat; ![img](/images/android/push/push_template_custom_example.png) -```objective-c +```objectivec //下面以文本消息为例,其他类型的消息设置方法相同。 EMTextMessageBody *body = [[EMTextMessageBody alloc]initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil]; @@ -187,7 +187,7 @@ message.chatType = EMChatTypeChat; 若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。 ::: -```objective-c +```objectivec [EMClient.sharedClient.pushManager setPushTemplate:@"templateName" completion:^(EMError * _Nullable aError) { }]; @@ -197,7 +197,7 @@ message.chatType = EMChatTypeChat; 创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。 -```objective-c +```objectivec EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil]; message.ext = @{@"em_apns_ext":@{ diff --git a/docs/document/ios/push/push_extension.md b/docs/document/ios/push/push_extension.md index 136081c55..8c639903d 100644 --- a/docs/document/ios/push/push_extension.md +++ b/docs/document/ios/push/push_extension.md @@ -6,7 +6,7 @@ ## 自定义推送字段 -```objective-c +```objectivec EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil]; message.ext = @{@"em_apns_ext":@{@"extern":@"custom string"}}; @@ -61,7 +61,7 @@ message.chatType = EMChatTypeChat; 更多内容可以参考苹果官方文档:[生成远程推送通知](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification?language=objc)。 -```objective-c +```objectivec EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil]; message.ext = @{@"em_apns_ext":@{@"em_push_sound":@"custom.caf"}}; @@ -109,7 +109,7 @@ message.chatType = EMChatTypeChat; 使用该方式设置后,本条消息会忽略接收方的免打扰设置,不论是否处于免打扰时间段都会正常向对方推送通知; -```objective-c +```objectivec EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil]; message.ext = @{@"em_force_notification":@YES}; @@ -130,7 +130,7 @@ message.ext = @{@"em_force_notification":@YES}; 发送静默消息和免打扰模式下均为不推送消息,区别在于发送静默消息为发送方在发送消息时设置,而免打扰模式为接收方设置在指定时间段内不接收推送通知。 -```objective-c +```objectivec EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil]; message.ext = @{@"em_ignore_notification":@YES}; @@ -149,7 +149,7 @@ message.ext = @{@"em_ignore_notification":@YES}; 如果你的目标平台是 iOS 10.0 或以上版本,你可以参考如下代码实现 [`UNNotificationServiceExtension`](https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension?language=objc) 的富文本推送功能。 -```objective-c +```objectivec EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil]; message.ext = @{@"em_apns_ext":@{@"em_push_mutable_content":@YES}}; @@ -168,7 +168,7 @@ message.chatType = EMChatTypeChat; 接收方收到富文本推送时,会进入回调 `didReceiveNotificationRequest:withContentHandler:`,示例代码如下: -```objective-c +```objectivec - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { // 推送扩展字段 NSDictionary *userInfo = request.content.userInfo; diff --git a/docs/document/ios/push/push_notification_mode_dnd.md b/docs/document/ios/push/push_notification_mode_dnd.md index f03d35bcc..fa198510f 100644 --- a/docs/document/ios/push/push_notification_mode_dnd.md +++ b/docs/document/ios/push/push_notification_mode_dnd.md @@ -132,7 +132,7 @@ extension ViewController: EMMultiDevicesDelegate { 你可以调用 `setSilentModeForAll` 设置 app 级别的推送通知,并通过指定 `EMSilentModeParam` 字段设置推送通知方式和免打扰模式,如下代码示例所示: -```objective-c +```objectivec //设置推送通知方式为 `MentionOnly`。 EMSilentModeParam *param = [[EMSilentModeParam alloc]initWithParamType:EMSilentModeParamTypeRemindType]; param.remindType = EMPushRemindTypeMentionOnly; @@ -159,7 +159,7 @@ param.silentModeEndTime = [[EMSilentModeTime alloc]initWithHours:15 minutes:0]; 你可以调用 `getSilentModeForAll` 获取 app 级别的推送通知设置,如以下代码示例所示: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].pushManager getSilentModeForAllWithCompletion:^(EMSilentModeResult *aResult, EMError *aError) { if (!aError) { @@ -180,7 +180,7 @@ param.silentModeEndTime = [[EMSilentModeTime alloc]initWithHours:15 minutes:0]; 你可以调用 `setSilentModeForConversation` 设置指定会话的推送通知,并通过指定 `EMSilentModeParam` 字段设置推送通知方式和免打扰模式,如以下代码示例所示: -```objective-c +```objectivec //设置推送通知方式为 `MentionOnly`。 EMSilentModeParam *param = [[EMSilentModeParam alloc]initWithParamType:EMSilentModeParamTypeRemindType]; param.remindType = EMPushRemindTypeMentionOnly; @@ -202,7 +202,7 @@ EMConversationType conversationType = EMConversationTypeGroupChat; 你可以调用 `getSilentModeForAllWithCompletion` 获取指定会话的推送通知设置,如以下代码示例所示: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].pushManager getSilentModeForAllWithCompletion:^(EMSilentModeResult *aResult, EMError *aError) { if (!aError) { @@ -229,7 +229,7 @@ EMConversationType conversationType = EMConversationTypeGroupChat; 你可以调用 `getSilentModeForConversations` 获取多个会话的推送通知设置,如以下代码示例所示: -```objective-c +```objectivec NSArray *conversations = @[conversation1,conversation2]; // 异步方法 [[EMClient sharedClient].pushManager getSilentModeForConversations:conversationArray completion:^(NSDictionary*aResult, EMError *aError) { @@ -245,7 +245,7 @@ NSArray *conversations = @[conversation1,conversation2]; 以下代码示例显示了如何清除会话的推送通知方式的设置: -```objective-c +```objectivec //清除指定会话的推送通知方式的设置。清除后,该会话会采取 app 的设置。 // 异步方法 [[EMClient sharedClient].pushManager clearRemindTypeForConversation:@"" conversationType:conversationType completion:^(EMSilentModeResult *aResult, EMError *aError) { diff --git a/docs/document/ios/push/push_parsing.md b/docs/document/ios/push/push_parsing.md index 460c1de9a..f3f46b92d 100644 --- a/docs/document/ios/push/push_parsing.md +++ b/docs/document/ios/push/push_parsing.md @@ -4,7 +4,7 @@ - 若 app 中使用了 `SceneDelegate`,app 的启动流程通过场景系统进行管理。当你点击离线推送的消息打开 app 时,app 将首先启动场景,然后调用 `SceneDelegate` 中的相应方法处理场景的连接和配置。你需要在 `SceneDelegate` 的 `scene(_:willConnectTo:options:)` 方法中查看 `connectionOptions` 参数获取推送内容,示例代码如下: -```objective-c +```objectivec - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { // 获取启动选项 NSDictionary *launchOptions = connectionOptions.notificationResponse.notification.request.content.userInfo; @@ -15,7 +15,7 @@ - 若 app 中不使用 `SceneDelegate`,iOS 系统会通过 `application:didFinishLaunchingWithOptions:` 方法中的 `launchOptions` 将推送中的用户自定义信息传递给 app。你需要查看 `launchOptions` 参数获取推送内容。 -```objective-c +```objectivec - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; } diff --git a/docs/document/ios/push/push_translation.md b/docs/document/ios/push/push_translation.md index b26d4fb34..bdf8d4d33 100644 --- a/docs/document/ios/push/push_translation.md +++ b/docs/document/ios/push/push_translation.md @@ -6,7 +6,7 @@ 以下代码示例显示了如何设置和获取推送通知的首选语言: -```objective-c +```objectivec //设置离线推送的首选语言。 // 异步方法 [[EMClient sharedClient].pushManager setPreferredNotificationLanguage:@"EU" completion:^(EMError *aError) { diff --git a/docs/document/ios/quickstart.md b/docs/document/ios/quickstart.md index ba667b642..be8701e21 100644 --- a/docs/document/ios/quickstart.md +++ b/docs/document/ios/quickstart.md @@ -64,7 +64,7 @@ SDK 支持 **CocoaPods 导入**和**手动导入**两种方式。 在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。 -```objective-c +```objectivec (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions { // appkey 替换成你在环信即时通讯 IM 管理后台注册应用中的 App Key @@ -80,7 +80,7 @@ SDK 支持 **CocoaPods 导入**和**手动导入**两种方式。 向工程中导入 Chat 文件。 -```objective-c +```objectivec // ConversationId 接收消息方的环信ID:@"user2" // type 聊天类型:EMConversationTypeChat 单聊类型 // createIfNotExist 如果会话不存在是否创建会话:YES @@ -94,7 +94,7 @@ SDK 支持 **CocoaPods 导入**和**手动导入**两种方式。 设置用户名和密码创建账号。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient] registerWithUsername:@"username" password:@"your password" @@ -106,7 +106,7 @@ SDK 支持 **CocoaPods 导入**和**手动导入**两种方式。 利用创建的用户名和密码登录环信 IM。 -```objective-c +```objectivec [[EMClient sharedClient] loginWithUsername:@"username" password:@"your password" completion:^(NSString *aUsername, EMError *aError) { @@ -118,7 +118,7 @@ SDK 支持 **CocoaPods 导入**和**手动导入**两种方式。 利用创建的用户名和密码登录环信 IM,向对端用户发送消息。在下面示例中,向 user 2 发送文本消息。 -```objective-c +```objectivec // 创建消息 EMTextMessageBody* textBody = [[EMTextMessageBody alloc] initWithText:@"hello"]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:@"user2" diff --git a/docs/document/ios/reaction.md b/docs/document/ios/reaction.md index fabbe5189..9fb2b455e 100644 --- a/docs/document/ios/reaction.md +++ b/docs/document/ios/reaction.md @@ -42,7 +42,7 @@ Reaction 场景示例如下: 示例代码如下: -```objective-c +```objectivec // 添加 Reaction。异步方法 [EMClient.sharedClient.chatManager addReaction:@"reaction" toMessage:@"messageId" completion:^(EMError * _Nullable error) { refreshBlock(error, changeSelectedStateHandle); @@ -61,7 +61,7 @@ Reaction 场景示例如下: 示例代码如下: -```objective-c +```objectivec // 删除 Reaction。异步方法 [EMClient.sharedClient.chatManager removeReaction:@"reaction" fromMessage:@"messageId" completion:^(EMError * _Nullable error) { refreshBlock(error, changeSelectedStateHandle); @@ -78,7 +78,7 @@ Reaction 场景示例如下: 调用 `getReactionList` 方法从服务器获取指定消息的 Reaction 概览列表,列表内容包含 Reaction 内容,添加或移除 Reaction 的用户数量,以及添加或移除 Reaction 的前三个用户的用户 ID。示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.chatManager getReactionList:@["messageId"] groupId:@"groupId" chatType:EMChatTypeChat completion:^(NSDictionary * _Nonnull, EMError * _Nullable) { @@ -89,7 +89,7 @@ Reaction 场景示例如下: 调用 `getReactionDetail` 方法可以从服务器获取指定 Reaction 的详情,包括 Reaction 内容,添加或移除 Reaction 的用户数量以及添加或移除 Reaction 的全部用户列表。示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.chatManager getReactionDetail:@"messageId" reaction:@"reaction" cursor:nil pageSize:30 completion:^(EMMessageReaction * _Nonnull, NSString * _Nullable cursor, EMError * _Nullable) { diff --git a/docs/document/ios/room_attributes.md b/docs/document/ios/room_attributes.md index 68e0d2cad..07b21d520 100644 --- a/docs/document/ios/room_attributes.md +++ b/docs/document/ios/room_attributes.md @@ -39,7 +39,7 @@ 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager getChatroomAnnouncementWithId:@"chatRoomId" completion:nil]; ``` @@ -50,7 +50,7 @@ 示例代码如下: -```objective-c +```objectivec EMError *error = nil; // 异步方法 [[EMClient sharedClient].roomManager updateChatroomAnnouncementWithId:_chatroomId announcement:textString completion:nil]; @@ -62,7 +62,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec EMError *error = nil; // 异步方法 [[EMClient sharedClient].roomManager updateSubject:textString forChatroom:self.chatroom.chatroomId completion:nil]; @@ -74,7 +74,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec EMError *error = nil; // 异步方法 [[EMClient sharedClient].roomManager updateDescription:textString forChatroom:self.chatroom.chatroomId completion:nil]; @@ -88,7 +88,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager fetchChatroomAttributes:self.currentConversation.conversationId keys:@[@"123"] completion:^(NSDictionary * _Nullable map, EMError * _Nullable error) { @@ -101,7 +101,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager fetchChatroomAllAttributes:self.currentConversation.conversationId completion:^(NSDictionary * _Nullable map, EMError * _Nullable error) { @@ -114,7 +114,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager setChatroomAttributes:self.currentConversation.conversationId key:@"234" value:@"123" autoDelete:YES completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { @@ -127,7 +127,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager setChatroomAttributesForced:self.currentConversation.conversationId key:@"234" value:@"123" autoDelete:YES completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { @@ -140,7 +140,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager setChatroomAttributes:self.currentConversation.conversationId attributes:@{@"testKey":@"123"} autoDelete:YES completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { @@ -153,7 +153,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager setChatroomAttributesForced:self.currentConversation.conversationId attributes:@{@"testKey":@"123"} autoDelete:YES completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { }]; @@ -165,7 +165,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager removeChatroomAttributes:self.currentConversation.conversationId key:@"234" autoDelete:YES completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { @@ -178,7 +178,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager removeChatroomAttributesForced:self.currentConversation.conversationId key:@"234" autoDelete:YES completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { @@ -191,7 +191,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager removeChatroomAttributes:self.currentConversation.conversationId attributes:@[@"testKey"] completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { @@ -204,7 +204,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.roomManager removeChatroomAttributesForced:self.currentConversation.conversationId attributes:@[@"testKey"] completionBlock:^(EMError * _Nullable aError, NSDictionary * _Nullable failureKeys) { diff --git a/docs/document/ios/room_manage.md b/docs/document/ios/room_manage.md index d949c4354..e46df4ebc 100644 --- a/docs/document/ios/room_manage.md +++ b/docs/document/ios/room_manage.md @@ -42,7 +42,7 @@ 示例代码如下: -```objective-c +```objectivec EMError *error; EMChatroom *chatroom = [[EMClient sharedClient].roomManager createChatroomWithSubject:@"Subject" description:@"description" invitees:@[@"user1",@"user2"] message:@"message" maxMembersCount:100 error:&error]; ``` @@ -56,7 +56,7 @@ EMError *error; 示例代码如下: -```objective-c +```objectivec // 获取公开聊天室列表,每次最多可获取 1,000 个。 // 异步方法 [[EMClient sharedClient].roomManager getChatroomsFromServerWithPage:1 pageSize:50 completion:nil]; @@ -88,7 +88,7 @@ extension ViewController: EMChatroomManagerDelegate { 示例代码如下: -```objective-c +```objectivec // 异步方法 EMChatroom *chatroom = [[EMClient sharedClient].roomManager getChatroomSpecificationFromServerWithId:@“chatroomId” completion:nil]; ``` @@ -99,7 +99,7 @@ EMChatroom *chatroom = [[EMClient sharedClient].roomManager getChatroomSpecifica 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].roomManager destroyChatroom:self.chatroom.chatroomId completion:nil]; ``` @@ -110,7 +110,7 @@ SDK 中提供了聊天室事件的监听接口。你可以通过注册聊天室 示例代码如下: -```objective-c +```objectivec // 注册聊天室回调。 [[EMClient sharedClient].roomManager addDelegate:self delegateQueue:nil]; // 移除聊天室回调。 @@ -119,7 +119,7 @@ SDK 中提供了聊天室事件的监听接口。你可以通过注册聊天室 具体事件如下: -```objective-c +```objectivec // 有用户加入聊天室。聊天室的所有成员(除新成员外)会收到该事件。 - (void)userDidJoinChatroom:(EMChatroom *)aChatroom user:(NSString *)aUsername { diff --git a/docs/document/ios/room_members.md b/docs/document/ios/room_members.md index a2b31373c..7d699b4dd 100644 --- a/docs/document/ios/room_members.md +++ b/docs/document/ios/room_members.md @@ -34,7 +34,7 @@ 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager getChatroomMemberListFromServerWithId:cursor:pageSize:completion] //cursor:从该游标位置开始取数据。首次调用 cursor 传空值,从最新数据开始获取。 //pageSize:每页期望返回的成员数,最大值为 1,000。 @@ -50,20 +50,20 @@ EMCursorResult * result = [[EMClient sharedClient].roomManager getCha 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].roomManager leaveChatroom:@"aChatroomId" completion:nil]; ``` 退出聊天室时,SDK 默认删除该聊天室所有本地消息,若要保留这些消息,可在 SDK 初始化时将 `isDeleteMessagesWhenExitChatRoom` 设置为 `NO`。 -```objective-c +```objectivec @property (nonatomic, assign) BOOL isDeleteMessagesWhenExitChatRoom; ``` 示例代码如下: -```objective-c +```objectivec EMOptions *retOpt = [EMOptions optionsWithAppkey:@"appkey"]; retOpt.isDeleteMessagesWhenExitChatRoom = NO; ``` @@ -80,7 +80,7 @@ retOpt.isDeleteMessagesWhenExitChatRoom = NO; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager removeMembers:fromChatroom:completion] [EMClient.sharedClient.roomManager removeMembers:@[@"member1",@"member2"] fromChatroom:@"roomId" completion:^(EMChatroom * _Nullable aChatroom, EMError * _Nullable aError) { @@ -108,7 +108,7 @@ retOpt.isDeleteMessagesWhenExitChatRoom = NO; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager blockMembers:fromChatroom:completion] EMError *error = nil; [[EMClient sharedClient].roomManager blockMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error]; @@ -120,7 +120,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager unblockMembers:fromChatroom:completion] EMError *error = nil; [[EMClient sharedClient].roomManager unblockMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error]; @@ -132,7 +132,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager getChatroomBlacklistFromServerWithId:pageNumber:pageSize:completion] EMError *error = nil; NSArray * blockMembers = [[EMClient sharedClient].roomManager getChatroomBlacklistFromServerWithId:@"chatroomId" pageNumber:1 pageSize:20 error:&error]; @@ -150,7 +150,7 @@ NSArray * blockMembers = [[EMClient sharedClient].roomManager getCha 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager getChatroomWhiteListFromServerWithId:completion] EMError *error = nil; NSArray *allowMembers = [EMClient.sharedClient.roomManager getChatroomWhiteListFromServerWithId:@"aChatroomId" error:&error]; @@ -160,7 +160,7 @@ NSArray *allowMembers = [EMClient.sharedClient.roomManager getChatro 所有聊天室成员可以调用 `isMemberInWhiteListFromServerWithChatroomId` 方法检查自己是否在白名单中,示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager isMemberInWhiteListFromServerWithChatroomId:completion] EMError *error = nil; BOOL isAllowed = [EMClient.sharedClient.roomManager isMemberInWhiteListFromServerWithChatroomId:@"aChatroomId" error:&error]; @@ -172,7 +172,7 @@ BOOL isAllowed = [EMClient.sharedClient.roomManager isMemberInWhiteListFromServe 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager addWhiteListMembers:fromChatroom:completion] EMError *error = nil; [EMClient.sharedClient.roomManager addWhiteListMembers:@[@"userId1",@"userId2"] fromChatroom:@"aChatroomId" error:&error]; @@ -184,7 +184,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager removeWhiteListMembers:fromChatroom:completion] EMError *error = nil; [EMClient.sharedClient.roomManager removeWhiteListMembers:@[@"userId1",@"userId2"] fromChatroom:@"aChatroomId" error:&error]; @@ -202,7 +202,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager muteMembers:muteMilliseconds:fromChatroom:completion] // `muteMilliseconds`:禁言时间。传 -1 表示永久禁言。 EMError *error = nil; @@ -219,7 +219,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager unmuteMembers:fromChatroom:completion] EMError *error = nil; [[EMClient sharedClient].roomManager unmuteMembers:@[@"userName"] fromChatroom:@"chatroomId" error:&error]; @@ -231,7 +231,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager getChatroomMuteListFromServerWithId:pageNumber:pageSize:completion] EMError *error = nil; NSArray * muteMembers = [[EMClient sharedClient].roomManager getChatroomMuteListFromServerWithId:@"chatroomId" pageNumber:1 pageSize:20 error:&error]; @@ -249,7 +249,7 @@ NSArray * muteMembers = [[EMClient sharedClient].roomManager getChat 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager muteAllMembersFromChatroom:completion] EMError *error = nil; [EMClient.sharedClient.roomManager muteAllMembersFromChatroom:@"chatRoomId" error:&error]; @@ -261,7 +261,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager unmuteAllMembersFromChatroom:completion] EMError *error = nil; [EMClient.sharedClient.roomManager unmuteAllMembersFromChatroom:@"chatRoomId" error:&error]; @@ -275,7 +275,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager updateChatroomOwner:newOwner:completion] EMError *error = nil; [[EMClient sharedClient].roomManager updateChatroomOwner:@"chatroomId" newOwner:@"textString" error:&error]; @@ -287,7 +287,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager addAdmin:toChatroom:completion] EMError *error = nil; [[EMClient sharedClient].roomManager addAdmin:@"userName" toChatroom:@"chatroomId" error:&error]; @@ -299,7 +299,7 @@ EMError *error = nil; 示例代码如下: -```objective-c +```objectivec // 同步方法,阻塞线程,异步方法参见[EMChatroomManager removeAdmin:fromChatroom:completion] EMError *error = nil; [[EMClient sharedClient].roomManager removeAdmin:@"userName" fromChatroom:@"chatroomId" error:&error]; diff --git a/docs/document/ios/thread.md b/docs/document/ios/thread.md index 42c3ddb34..101142173 100644 --- a/docs/document/ios/thread.md +++ b/docs/document/ios/thread.md @@ -38,7 +38,7 @@ 示例代码如下: -```objective-c +```objectivec // threadName:子区名称,长度不超过 64 个字符 // messageId:消息 ID,基于该消息创建子区 // parentId:群组 ID @@ -64,7 +64,7 @@ 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.threadManager destroyChatThread:self.conversationId completion:^(EMError *aError) { if (!aError) { @@ -88,7 +88,7 @@ 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.threadManager joinChatThread:model.message.threadOverView.threadId completion:^(EMChatThread *thread,EMError *aError) { if (!aError || aError.code == EMErrorUserAlreadyExist) { @@ -107,7 +107,7 @@ 示例代码如下: -```objective-c +```objectivec // 异步方法 [EMClient.sharedClient.threadManager leaveChatThread:self.conversationId completion:^(EMError *aError) { if (!aError) { @@ -126,7 +126,7 @@ 示例代码如下: -```objective-c +```objectivec // chatThreadId:子区 ID // member:子区成员的用户 ID // 异步方法 @@ -147,7 +147,7 @@ 示例代码如下: -```objective-c +```objectivec // threadId:子区 ID // ThreadName:修改后的子区名称(不超过 64 个字符) // 异步方法 @@ -166,7 +166,7 @@ 示例代码如下: -```objective-c +```objectivec // threadId:子区 ID // 异步方法 [EMClient.sharedClient.threadManager getChatThreadDetail:self.currentConversation.conversationId completion:^(EMChatThread *thread, EMError *aError) { @@ -182,7 +182,7 @@ 子区所属群组的所有成员均可以调用 `getChatThreadMemberListFromServerWithId` 方法从服务器分页获取子区成员列表。 -```objective-c +```objectivec // threadId:子区 ID // pageSize:单次请求返回的成员数,取值范围为 [1,50] // cursor:开始获取数据的游标位置,首次调用方法时传 `nil` 或空字符串 @@ -196,7 +196,7 @@ 1. 用户可以调用 `getJoinedChatThreadsFromServer` 方法从服务器分页获取自己加入和创建的子区列表: -```objective-c +```objectivec // limit:单次请求返回的子区数,取值范围为 [1,50] // cursor:开始获取数据的游标位置,首次调用方法时传 `nil` 或空字符串 // 异步方法 @@ -207,7 +207,7 @@ 2. 用户可以调用 `getJoinedChatThreadsFromServer` 方法从服务器分页获取指定群组中自己加入和创建的子区列表: -```objective-c +```objectivec // parentId:群组 ID // pageSize:单次请求返回的子区数,取值范围为 [1,50] // cursor:开始获取数据的游标位置,首次调用方法时传 `nil` 或空字符串 @@ -221,7 +221,7 @@ 3. 用户还可以调用 `getChatThreadsFromServer` 方法从服务器分页获取指定群组的子区列表: -```objective-c +```objectivec // parentId: 群组 ID // pageSize: 单次请求返回的子区数,取值范围为 [1,50] // cursor: 开始获取数据的游标位置,首次调用方法时传 `nil` 或空字符串 @@ -239,7 +239,7 @@ 示例代码如下: -```objective-c +```objectivec // threadIds:要查询的子区 ID 列表,每次最多可传入 20 个子区 ID // 异步方法 [[EMClient sharedClient].threadManager getLastMessageFromSeverWithChatThreads:ids completion:^(NSDictionary * _Nonnull messageMap, EMError * _Nonnull aError) { @@ -255,7 +255,7 @@ 示例代码如下: -```objective-c +```objectivec EMChatThreadManagerDelegate // 子区创建。子区所属群组的所有成员收到该事件。 diff --git a/docs/document/ios/thread_message.md b/docs/document/ios/thread_message.md index 2df83c77b..e0ff3c66b 100644 --- a/docs/document/ios/thread_message.md +++ b/docs/document/ios/thread_message.md @@ -46,7 +46,7 @@ 示例代码如下: -```objective-c +```objectivec // 创建一条文本消息,`content` 为消息文字内容,`chatThreadId` 为子区 ID。 NSString *from = [[EMClient sharedClient] currentUsername]; NSString *chatThreadId = self.currentConversation.conversationId; @@ -71,7 +71,7 @@ message.isChatThread = self.isChatThread; 示例代码如下: -```objective-c +```objectivec - (void)messagesDidReceive:(NSArray *)aMessages { // 做相关处理。 @@ -90,7 +90,7 @@ message.isChatThread = self.isChatThread; 示例代码如下: -```objective-c +```objectivec - (void)messagesInfoDidRecall:(NSArray *)aRecallMessagesInfo {} ``` @@ -105,7 +105,7 @@ message.isChatThread = self.isChatThread; 调用 `asyncFetchHistoryMessagesFromServer` 方法从服务器获取子区消息。从服务器获取子区消息与获取群组消息的唯一区别为前者需传入子区 ID,后者需传入群组 ID。 -```objective-c +```objectivec [EMClient.sharedClient.chatManager asyncFetchHistoryMessagesFromServer:@"threadId" conversationType:EMConversationTypeGroupChat startMessageId:@"" fetchDirection:EMMessageFetchHistoryDirectionUp pageSize:20 completion:^(EMCursorResult * _Nullable aResult, EMError * _Nullable aError) { }]; @@ -115,7 +115,7 @@ message.isChatThread = self.isChatThread; 调用 `EMChatManager#getAllConversations` 方法只能获取单聊或群聊会话。要获取本地单个子区会话中的消息,参考以下示例代码: -```objective-c +```objectivec // 需设置会话类型为 `EMConversationTypeGroupChat` 和 `isThread` 为 `YES` EMConversation* conversation = [EMClient.sharedClient.chatManager getConversation:conversationId type:EMConversationTypeGroupChat createIfNotExist:NO isThread:YES]; // 获取该子区会话的消息 diff --git a/docs/document/ios/user_relationship.md b/docs/document/ios/user_relationship.md index 90f30df3e..59381b97b 100644 --- a/docs/document/ios/user_relationship.md +++ b/docs/document/ios/user_relationship.md @@ -45,7 +45,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].contactManager addContact:@"aUsername" message:@"Message" completion:^(NSString *aUsername, EMError *aError) { if (!aError) { @@ -62,7 +62,7 @@ if (!aError) { 设置好友监听示例代码如下: -```objective-c +```objectivec // 注册好友回调。 [[EMClient sharedClient].contactManager addDelegate:self delegateQueue:nil]; // 移除好友回调。 @@ -76,7 +76,7 @@ if (!aError) { 收到好友请求后,可以选择同意加好友申请或者拒绝加好友申请,示例代码如下: -```objective-c +```objectivec // 同意好友申请。 // 异步方法 [[EMClient sharedClient].contactManager approveFriendRequestFromUser:@"aUsername" completion:^(NSString *aUsername, EMError *aError) { @@ -102,7 +102,7 @@ if (!aError) { 示例代码如下: -```objective-c +```objectivec // 对方同意了好友申请。 - (void)friendRequestDidApproveByUser:(NSString *)aUsername { } @@ -118,7 +118,7 @@ if (!aError) { 示例代码如下: -```objective-c +```objectivec // 删除好友。 // 异步方法 [[EMClient sharedClient].contactManager deleteContact:@"aUsername" isDeleteConversation:aIsDeleteConversation completion:^(NSString *aUsername, EMError *aError) { @@ -132,7 +132,7 @@ if (!aError) { 调用 `deleteContact` 删除好友后,用户 A,B 都会收到 `friendshipDidRemoveByUser` 回调,示例代码如下: -```objective-c +```objectivec // 好友已被删除。 - (void)friendshipDidRemoveByUser:(NSString *)aUsername { } @@ -144,7 +144,7 @@ if (!aError) { 好友备注的长度不能超过 100 个字符。 -```objective-c +```objectivec [EMClient.sharedClient.contactManager setContactRemark:@"userId" remark:@"remark" completion:^(EMContact * _Nullable contact, EMError * _Nullable aError) { }]; @@ -158,7 +158,7 @@ if (!aError) { - 一次性获取服务端的好友列表。 -```objective-c +```objectivec [EMClient.sharedClient.contactManager getAllContactsFromServerWithCompletion:^(NSArray * _Nullable aList, EMError * _Nullable aError) { }]; @@ -166,7 +166,7 @@ if (!aError) { - 分页获取服务端的好友列表。 -```objective-c +```objectivec //pageSize 的取值范围为 [1,50] [EMClient.sharedClient.contactManager getContactsFromServerWithCursor:@"" pageSize:50 completion:^(EMCursorResult * _Nullable aResult, EMError * _Nullable aError) { @@ -175,7 +175,7 @@ if (!aError) { 此外,你也可以调用 `getContactsFromServerWithCompletion` 方法从服务器获取所有好友的列表。该列表只包含好友的用户 ID。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].contactManager getContactsFromServerWithCompletion:^(NSArray *aList, EMError *aError) { if (!aError) { @@ -196,13 +196,13 @@ if (!aError) { - 获取本地单个好友。 -```objective-c +```objectivec EMContact* contact = [EMClient.sharedClient.contactManager getContact:@"userId"]; ``` - 一次性获取本地好友列表。 -```objective-c +```objectivec NSArray* contacts = [EMClient.sharedClient.contactManager getAllContacts]; ``` @@ -210,7 +210,7 @@ NSArray* contacts = [EMClient.sharedClient.contactManager getAllCont 示例代码如下: -```objective-c +```objectivec NSArray *userlist = [[EMClient sharedClient].contactManager getContacts]; ``` @@ -224,7 +224,7 @@ NSArray *userlist = [[EMClient sharedClient].contactManager getContacts]; 从服务器获取黑名单列表之后,才能从本地数据库获取到黑名单列表。 -```objective-c +```objectivec // 从服务器获取黑名单列表。 // 异步方法 [[EMClient sharedClient].contactManager getBlackListFromServerWithCompletion:^(NSArray *aList, EMError *aError) { @@ -238,7 +238,7 @@ NSArray *userlist = [[EMClient sharedClient].contactManager getContacts]; 2. 从本地数据库获取黑名单列表 -```objective-c +```objectivec // 同步方法 NSArray *blockList = [[EMClient sharedClient].contactManager getBlackList]; ``` @@ -251,7 +251,7 @@ NSArray *blockList = [[EMClient sharedClient].contactManager getBlackList]; 示例代码如下: -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].contactManager addUserToBlackList:@"aUsername" completion:^(NSString *aUsername, EMError *aError) { if (!aError) { @@ -266,7 +266,7 @@ NSArray *blockList = [[EMClient sharedClient].contactManager getBlackList]; 你可以调用 `removeUserFromBlackList` 将用户从黑名单移除,用户发送消息等行为将恢复。 -```objective-c +```objectivec // 异步方法 [[EMClient sharedClient].contactManager removeUserFromBlackList:@"aUsername" completion:^(NSString *aUsername, EMError *aError) { if (!aError) { diff --git a/docs/document/ios/userprofile.md b/docs/document/ios/userprofile.md index 9b13c7831..227ceb716 100644 --- a/docs/document/ios/userprofile.md +++ b/docs/document/ios/userprofile.md @@ -40,7 +40,7 @@ 参考如下示例代码,在你的项目中当前用户设置自己的所有属性或者仅设置某一项属性。 -```objective-c +```objectivec // 设置用户所有属性。 EMUserInfo *userInfo = [[EMUserInfo alloc] init]; userInfo.userId = EMClient.sharedClient.currentUsername; @@ -57,7 +57,7 @@ userInfo.gender = 1; }]; ``` -```objective-c +```objectivec // 以修改用户头像为例,演示如何修改指定用户属性。 NSString *url = @"https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/IMDemo/avatar/Image1.png"; @@ -89,14 +89,14 @@ NSString *url = @"https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/IMD 示例代码如下: -```objective-c +```objectivec // 获取用户所有属性,一次调用用户 ID 数量不能超过 100。 // 异步方法 [[EMClient sharedClient].userInfoManager fetchUserInfoById:@[EMClient.sharedClient.currentUsername] completion:^(NSDictionary *aUserDatas, EMError *aError) { }]; ``` -```objective-c +```objectivec // 获取指定用户的指定用户属性。 NSString *userIds = @[@"user1",@"user2"]; NSArray *userInfoTypes = @[@(EMUserInfoTypeAvatarURL),@(EMUserInfoTypePhone),@(EMUserInfoTypeMail)]; @@ -121,7 +121,7 @@ NSArray *userInfoTypes = @[@(EMUserInfoTypeAvatarURL),@(EMUserInfoTy 如果你的场景中涉及名片消息,你也可以使用自定义属性功能,并参考如下示例代码实现: -```objective-c +```objectivec // 设置自定义消息的 `event` 为 `userCard` ,并在 `ext` 中添加展示名片所需要的用户 ID、昵称和头像等字段。 EMCustomMessageBody *body = [[EMCustomMessageBody alloc] init]; body.event = @"userCard"; diff --git a/docs/document/react-native/push/push_get_device_token.md b/docs/document/react-native/push/push_get_device_token.md index f676a98ad..bada1fe8a 100644 --- a/docs/document/react-native/push/push_get_device_token.md +++ b/docs/document/react-native/push/push_get_device_token.md @@ -84,13 +84,13 @@ end 1. 添加头文件: - ```objective-c + ```objectivec #import ``` 2. 在 `AppDelegate` 的 `- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions` 中添加代码: - ```objective-c + ```objectivec [[PushClient sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; ``` @@ -98,19 +98,19 @@ end 在 `AppDelegate` 的 `- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken` 中添加代码: - ```objective-c + ```objectivec [[PushClient sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; ``` 在 `AppDelegate` 的 `- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;` 中添加代码: - ```objective-c + ```objectivec [[PushClient sharedInstance] application:application didFailToRegisterForRemoteNotificationsWithError:error]; ``` 在 `AppDelegate` 的 `- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler` 中添加代码: - ```objective-c + ```objectivec [[PushClient sharedInstance] application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; ``` diff --git a/docs/private/im/uc_iOS_private.md b/docs/private/im/uc_iOS_private.md index 888e885a0..01f346d8d 100644 --- a/docs/private/im/uc_iOS_private.md +++ b/docs/private/im/uc_iOS_private.md @@ -6,7 +6,7 @@ SDK 默认指向公有云地址,在部署私有云后,需要将地址重新指向到新的地址,以下是地址修改方法: -```objective-c +```objectivec EMOptions *options = [EMOptions optionsWithAppkey:appkey]; options.enableDnsConfig = NO; options.chatPort = 8080;//设置端口号 @@ -20,7 +20,7 @@ options.rtcUrlDomain= "wss://mprtc.easemob.com";//设置多人音视频的服务 如果需要配置 HTTPS 只需加一个属性即可。 ::: -```objective-c +```objectivec options.usingHttpsOnly = YES; ``` @@ -29,6 +29,6 @@ options.usingHttpsOnly = YES; 1. 服务器端配置 DNS 地址表 2. 设置服务器端配置的 URL 地址 -```objective-c +```objectivec options.dnsURL = @"xxxx";//设置服务器端配置的 URL 地址 ``` \ No newline at end of file diff --git a/docs/push/push_apns_deliver_statistics.md b/docs/push/push_apns_deliver_statistics.md index e83e5648a..d6b92a811 100644 --- a/docs/push/push_apns_deliver_statistics.md +++ b/docs/push/push_apns_deliver_statistics.md @@ -70,13 +70,13 @@ APNs 的送达统计 SDK 下载地址: 在 **NotificationService.m** 里引入头文件: -```objective-c +```objectivec #import ``` 在系统提供处理推送的方法里调用 EMPushServiceExt 的两个方法,这两个方法必须都调用,且设置 Appkey的方法需要先调用。 -```objective-c +```objectivec - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; diff --git a/docs/push/push_integration_note_ios.md b/docs/push/push_integration_note_ios.md index 488f8b057..6e4890d75 100644 --- a/docs/push/push_integration_note_ios.md +++ b/docs/push/push_integration_note_ios.md @@ -69,7 +69,7 @@ demo 中的 SDK 文件夹为 **Hyphenate SDK**,将 SDK 文件夹拖入到工 第 2 步:在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。 -```objective-c +```objectivec - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //AppKey:注册的 AppKey,详细见下面注释。 @@ -102,7 +102,7 @@ demo 中的 SDK 文件夹为 **Hyphenate SDK**,将 SDK 文件夹拖入到工 登录:调用 SDK 的登录接口进行的操作。建议使用异步登录方法,防止网络不好的情况下,出现卡 UI 主线程的情况出现。 -```objective-c +```objectivec [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111" completion:^(NSString *aUsername, EMError *aError) { if (!aError) { NSLog(@"登录成功"); @@ -118,7 +118,7 @@ demo 中的 SDK 文件夹为 **Hyphenate SDK**,将 SDK 文件夹拖入到工 ##### 1.注册开启推送通知 -```objective-c +```objectivec if (NSClassFromString(@"UNUserNotificationCenter")) { //注册推送,用于 iOS 10 及以上版本。 [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError *error) { @@ -154,7 +154,7 @@ if (NSClassFromString(@"UNUserNotificationCenter")) { 如果是 iOS 13 及以上的系统,请将 SDK 更新至 v3.6.4 或以上版本。 ::: -```objective-c +```objectivec // 将获得的 deviceToken 传给 SDK。 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { @@ -166,7 +166,7 @@ if (NSClassFromString(@"UNUserNotificationCenter")) { 3.开启环信推送处理 -```objective-c +```objectivec [[EMLocalNotificationManager sharedManager] launchWithDelegate:self]; ``` @@ -178,7 +178,7 @@ if (NSClassFromString(@"UNUserNotificationCenter")) { 实现以下两个代理,通过 completionHandler 您可以更改通知方式: -```objective-c +```objectivec - (void)emuserNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { NSDictionary *userInfo = notification.request.content.userInfo; @@ -206,7 +206,7 @@ if (NSClassFromString(@"UNUserNotificationCenter")) { 通过下面代理获取推送相关信息: -```objective-c +```objectivec //如果需要获取数据,只实现这一个代理方法即可。 - (void)emGetNotificationMessage:(UNNotification *)notification state:(EMNotificationState)state { @@ -229,7 +229,7 @@ if (NSClassFromString(@"UNUserNotificationCenter")) { 推送通知透传消息获取 -```objective-c +```objectivec //当应用收到环信推送透传消息时,此方法会被调用。 - (void)emDidReceivePushSilentMessage:(NSDictionary *)messageDic { @@ -241,7 +241,7 @@ if (NSClassFromString(@"UNUserNotificationCenter")) { iOS 的本地通知管理模块 `UNUserNotificationCenter` 是单例,一个 App 中只能有一个实例。如果在启用 SDK 在线推送后,App 又重写了 `[UNUserNotificationCenter currentNotificationCenter].delegate`,会将 SDK 中的 delegate 覆盖,此时,需要在 App 实现的 `UNUserNotificationCenterDelegate` 中调用 SDK 的相关处理,过程如下: -```objective-c +```objectivec - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { [[EMLocalNotificationManager sharedManager] userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler]; diff --git a/docs/push/push_integration_process_ios.md b/docs/push/push_integration_process_ios.md index 66d0911af..992178fdf 100644 --- a/docs/push/push_integration_process_ios.md +++ b/docs/push/push_integration_process_ios.md @@ -61,13 +61,13 @@ pod install #### 1. 引入头文件 -```objective-c +```objectivec #import ``` #### 2. 初始化 EMPush -```objective-c +```objectivec EMPushClientOptions *option = [EMPushClientOptions optionsWithAppkey:@"appkey"]; option.enableConsoleLog = YES; option.isAutoLogin = YES; @@ -82,7 +82,7 @@ option.apnsCertName = @"apnsname"; 强烈建议开发者通过后台调用 REST 接口去注册环信 ID,不建议使用客户端注册。 -```objective-c +```objectivec [EMPushClient registerWithUsername:@"name" password:@"pswd" completion:^(NSString *aUsername, EMError *aError) { if (!aError) { // 注册完成。 @@ -94,7 +94,7 @@ option.apnsCertName = @"apnsname"; #### 4. 连接服务器 -```objective-c +```objectivec [EMPushClient connectWithUsername:name password:pswd completion:^(NSString *aUsername, EMError *aError) { if (!aError) { // 连接到服务器。 @@ -106,7 +106,7 @@ option.apnsCertName = @"apnsname"; #### 5. 断开服务器连接 -```objective-c +```objectivec [EMPushClient disConnect:YES completion:^(EMError *aError) { if (!aError) { // 断开服务器连接。 @@ -120,6 +120,6 @@ option.apnsCertName = @"apnsname"; 添加代理的类必须实现 `EMClientDelegate`,进行代理实现。 -```objective-c +```objectivec [EMPushClient addConnectDelegate:self delegateQueue:nil]; ``` \ No newline at end of file diff --git a/docs/uikit/chatuikit/ios/ui_historic.md b/docs/uikit/chatuikit/ios/ui_historic.md index 3a145ddd6..9c71830aa 100644 --- a/docs/uikit/chatuikit/ios/ui_historic.md +++ b/docs/uikit/chatuikit/ios/ui_historic.md @@ -87,13 +87,13 @@ EaseIMKit 中包含了拍照,发语音,发图片,发视频,发位置, 第 1 步:引入相关头文件 -```objective-c +```objectivec #import ``` 第 2 步:在在工程的 AppDelegate 中的以下方法中调用 EaseIMKitManager 的初始化方法一并初始化环信 SDK。(注: 此方法不需要重复调用) -```objective-c +```objectivec - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. EMOptions *options = [EMOptions optionsWithAppkey:@"您的APPKEY"]; @@ -109,7 +109,7 @@ EaseIMKitManager 主要包含系统通知(好友申请,群邀请/申请) #### 是否需要系统通知 -```objective-c +```objectivec /*! @method @brief 是否需要系统通知:好友/群 申请等 @@ -121,7 +121,7 @@ EaseIMKitManager 主要包含系统通知(好友申请,群邀请/申请) #### 收到系统通知所展示信息回调接口 -```objective-c +```objectivec /*! @method @brief 收到请求返回展示信息 @@ -141,7 +141,7 @@ EaseIMKitManager 主要包含系统通知(好友申请,群邀请/申请) #### 收到系统通知扩展信息回调接口 -```objective-c +```objectivec /*! @method @brief 收到请求返回扩展信息 @@ -159,7 +159,7 @@ EaseIMKitManager 主要包含系统通知(好友申请,群邀请/申请) #### 未读总数变化回调接口 -```objective-c +```objectivec /*! @method @brief 会话未读总数变化。 @@ -174,13 +174,13 @@ EaseIMKitManager 主要包含系统通知(好友申请,群邀请/申请) 导入 EaseIMKit 头文件 -```objective-c +```objectivec #import ``` EaseIMKit 提供现成的聊天会话 ViewController,可以通过创建 EaseChatViewController 对象实例,嵌入进自己的聊天控制器方式(参考 EaseIM 中 EMChatViewController)实现对 EaseIMKit 聊天会话的集成。 创建聊天会话页实例,需传递用户‘环信 ID’或‘群 ID’ ,会话类型(EMConversationType)以及必须传入聊天视图配置数据模型 EaseChatViewModel 实例。 -```objective-c +```objectivec EaseChatViewModel *viewModel = [[EaseChatViewModel alloc]init]; EaseChatViewController *chatController = [EaseChatViewController initWithConversationId:@"custom" conversationType:EMConversationTypeChat @@ -192,7 +192,7 @@ chatController.view.frame = self.view.bounds; 聊天控制器嵌入自己的聊天页后还需传入消息列表 messageList 以供 EaseChatViewController 展示使用 -```objective-c +```objectivec //isScrollBottom 是否滑动到页面底部 - (void)loadData:(BOOL)isScrollBottom { @@ -213,13 +213,13 @@ chatController.view.frame = self.view.bounds; 导入 EaseIMKit 头文件 -```objective-c +```objectivec #import ``` 在自己聊天控制器内可嵌入 EaseIMKit 的会话列表页,创建会话列表实例,实例化会话列表必须传入会话列表视图数据配置模型 EaseConversationViewModel 实例。 -```objective-c +```objectivec EaseConversationViewModel *viewModel = [[EaseConversationViewModel alloc] init]; EaseConversationsViewController *easeConvsVC = [[EaseConversationsViewController alloc] initWithModel:viewModel]; @@ -235,13 +235,13 @@ easeConvsVC.delegate = self; 导入 EaseIMKit 头文件 -```objective-c +```objectivec #import ``` 在自己聊天控制器内可嵌入 EaseIMKit 的会话列表页,创建通讯录实例,必须传入通讯录视图数据模型 EaseContactsViewModel 实例以构建通讯录 UI 界面。 -```objective-c +```objectivec EaseContactsViewModel *model = [[EaseContactsViewModel alloc] init]; EaseContactsViewController *contactsVC = [[EaseContactsViewController alloc] initWithModel:model]; //通讯录头部功能区(加好友/群聊/聊天室 入口) @@ -276,7 +276,7 @@ contactsVC.delegate = self; 聊天会话可配置参数如下: -```objective-c +```objectivec @property (nonatomic, strong) UIColor *chatViewBgColor; //聊天页背景色 @property (nonatomic, strong) UIColor *chatBarBgColor; //输入区背景色 @property (nonatomic, strong) EaseExtFuncModel *extFuncModel; //输入区扩展功能数据模型 @@ -296,7 +296,7 @@ contactsVC.delegate = self; 其中参数:EaseExtFuncModel 输入区扩展功能数据配置模型(聊天会话页相机,相册,音视频等区域)内含可配参数: -```objective-c +```objectivec @property (nonatomic, strong) UIColor *iconBgColor;//图标所在 view 背景色 @property (nonatomic, strong) UIColor *viewBgColor;//视图背景色 @property (nonatomic, strong) UIColor *fontColor;//字体颜色 @@ -306,7 +306,7 @@ contactsVC.delegate = self; 其中参数:inputBarStyle(输入区)包含五种类型: -```objective-c +```objectivec typedef NS_ENUM(NSInteger, EaseInputBarStyle) { EaseInputBarStyleAll = 1, //全部功能 EaseInputBarStyleNoAudio, //无语音 @@ -318,7 +318,7 @@ typedef NS_ENUM(NSInteger, EaseInputBarStyle) { 其中参数:EaseAlignmentStyle (消息排列方式,仅群聊可生效)包含两种类型 -```objective-c +```objectivec typedef enum { EaseAlignmentNormal = 1, //左右排列 EaseAlignmentlLeft, //居左排列 @@ -327,7 +327,7 @@ typedef enum { 实例化的聊天控制器可通过重置视图 UI 配置模型刷新页面 -```objective-c +```objectivec //重置聊天控制器 - (void)resetChatVCWithViewModel:(EaseChatViewModel *)viewModel; ``` @@ -352,7 +352,7 @@ typedef enum { 会话列表可配置参数如下: -```objective-c +```objectivec @property (nonatomic) EaseAvatarStyle avatarType; // 头像样式 @property (nonatomic, strong) UIImage *defaultAvatarImage; // 默认头像 @property (nonatomic) CGSize avatarSize; // 头像尺寸 @@ -377,7 +377,7 @@ typedef enum { 会话列表以及联系人列表共用其父类可配置参数如下: -```objective-c +```objectivec @property (nonatomic) BOOL canRefresh; // 是否可下拉刷新 @property (nonatomic, strong) UIView *bgView; // tableView 背景图 @property (nonatomic, strong) UIColor *cellBgColor; // UITableViewCell 背景色 @@ -389,7 +389,7 @@ typedef enum { 通讯录可配置参数如下: -```objective-c +```objectivec @property (nonatomic) EaseAvatarStyle avatarType; // 头像样式 @property (nonatomic, strong) UIImage *defaultAvatarImage; // 默认头像 @property (nonatomic) CGSize avatarSize; // 头像尺寸 @@ -407,7 +407,7 @@ typedef enum { 以及通讯录和会话列表共用的参数配置 -```objective-c +```objectivec @property (nonatomic) BOOL canRefresh; // 是否可下拉刷新 @property (nonatomic, strong) UIView *bgView; // tableView 背景图 @property (nonatomic, strong) UIColor *cellBgColor; // UITableViewCell 背景色 @@ -431,7 +431,7 @@ EaseChatViewControllerDelegate 下拉加载更多消息回调(可得到当前第一条消息 ID 作为下次加载更多消息的参考 ID;当前消息列表) -```objective-c +```objectivec /** * 下拉加载更多消息回调 * @@ -445,7 +445,7 @@ EaseChatViewControllerDelegate 通过实现聊天控制回调获取自定义消息 cell,根据 messageModel,用户自己判断是否显示自定义消息 cell。如果返回 nil 会显示默认;如果返回 cell 会显示用户自定义消息 cell。 -```objective-c +```objectivec /*! @method @brief 获取消息自定义 cell @@ -459,7 +459,7 @@ EaseChatViewControllerDelegate 具体创建自定义 Cell 的示例: -```objective-c +```objectivec //自定义通话记录cell - (UITableViewCell *)cellForItem:(UITableView *)tableView messageModel:(EaseMessageModel *)messageModel { @@ -482,7 +482,7 @@ EaseChatViewControllerDelegate 选中消息的回调(EaseIMKit 没有对于自定义 cell 的选中事件回调,需用户自定义实现选中响应) -```objective-c +```objectivec /*! @method @brief 消息点击事件 @@ -496,7 +496,7 @@ EaseChatViewControllerDelegate EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实现,例:EaseIM 单聊通话记录 cell 点击事件再次发起通话 -```objective-c +```objectivec - (void)messageCellDidSelected:(EMMessageCell *)aCell { //使用‘通知’的方式发起通话,其中所定义的宏仅在 EaseIM APP 中生效 @@ -517,7 +517,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 用户资料回调(头像昵称等) -```objective-c +```objectivec /*! @method @brief 返回用户资料 @@ -530,7 +530,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 #### 用户选中头像的回调 -```objective-c +```objectivec /*! @method @brief 点击消息头像 @@ -543,7 +543,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 获取用户选中头像回调的样例: -```objective-c +```objectivec //头像点击 - (void)avatarDidSelected:(id)userData { @@ -558,7 +558,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 #### 用户长按头像的回调 -```objective-c +```objectivec /*! @method @brief 点击消息头像 @@ -571,7 +571,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 #### 群通知回执详情 -```objective-c +```objectivec /*! @method @brief 群通知回执详情 @@ -585,7 +585,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 获取用户点击群通知回执详情的样例: -```objective-c +```objectivec //群通知阅读回执详情 - (void)groupMessageReadReceiptDetail:(EMMessage *)message groupId:(NSString *)groupId { @@ -600,7 +600,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 当前会话输入扩展区数据模型组(UI 配置可在聊天视图配置数据模型中设置) -```objective-c +```objectivec /*! @method @brief 当前会话输入扩展区数据模型组 @@ -616,7 +616,7 @@ EaseIMKit 选中是消息气泡,自定义 cell 的点击事件需自定义实 当前会话输入扩展区数据模型组回调示例(EaseIM APP 有效): -```objective-c +```objectivec - (NSMutableArray *)inputBarExtMenuItemArray:(NSMutableArray *)defaultInputBarItems conversationType:(EMConversationType)conversationType { NSMutableArray *menuArray = [[NSMutableArray alloc]init]; @@ -654,7 +654,7 @@ return menuArray; #### 键盘输入变化回调 -```objective-c +```objectivec /*! @method @brief 输入区键盘输入变化回调 例:@群成员 @@ -665,7 +665,7 @@ return menuArray; 输入区键盘回调示例(EaseIM APP 有效): -```objective-c +```objectivec //@群成员 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { @@ -700,7 +700,7 @@ return menuArray; #### 输入框选中回调 -```objective-c +```objectivec /** * 输入区选中范围变化回调 例:@群成员 */ @@ -709,7 +709,7 @@ return menuArray; 输入区选中范围变化回调示例(EaseIM APP 有效): -```objective-c +```objectivec - (void)textViewDidChangeSelection:(UITextView *)textView { [textView.attributedText enumerateAttributesInRange:NSMakeRange(0, textView.text.length) options:0 usingBlock:^(NSDictionary * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) { @@ -739,7 +739,7 @@ return menuArray; 对方正在输入状态回调(单聊有效) -```objective-c +```objectivec /** 对方正在输入 */ @@ -748,7 +748,7 @@ return menuArray; 对方结束输入回调(单聊有效) -```objective-c +```objectivec /** 对方结束输入 */ @@ -759,7 +759,7 @@ return menuArray; 默认消息 cell 长按回调 -```objective-c +```objectivec /*! @method @brief 默认消息 cell 长按回调 @@ -772,7 +772,7 @@ return menuArray; 默认消息 cell 长按回调示例(EaseIM APP 有效): -```objective-c +```objectivec //添加转发消息 - (NSMutableArray *)messageLongPressExtMenuItemArray:(NSMutableArray *)defaultLongPressItems message:(EMMessage *)message { @@ -796,7 +796,7 @@ return menuArray; 用户自定义消息 cell 长按事件回调 -```objective-c +```objectivec /*! @method @brief 当前所长按的 自定义 cell 的扩展区数据模型组 @@ -823,7 +823,7 @@ return menuArray; 通过实现会话列表回调获取自定义消息 cell 如果返回 nil 会显示默认;如果返回 cell 则会显示用户自定义 cell。 -```objective-c +```objectivec /*! @method @brief 获取消息自定义 cell @@ -837,7 +837,7 @@ return menuArray; #### 会话列表 cell 选中回调 -```objective-c +```objectivec /*! @method @brief 会话列表 cell 选中回调 @@ -849,7 +849,7 @@ return menuArray; 会话列表 cell 选中回调示例(EaseIM APP 有效): -```objective-c +```objectivec - (void)easeTableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { EaseConversationCell *cell = (EaseConversationCell*)[tableView cellForRowAtIndexPath:indexPath]; @@ -867,7 +867,7 @@ return menuArray; #### 会话列表用户资料回调 -```objective-c +```objectivec /*! @method @brief 会话列表用户资料回调 @@ -881,7 +881,7 @@ return menuArray; 会话列表用户资料回调实例(EaseIM APP 有效) -```objective-c +```objectivec - (id)easeUserDelegateAtConversationId:(NSString *)conversationId conversationType:(EMConversationType)type { //EMConversationUserDataModel 为自定义用户资料数据模型,实现 EaseUserDelegate 接口返回参数 @@ -894,7 +894,7 @@ return menuArray; #### 会话列表 cell 侧滑项回调 -```objective-c +```objectivec /*! @method @brief 会话列表 cell 侧滑项回调 @@ -909,7 +909,7 @@ return menuArray; 会话列表 cell 侧滑项回调示例(EaseIM APP 有效) -```objective-c +```objectivec - (NSArray *)easeTableView:(UITableView *)tableView trailingSwipeActionsForRowAtIndexPath:(NSIndexPath *)indexPath actions:(NSArray *)actions { NSMutableArray *array = [[NSMutableArray alloc]init]; @@ -934,7 +934,7 @@ return menuArray; 获取用户自己的联系人列表填充到 EaseIMKit 通讯录中 -```objective-c +```objectivec - (void)setContacts:(NSArray * _Nonnull)contacts; ``` @@ -944,13 +944,13 @@ EaseConversationsViewControllerDelegate #### 即将刷新通讯录填充数据 -```objective-c +```objectivec - (void)willBeginRefresh; ``` 即将刷新通讯录填充数据示例(EaseIM APP 有效): -```objective-c +```objectivec - (void)willBeginRefresh { //从服务器获取当前登录账户的联系人列表 [EMClient.sharedClient.contactManager getContactsFromServerWithCompletion:^(NSArray *aList, EMError *aError) { @@ -972,7 +972,7 @@ EaseConversationsViewControllerDelegate #### 通讯录自定义 cell -```objective-c +```objectivec /*! @method @brief 获取通讯录自定义 cell @@ -986,7 +986,7 @@ EaseConversationsViewControllerDelegate #### 通讯录 cell 条目选中回调 -```objective-c +```objectivec /*! @method @brief 通讯录 cell 条目选中回调 @@ -999,7 +999,7 @@ EaseConversationsViewControllerDelegate 通讯录 cell 条目选中回调示例: -```objective-c +```objectivec - (void)easeTableView:(UITableView *)tableView didSelectRowAtContactModel:(EaseContactModel *)contact { //跳转加好友页 if ([contact.easeId isEqualToString:@"newFriend"]) { @@ -1024,7 +1024,7 @@ EaseConversationsViewControllerDelegate #### 通讯录 cell 侧滑回调 -```objective-c +```objectivec /*! @method @brief 会话列表 cell 侧滑项回调 @@ -1039,7 +1039,7 @@ EaseConversationsViewControllerDelegate 通讯录 cell 侧滑回调示例: -```objective-c +```objectivec - (NSArray *)easeTableView:(UITableView *)tableView trailingSwipeActionsForRowAtContactModel:(EaseContactModel *)contact actions:(NSArray *)actions { //通讯录头部非联系人列表禁止侧滑