环信即时通讯 IM Demo 提供用户登录、单聊、群组、子区、消息(文字、表情、语音、视频、图片、文件等)发送及管理、会话管理、好友管理、用户属性、用户在线状态(Presence)以及实时音视频通话等功能。
你可以进入 环信官网 体验即时通讯 IM Demo。
- Android Studio Flamingo | 2022.2.1 及以上
- Gradle 8.0 及以上
- targetVersion 33 及以上
- Android SDK API 21 及以上
- JDK 17 及以上
- 创建应用。
- 获取应用的 App Key。
- 创建用户。
- 下载即时通讯 IM Demo 项目源码。
- 下载完毕,打开 Android Studio,点击 File > Open,打开已下载到本地的 Demo (
easemob-demo-android
) 工程根目录即可。 - 将你的应用的 App Key 填入 Demo 工程根目录下的
local.properties
文件,格式为APPKEY = 你申请的appkey
。 - 编译运行项目。
- 使用注册的用户 ID 和密码登录。
为方便开发者快速体验即时通讯 IM 功能,跑通本工程 Demo 源码默认使用开发者注册的用户 ID 和密码直接登录,不需要依赖部署服务端 App Server。但是在此模式下,手机验证码、用户头像和 EaseCallKit 实时音视频等相关功能不可用,你可以通过部署 App Server 完整体验这些功能。
App Server 为 Demo 提供以下功能:
- 通过手机号获取验证码。
- 通过手机号和验证码返回环信用户 ID 和环信用户 Token。
- 上传头像并返回地址。
- 根据用户的信息生成 EaseCallKit 登录所需的 Token。
- 获取音视频通话时环信用户 ID 和 Agora UID 的映射关系。
你通过以下步骤部署 App Server:
- 部署 App Server。详见 服务端源码。
- 在 Demo 工程根目录下
local.properties
文件中,填写 App Server 的域名或 IP 地址,格式为APP_SERVER_DOMAIN = 服务器域名或ip地址
。 - 在 Demo 工程根目录下
local.properties
文件中,填入LOGIN_WITH_APPSERVER = true
,即通知 Demo 工程需要启用 App Server,体验完整功能。
服务端中的 App Key 要跟客户端的 App Key 保持一致。
└── com
└── hyphenate
└── chatdemo
├── DemoApplication.kt //程序入口
├── DemoHelper.kt //app 帮助类
├── MainActivity.kt //主页面
├── base //包含一些基类
│ ├── ActivityState.kt
│ ├── BaseDialogFragment.kt //一些弹窗基类
│ ├── BaseInitActivity.kt //activity 基类
│ ├── ErrorCode.kt //一些常用的错误码
│ └── UserActivityLifecycleCallbacks.kt
├── bean //一些序列化 bean 类
├── callkit
│ ├── CallKitActivityLifecycleCallback.kt //callkit 中 activity 的生命周期监听回调类
│ ├── CallKitManager.kt //callkit 管理类
│ ├── CallUserInfo.kt
│ ├── ConferenceInviteActivity.kt
│ ├── ConferenceInviteAdapter.kt
│ ├── ConferenceInviteFragment.kt
│ ├── ConferenceMemberSelectViewHolder.kt
│ ├── MultipleVideoActivity.kt //多人音视频页面
│ ├── VideoCallActivity.kt //单人音视频页面
│ ├── extensions //callkit 一些扩展函数类
│ ├── viewholder //单聊、群聊 call 消息提醒类型适配器,包含一些事件处理
│ └── views //单聊、群聊 call 消息提醒类型布局
├── common //app 的一些的公共类
│
├── controller
│ └── PresenceController.kt //presence 相关的管理类
├── interfaces //包含一些接口标准类
├── repository // app 的数据仓库
├── ui
│ ├── chat
│ │ ├── ChatActivity.kt //单群聊聊天页面 activity
│ │ ├── ChatFragment.kt //单群聊聊天页面 fragment
│ │ └── CustomMessagesAdapter.kt //自定义消息适配器
│ ├── contact
│ │ ├── ChatContactCheckActivity.kt //检查是否是联系人页面
│ │ ├── ChatContactDetailActivity.kt //联系人详情页面
│ │ ├── ChatContactListFragment.kt //联系人列表页面
│ │ ├── ChatContactRemarkActivity.kt //联系人(好友)备注页面
│ │ └── ChatNewRequestActivity.kt //联系人页面新请求 item
│ ├── conversation
│ │ └── ConversationListFragment.kt //会话列表页面
│ ├── group
│ │ ├── ChatCreateGroupActivity.kt //创建群组页面
│ │ └── ChatGroupDetailActivity.kt //群组详情页面
│ ├── login
│ │ ├── LoginActivity.kt //登录页面 activity
│ │ ├── LoginFragment.kt //登录页面 fragment
│ │ ├── ServerSetFragment.kt
│ │ └── SplashActivity.kt //启动页
│ └── me //我的界面里相关按钮对应的页面
│ ├── AboutActivity.kt
│ ├── AboutMeFragment.kt //关于我页面
│ ├── CurrencyActivity.kt //通用设置页面,设置暗黑模式、语言、样式等
│ ├── EditUserNicknameActivity.kt // 修改用户昵称页面
│ ├── FeaturesActivity.kt
│ ├── LanguageSettingActivity.kt
│ ├── NotifyActivity.kt
│ ├── StyleSettingActivity.kt
│ ├── UserInformationActivity.kt
│ ├── WebViewActivity.kt
│ └── controller
├── uikit
│ └── UIKitManager.kt //UIKit 管理类
├── utils //工具类
└── viewmodel //包含一些 ViewModel 类
模块 | 描述 |
---|---|
DemoHelper | 环信(Demo)全局帮助类,主要功能为初始化 IM SDK,初始化 ChatUIKit 、EaseCallKit 相关及注册对话类型等。 |
ConversationListFragment | 继承自 ChatUIKit 中的 ChatUIKitConversationListFragment ,展示当前用户的所有会话,包含单聊和群组聊天(不包括聊天室),并且提供会话搜索、删除、置顶和免打扰功能 |
ChatActivity 及 ChatFragment | ChatActivity 继承自 ChatUIKit 中的 UIKitChatActivity ,主要进行了权限的请求,比如相机权限,语音权限等。ChatFragment 继承自 ChatUIKit 中的 UIKitChatFragment ,该页面提供如下功能:1、发送和接收消息, 包括文本、表情、图片、语音、视频、文件和名片消息。2、对消息进行复制、引用、撤回、删除、编辑、重新发送和审核。3、清除本地消息。 |
ChatContactListFragment | 继承自 ChatUIKit 中的 ChatUIKitContactsListFragment ,用于展示通讯录列表,包括联系人搜索,添加联系人,好友申请列表入口,群组列表入口,联系人列表。 |
ChatGroupDetailActivity | 继承自 ChatUIKit 中的 ChatUIKitGroupDetailActivity ,实现了如下功能:群成员管理,群属性管理,上传共享文件,设置消息免打扰,解散或者退出群组等。 |
模块 | 描述 |
---|---|
聊天模块 | 展示如何依赖 ChatUIKit 实现聊天页面,如何发送消息、消息管理、扩展消息类型及如何增加扩展菜单等的逻辑。 |
会话列表模块 | 展示如何依赖 ChatUIKit 实现会话列表的逻辑及实现系统消息的具体逻辑。 |
联系人模块 | 展示如何依赖 ChatUIKit 实现联系人列表的逻辑。 |
我的模块 | 账户管理、用户状态管理及APP的一些功能样式设置 |
开发者模块 | 展示 IM SDK 提供的一些常规的开发者可以设置的功能。 |
Demo 里会话列表、聊天界面、联系人列表及后续界面均继承或直接使用环信 ChatUIKit 里提供的模块。
关于 ChatUIKit 详情,请参见 环信官网 ChatUIKit 文档。
Demo 里音视频页面继承自环信 EaseCallKit 提供的单人/多人音视频聊天模块。
关于音视频通话 EaseCallKit 库,请参见 环信官网 EaseCallKit 文档。
关于 Demo 的设计,详见 设计文档 。
- UserProvider 以及 GroupProvider 需要用户自己实现,用于获取用户的展示信息以及群组的简要展示信息,如果不实现默认用 ID 以及默认头像。
- 换设备或者多设备登录,漫游的会话列表,环信 SDK 中没有本地存储的群头像名称等显示信息,需要用户使用 Provider 提供给 UIKit 才能正常显示。
- 由于 Provider 的机制是停止滚动或者第一页不满 10 条数据时触发,所以更新会话列表以及联系人列表 UI 显示的昵称头像需要滑动后 Provider 提供给 UIKit 数据后,UIKit会刷新 UI。
如有问题请联系环信技术支持或者发邮件到 [email protected]。