Skip to content

Commit

Permalink
Merge pull request #1075 from haoxiuwen/doc-v2
Browse files Browse the repository at this point in the history
Add Android UIKit 4.10.0
  • Loading branch information
haoxiuwen authored Dec 6, 2024
2 parents 4d86711 + 91d9d5d commit 7d727d6
Show file tree
Hide file tree
Showing 27 changed files with 603 additions and 462 deletions.
Binary file modified docs/.vuepress/public/images/demo/android_login.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
93 changes: 55 additions & 38 deletions docs/document/android/demo.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,50 +16,67 @@

您可以通过以下两种方式获取到源代码:
- 下载代码压缩包:[IM SDK 及 Demo 下载](https://www.easemob.com/download/im)
- 下载源代码:[github源码地址](https://github.com/easemob/chat-android)
- 下载源代码:[GitHub 源码地址](https://github.com/easemob/easemob-demo-android)
- 4.5.0 及之前版本的 Demo 为 Java 语言。点击[这里](https://github.com/easemob/chat-android)查看 Demo 源码地址。环信已不再维护该地址的 Demo 源码。
- 4.6.0 及之后版本的 Demo 为 Kotlin 语言。点击[这里](https://github.com/easemob/easemob-demo-android)查看 Demo 源码地址。

## 导入 EaseIM

[IM SDK 及 Demo 下载](https://www.easemob.com/download/im) 下载 Android SDK 压缩包,然后解压。解压后在 examples 文件夹下,即为 EaseIM 的工程目录。
[IM SDK 及 Demo 下载](https://www.easemob.com/download/im) 下载 Android SDK 压缩包,然后解压。解压后在 `examples` 文件夹下,即为 EaseIM 的工程目录。

### 导入到 Android Studio
打开 Android Studio,点击 File > Open,打开 EaseIm3.0 根目录即可。
:::notice
环信(EaseIM)中使用了百度地图,在开发你自己的应用时,请在 AndroidManifest.xml 中把相应的 key 改成你自己申请的。
:::
### 导入到 Eclipse
点击 File→Import→点击 Android 下的子目录→Next→选择输入 EaseIm3.0 的根路径→Finish。
## 用到的第三方库
- androidx.appcompat:appcompat:appcompat 库(对应以前的 appcompat-v7 库)必须添加;
- com.google.android.material:material:material 库(对应以前的 design 库),如果用到 TabLayout,CardView 等 material degign 控件时需要添加;
- androidx.constraintlayout:constraintlayout:constraintlayout 布局,如果没有用到可以不用添加;
- androidx.lifecycle:lifecycle-extensions:ViewModel 和 LiveData 库,如果没有用到可以不用添加;
- com.android.support:multidex:工程总方法数超过 64k 时,需要用这个库做分包处理,可以删除;
- play-services-base和firebase-messaging:谷歌推送所需要的库,如果不用该推送可以不用添加;
- com.scwang.smartrefresh:SmartRefreshLayout:下拉刷新及上拉加载更多库,可以不用添加;
- androidx.swiperefreshlayout:swiperefreshlayout:下拉刷新库,可以不用添加;
- androidx.room:android 数据库,可以不用添加;
- com.huawei.hms:push:华为推送所需要的库,如果不用该推送可以不用添加;
- com.meizu.flyme.internet:push-internal:魅族推送所需要的库,如果不用该推送可以不用添加;
- vivo_push_v2.3.1.jar: vivo 推送所需要的库,如果不用该推送可以不用添加;
- oppo_push_v2.1.0jar: oppo 推送所需要的库,如果不用该推送可以不用添加;
- mi_push_v3.6.12.jar: 小米推送所需要的库,如果不用该推送可以不用添加;
- bolts-android-1.2.0.jar、Parse-1.9.4.jar:Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中。

打开 Android Studio,点击 `File > Open`,打开 `examples/EaseIm3.0` 根目录即可。

## 使用的第三方库

| 第三方库 | 描述 |
| :------------------- | :------------- |
| `androidx.core:core-ktx:1.10.1` | Kotlin 库。 |
| `org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3` | Kotlin 协程库。 |
| `org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3` | Kotlin 协程库。 |
| `androidx.appcompat:appcompat` | `appcompat` 库,对应以前的 `appcompat-v7` 库。 |
| `com.google.android.material:material:material` | 对应以前的 design 库。如果用到 TabLayout、CardView 等 Material Design 控件时需要添加。 |
| `androidx.constraintlayout:constraintlayout` | constraintlayout 布局。 |
| `androidx.lifecycle:lifecycle-runtime-ktx` | lifecycle 库。 |
| `androidx.lifecycle:lifecycle-viewmodel-ktx` | ViewModel 和 lifecycle 库。 |
| `com.android.support:multidex` | 工程总方法数超过 64 KB 时,需要用这个库做分包处理。 |
| `play-services-base和firebase-messaging` | 谷歌推送所需要的库,使用 FCM 推送时需要添加。 |
| `com.scwang.smartrefresh:SmartRefreshLayout` | 下拉刷新及上拉加载更多库。 |
| `androidx.swiperefreshlayout:swiperefreshlayout` | 下拉刷新库。|
| `androidx.room` | Android 数据库。 |
| `com.huawei.hms:push` | 华为推送所需要的库。 |
| `com.meizu.flyme.internet:push-internal` | 魅族推送所需要的库。 |
| `vivo_push_v4.0.4.0_504.aar` | vivo 推送所需要的库。 |
| `oppo_push_3.5.2.aar` | OPPO 推送所需要的库。 |
| `MiPush_SDK_Client_6_0_1-C_3rd.aar` | 小米推送所需要的库。 |
| `com.hihonor.mcs:push` | 7.0.61.303 荣耀推送所需要的库。 |

## 主要模块介绍
- **聊天模块** – 主要展示了如何依赖 EaseIMKit 实现聊天列表,如何扩展消息类型及如何增加扩展菜单等的逻辑。
- **会话列表模块** – 主要展示了如何依赖 EaseIMKit 实现会话列表的逻辑及实现系统消息的具体逻辑。
- **联系人模块** – 主要展示了如何依赖 EaseIMKit 实现联系人列表的逻辑。
- **聊天设置模块** – 主要展示了 IM SDK 提供的对于群聊及聊天室的对成员及群组属性的操作。
- **设置模块** – 主要展示了 IM SDK 对于新消息的设置及消息免打扰,群组等通用设置。
- **开发者模块** – 主要展示了 IM SDK 提供的一些常规的开发者可以设置的功能。

| 模块 | 描述 |
| :------------------- | :----- |
| 聊天模块 | 展示如何依赖 EaseIMKit 实现聊天列表,如何扩展消息类型及如何增加扩展菜单等的逻辑。 |
| 会话列表模块 | 展示如何依赖 EaseIMKit 实现会话列表的逻辑及实现系统消息的具体逻辑。 |
| 联系人模块 | 展示如何依赖 EaseIMKit 实现联系人列表的逻辑。 |
| 聊天设置模块 | 展示 IM SDK 提供的对于群聊及聊天室的对成员及群组属性的操作。 |
| 设置模块 | 展示 IM SDK 对于新消息的设置及消息免打扰,群组等通用设置。 |
| 开发者模块 | 展示 IM SDK 提供的一些常规的开发者可以设置的功能。 |

## 主要类介绍
- **DemoHelper**:环信(EaseIM)全局帮助类,主要功能为初始化 IM SDK,初始化 EaseIMKit 相关及注册对话类型等;
- **ConversationListFragment**:继承自 EaseIMKit 中的 EaseConversationListFragment,展示了扩展条目长按事件,在列表前端添加布局及条目点击事件实现等;
- **ChatActivity及ChatFragment**:ChatFragment 继承自 EaseIMKit 中的 EaseChatFragment,展示了扩展条目长按事件,预置条目长按菜单及对重写部分长按事件功能,展示了如何重置及添加更多扩展功能,并展示了实现了头像点击事件及正在输入等事件的相应;
- **ContactListFragment**:继承自 EaseIMKit 中的 EaseContactListFragment,展示了添加头布局,添加条目长按功能及实现条目点击事件等;
- **GroupDetailActivity**:实现了如下功能:添加群成员,修改群公告及群介绍,上传共享文件,进行群组管理,设置消息免打扰及解散或者退出群组等。

| 模块 | 描述 |
| :------------------- | :----- |
| DemoHelper | 环信(EaseIM)全局帮助类,主要功能为初始化 IM SDK,初始化 EaseIMKit 相关及注册对话类型等。 |
| ConversationListFragment | 继承自 EaseIMKit 中的 `ChatUIKitConversationListFragment`,展示扩展条目长按事件,在列表前端添加布局及条目点击事件实现等 |
| ChatActivity及ChatFragment | ChatFragment 继承自 EaseIMKit 中的 UIKitChatFragment,展示了扩展条目长按事件,预置条目长按菜单及对重写部分长按事件功能,展示了如何重置及添加更多扩展功能,并展示了实现了头像点击事件及正在输入等事件的相应。 |
| ChatContactListFragment | 继承自 EaseIMKit 中的 ChatUIKitContactsListFragment,展示了添加头布局,添加条目长按功能及实现条目点击事件等 |
| ChatGroupDetailActivity | 实现了如下功能:添加群成员,修改群公告及群介绍,上传共享文件,进行群组管理,设置消息免打扰及解散或者退出群组等。 |

## 部分 UI 展示
![会话列表](/images/android/app-demo-ui-1.jpeg)
![联系人列表](/images/android/app-demo-ui-2.jpeg)
![聊天页面](/images/android/app-demo-ui-3.jpeg)

<ImageGallery :columns="3">
<ImageItem src="/images/uikit/chatuikit/android/main_chat.png" title="聊天页面" />
<ImageItem src="/images/uikit/chatuikit/android/main_conversation_list.png" title="会话列表" />
<ImageItem src="/images/uikit/chatuikit/android/main_contact_list.png" title="通讯录" />
</ImageGallery>
31 changes: 29 additions & 2 deletions docs/document/android/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

本文介绍如何快速集成环信即时通讯 IM Android SDK 实现单聊。


## 实现原理

下图展示在客户端发送和接收一对一文本消息的工作流程。
Expand Down Expand Up @@ -116,7 +115,9 @@ implementation 'io.hyphenate:hyphenate-sdk-lite:3.7.5' // 精简版,只包含I

#### 方法三:动态加载 .so 库文件

为了减少应用安装包的大小,SDK 提供了 `EMOptions#setNativeLibBasePath` 方法支持动态加载 SDK 所需的 `.so` 文件。以 SDK 4.5.0 为例,`.so` 文件包括 `libcipherdb.so``libhyphenate.so` 两个文件。该功能的实现步骤如下:
为了减少应用安装包的大小,SDK 从 4.5.0 开始提供了 `EMOptions#setNativeLibBasePath` 方法支持动态加载 SDK 所需的 `.so` 文件。以 SDK 4.5.0 为例,`.so` 文件包括 `libcipherdb.so``libhyphenate.so` 两个文件。**从 4.11.0 开始,`.so` 文件还包含 `libaosl.so` 文件。**

该功能的实现步骤如下:

1. 下载最新版本的 SDK 并解压缩。
2. 集成 `hyphenatechat_4.5.0.jar` 到你的项目中。
Expand Down Expand Up @@ -190,6 +191,32 @@ EMClient.getInstance().init(mContext, options);
-dontwarn com.hyphenate.**
```

### 5. 其他集成问题

当同时集成环信 SDK 4.11.0 和声网 RTM SDK 2.2.0 或 RTC SDK 4.3.0 及以上版本时,由于同时包含 `libaosl.so` 库,编译时可能会出现以下错误:

```java
com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'lib/x86/libaosl.so'
```

可在 app 的 `build.gradle` 文件的 Android 节点中添加 `packagingOptions` 节点,指定在构建过程中优先选择第一个匹配的文件:

```java
android {
// ...
packagingOptions {
pickFirst 'lib/x86/libaosl.so'
pickFirst 'lib/x86_64/libaosl.so'
pickFirst 'lib/armeabi-v7a/libaosl.so'
pickFirst 'lib/arm64-v8a/libaosl.so'
}
}
```

然后 Gradle 文件同步,重新构建项目。

如欲了解详情,请点击[这里](https://doc.shengwang.cn/faq/integration-issues/rtm2-rtc-integration-issue)

## 实现单聊

本节介绍如何实现单聊。
Expand Down
9 changes: 9 additions & 0 deletions docs/document/flutter/releasenote.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

<Toc />

## 版本 4.10.0 2024-12-05

- 修复 `fetchSilentModeForConversations` 方法获取会话的免打扰状态失败的问题。
- 修复 iOS `applicationDidEnterBackground``applicationWillEnterForeground` 不执行的问题。

## 版本 4.8.2+1

- 修复 Android 端可能出现的消息格式转换失败。

## 版本 V4.8.2 2024-11-18

- 修复 ios `EMChatManager.searchMsgsByOptions``EMConversation.searchMsgsByOptions` 方法类型不准的问题。
Expand Down
4 changes: 2 additions & 2 deletions docs/document/flutter/thread_message.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ EMClient.getInstance.chatThreadManager.removeEventHandler("UNIQUE_HANDLER_ID");

接收消息的具体逻辑,请参考 [撤回消息](message_recall.html),此处只介绍子区消息和其他消息的区别。

子区有消息撤回时,子区所属群组的所有成员收到 `EMChatThreadEventHandler#onChatThreadUpdated` 事件,子区成员收到 `EMChatEventHandler#onMessagesRecalled` 事件。
子区有消息撤回时,子区所属群组的所有成员收到 `EMChatThreadEventHandler#onChatThreadUpdated` 事件,子区成员收到 `EMChatEventHandler#onMessagesRecalledInfo` 事件。

示例代码如下:

Expand All @@ -111,7 +111,7 @@ EMClient.getInstance.chatThreadManager.addEventHandler(
EMClient.getInstance.chatManager.addEventHandler(
"UNIQUE_HANDLER_ID",
EMChatEventHandler(
onMessagesRecalled: (messages) {},
onMessagesRecalledInfo: (messages) {},
),
);
Expand Down
3 changes: 0 additions & 3 deletions docs/document/react-native/message_recall.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,6 @@ ChatClient.getInstance()

```typescript
let listener = new (class implements ChatMessageEventListener {
onMessagesRecalled(messages: ChatMessage[]): void {
// 该方法已经作废,请使用 `onMessagesRecalledInfo` 替换。
},
onMessagesRecalledInfo(info: Array<ChatRecalledMessageInfo>): void {
// 消息撤回通知,messages 为撤销的消息
},
Expand Down
8 changes: 8 additions & 0 deletions docs/document/react-native/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,14 @@ let listener = new (class s implements ChatConnectEventListener {
onUserAuthenticationFailed?(): void {
// todo: 用户权限问题,被服务器断开。
}
onOfflineMessageSyncStart?(): void {
// todo: 连接成功,开始从服务器拉取离线消息时触发。
// 注意:如果本次登录服务器没有离线消息,不会触发该回调。
}
onOfflineMessageSyncFinish?(): void {
// todo: 离线用户上线后从服务器拉取离线消息结束时触发。
// 注意:如果再拉取离线过程中因网络或其他原因导致连接断开,不会触发该回调。
}
})();
ChatClient.getInstance().removeAllConnectionListener();
ChatClient.getInstance().addConnectionListener(listener);
Expand Down
2 changes: 1 addition & 1 deletion docs/document/react-native/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ const App = () => {
onMessagesRead: messages => {},
onGroupMessageRead: groupMessageAcks => {},
onMessagesDelivered: messages => {},
onMessagesRecalled: messages => {},
onMessagesRecalledInfo: messages => {},
onConversationsUpdate: () => {},
onConversationRead: (from, to) => {},
};
Expand Down
13 changes: 13 additions & 0 deletions docs/document/react-native/releasenote.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@

<Toc />

## 版本 V1.7.0 2024-12-5

### 新增特性

- 依赖的原生 SDK 升级到版本:iOS 4.11.0 和 Android 4.11.0。
- 更新服务器连接状态监听器 `ChatConnectEventListener`,新增 `onOfflineMessageSyncStart``onOfflineMessageSyncFinish` 事件,表示[从服务器拉取离线消息的开始和结束](overview.html#连接状态相关)
- 新增 `ChatManager#getMessageCount` 方法,用于获取数据库中的消息总数。

### 优化

- 更新聊天室监听器 `ChatRoomEventListener`, 作废 `onMuteListAdded`,替换为 `onMuteListAddedV2`
- 更新消息监听器 `ChatMessageEventListener`, 移除作废的接口 `onMessagesRecalled`

## 版本 V1.6.1 2024-9-12

### 修复
Expand Down
10 changes: 4 additions & 6 deletions docs/document/react-native/room_manage.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,16 +188,14 @@ const roomListener: ChatRoomEventListener = new (class
);
}
// 有成员被加入禁言列表。被添加的成员收到该事件。
onMuteListAdded(params: {
onMuteListAddedV2(params: {
roomId: string;
mutes: string[];
expireTime?: string | undefined;
mutes: Record<string, number>;
}): void {
console.log(
`onMuteListAdded:`,
'onMuteListAddedV2:',
params.roomId,
params.mutes,
params.expireTime
params.mutes
);
}
// 有成员被移出禁言列表。被解除禁言的成员会收到该事件。
Expand Down
2 changes: 1 addition & 1 deletion docs/document/react-native/room_members.md
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ ChatClient.getInstance()

#### 添加成员至聊天室禁言列表

仅聊天室所有者和管理员可以调用 `muteChatRoomMembers` 方法将指定成员添加至聊天室禁言列表。被禁言后,该成员和其他未操作的聊天室管理员或聊天室所有者收到 `onMuteListAdded` 回调。
仅聊天室所有者和管理员可以调用 `muteChatRoomMembers` 方法将指定成员添加至聊天室禁言列表。被禁言后,该成员和其他未操作的聊天室管理员或聊天室所有者收到 `onMuteListAddedV2` 回调。

:::notice
聊天室所有者可禁言聊天室所有成员,聊天室管理员可禁言聊天室普通成员。
Expand Down
6 changes: 3 additions & 3 deletions docs/document/react-native/thread_message.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,15 +102,15 @@ ChatClient.getInstance().chatManager.removeAllMessageListener();

接收消息的具体逻辑,请参考 [撤回消息](message_recall.html),此处只介绍子区消息和其他消息的区别。

子区有消息撤回时,子区所属群组的所有成员收到 `ChatMessageEventListener#onChatMessageThreadUpdated` 回调,子区成员收到 `ChatMessageEventListener#onMessagesRecalled` 回调。
子区有消息撤回时,子区所属群组的所有成员收到 `ChatMessageEventListener#onChatMessageThreadUpdated` 回调,子区成员收到 `ChatMessageEventListener#onMessagesRecalledInfo` 回调。

示例代码如下:

```typescript
// 继承并实现 `ChatMessageEventListener`
class ChatMessageEvent implements ChatMessageEventListener {
onMessagesRecalled(messages: ChatMessage[]): void {
console.log(`onMessagesRecalled: `, messages);
onMessagesRecalledInfo(infos: ChatRecalledMessageInfo[]): void {
console.log(onMessagesRecalledInfo: , infos);
}
onChatMessageThreadUpdated(msgThread: ChatMessageThreadEvent): void {
console.log(`onChatMessageThreadUpdated: `, msgThread);
Expand Down
Loading

0 comments on commit 7d727d6

Please sign in to comment.