跳转到主要内容

集成方式

带 UI 的库主要是通过导入代码的方式集成,可以整体集成,也可以模块/组件集成 github源码地址:https://github.com/seastart/meeting-andriod-demo

整体集成

  • 在根目录下的 build.gradle 中,添加 maven
allprojects {
    repositories {
        maven { url 'https://maven.open.seastart.cn/repository/maven-vcs/' }
    }
}
```typescript

+ 引入 StmLink 库
+ 在app目录下的build.gradle中添加依赖

```plain
dependencies {
    implementation project(path: ':StmLink')
}

模块/组件集成

  • 在根目录下的 build.gradle 中,添加 maven
allprojects {
    repositories {
        maven { url 'https://maven.open.seastart.cn/repository/maven-vcs/' }
    }
}
```typescript

+ 在app目录下的build.gradle中添加依赖

```plain
	dependencies {
    implementation 'cn.seastart.meeting:meeting:xxx'
	}
  • 将需要的模块或者组件从 StmLink 库拷贝到项目工程中使用

整体集成

  1. 新建项目,按照《集成方式》文档中整体集成方式导入 StmLink 库
  2. 新建 MyApplication,在 MyApplication 中实现如下代码
override fun onCreate() {
    super.onCreate()
    // 执行库的初始化操作
    SeaStarClient.instance.SSC_Init(this)
    // 注册监听 activity 的生命周期比变化
    registerActivityLifecycleCallbacks(MyLifecycleCallback())
}
```typescript

3. 在 MainActivity 中执行跳转操作,跳转到 StmLink 库中的界面

```kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
        ...
    Handler().postDelayed(
        {
            SeaStarClient.instance.SSC_StartHomeActivity(this@MainActivity)
            finish()
        }, 1000)
}
  1. activity 生命周期变化监听具体实现,其中 LifecycleListener 类是 StmLink 中的内容
class MyLifecycleCallback: Application.ActivityLifecycleCallbacks {

    private val lifecycleListener = LifecycleListener()

    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        lifecycleListener.onActivityCreated(activity, savedInstanceState)
    }

    override fun onActivityStarted(activity: Activity) {
        lifecycleListener.onActivityStarted(activity)
    }

    override fun onActivityResumed(activity: Activity) {
        lifecycleListener.onActivityResumed(activity)
    }

    override fun onActivityPaused(activity: Activity) {
        lifecycleListener.onActivityPaused(activity)
    }

    override fun onActivityStopped(activity: Activity) {
        lifecycleListener.onActivityStopped(activity)
    }

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
        lifecycleListener.onActivitySaveInstanceState(activity, outState)
    }

    override fun onActivityDestroyed(activity: Activity) {
        lifecycleListener.onActivityDestroyed(activity)
    }
}
```typescript

## 模块/组件集成
### 项目结构
模块分类:基础模块、登录模块、会议外信息模块、入会模块、会中模块

```kotlin
stmlink/
├── aboutUs/                # 关于我们
├── activity/               # activity 包
├── authorize/              # 登录和注册模块
│   └── login/                # 登录功能相关
│   └── register/             # 注册功能相关
├── base/                   # BaseActivity 和 BaseFragment
├── contactDetail/          # 联系人详情
├── history/                # 历史会议
├── home/                   # home 页
│   └── contact/              # 联系人列表页
│   └── meet/                 # 待加入会议列表页
│   └── mine/                 # 我的页面
├── http/                   # http 模块
├── inviteMember/           # 邀请成员模块
├── meetDetail/             # 会议详情
├── meeting/                # 会中模块
│   └── chat/                 # 聊天页面
│   └── member/               # 会中成员页面
│   └── room/                 # 会中主页
├── preMeetingRoom/         # 加入会议模块
├── service/                # 服务相关
├── ui/                     # 自定义 UI
├── utils/                  # 工具类
└── webPage/                # 网页相关

基础模块

基础模块包括 SDK 调用入口类、网络请求包、自定义 UI 包、工具类包。

引入

分别将 cn.seastart.stmlink 路径下的 MeetingEngineHelper 文件、http 文件夹、ui 文件夹、utils 文件夹 拷贝到项目目录下,即可使用。
stmlink/
├── http/                   # http 模块
├── ui/                     # 自定义 UI
├── utils/                  # 工具类
└── MeetingEngineHelper     # sdk 统一调用帮助类
```typescript

#### 使用说明
##### sdk 入口文件使用
```kotlin
/**
 * 创建 sdk
 */
MeetingEngineHelper.instance.createSDK(application)

/**
 * 初始化 sdk
 */
MeetingEngineHelper.instance.initSDK(token, null,
            object : MeetingResultCallback {
                override fun onFail(code: Int, errorMsg: String?, showMsg: String?) {
                    // 具体操作
                }

                override fun onSuccess() {
                    // 具体操作
                }
            }
        )

/**
 * 释放资源
 */
MeetingEngineHelper.instance.release()


/**
 * 其他接口调用
 */
网络请求模块使用
/**
 * 在应用启动时调用该方法初始化网络请求模块
 * url:主机地址
 */
ApiHelper.instance.init(url)

/**
 * 重置主机地址,重置后的地址存在 KvUtil 中的 DOMAIN_URL 字段中
 */
ApiHelper.instance.resetHost()

/**
 * 释放资源
 */
ApiHelper.instance.release()


/**
 * 各种网络请求接口
 */
```typescript

##### 自定义 ui 包使用
其中包含各种在项目中使用到的自定义组件,可以通过在 xml 布局文件中引入的方式使用

##### 工具包使用
其中包含各种在项目中使用到的工具类,基本是静态方法或者单例模式。

### 登录注册模块
登录注册模块主要包括:登录页、注册页、成员信息修改页

这是一个很重要的模块,没有实现登录,后续所有操作都无法被正确执行。

在这个模块中实现了 应用登录授权、Meet授权、初始化 SDK 组件、初始化 IM 组件。

应用登录授权执行完成后,会获得一个 应用层的用户 token,所有应用层的网络请求,都必须将这个 token 放入请求头

#### 引入
+ 将 cn.seastart.stmlink 路径下的 authorize 文件夹 拷贝到项目目录下,即可使用

```kotlin
stmlink/
├── authorize/              # 登录和注册模块
│   └── login/                # 登录功能相关
│   └── register/             # 注册功能相关

使用说明

界面跳转
/**
 * 跳转到登录界面
 */
LoginActivity.startActivity(this)
```typescript

##### SdkLoginHelper 工具说明
+ 在这个类中统一实现登录功能,主要步骤包括:授权->sdk登录->im登录,该类功能依赖于 MeetingEngineHelper(这是应用层封装的 sdk 入口类),一定要先初始化完成 MeetingEngineHelper
+ 由于存在 应用授权 token 已存在,需要自动登录 sdk 的场景,可以通过该类在任意界面实现登录功能

```kotlin
SdkLoginHelper.instance.login(object : SdkLoginHelper.LoginListener {
            override fun onSuccess() {
                // 具体操作
            }

            override fun onFail(code: Int, errorMsg: String?, showMsg: String?) {
                // 具体操作
            }
        })

界面展示

登录页面注册页面信息修改页面

会议外信息模块

会议外信息模块主要包括:待参加会议展示页、历史会议展示页、会议详情页、联系人列表页、联系人详情页、我的信息页

引入

  • 将 cn.seastart.stmlink 路径下的 Home 包、history 包、meetDetail 包、contactDetail 包 拷贝到项目中,即可使用
stmlink/
├── contactDetail/          # 联系人详情
├── history/                # 历史会议
├── home/                   # home 页
│   └── contact/              # 联系人列表页
│   └── meet/                 # 待加入会议列表页
│   └── mine/                 # 我的页面
├── meetDetail/             # 会议详情
```typescript

#### 使用说明
```kotlin
/**
 * 跳转到 Home 页面,Home 页面包括 待参加会议展示页、联系人列表页、我的信息页
 */
HomeActivity.startActivity(this)

/**
 * 跳转到 历史会议展示页
 */
 HistoryActivity.startHistoryListPage(this)

 /**
  * 跳转到 会议详情页
  * meetId:会议 id
  */
 MeetDetailActivity.startMeetDetailPage(this, meetId)

 /**
  * 跳转到 联系人详情页
  * uid:联系人 uid
  */
 ContactDetailActivity.startContactInfoPage(requireContext(), uid)

界面展示

待参加会议页面历史会议页面
会议详情页面会议详情页面
通讯录页面联系人详情页面联系人信息修改页面
我的页面

入会模块

入会模块主要包括:加入会议页、创建即时会议页、创建预约会议页、成员邀请页 加入会议和创建即时会议页,默认往会中页面跳转;创建预约会议页,默认往待参加会议展示页跳转

引入

  • 将 cn.seastart.stmlink 路径下的 preMeetingRoom 包、inviteMember 包 拷贝到项目中,即可使用。
stmlink/
├── inviteMember/           # 邀请成员模块
├── preMeetingRoom/         # 加入会议模块
```typescript

#### 使用说明
```kotlin
/**
 * 跳转到 加入会议页
 */
PreMeetingActivity.startJoinMeetingPage(this)

/**
 * 跳转到 创建即时会议页
 */
PreMeetingActivity.startCreateImmediateMeetingPage(this)

/**
 * 跳转到 创建预约会议页,预约会议页内可以跳转到成员邀请页
 */
PreMeetingActivity.startCreateScheduleMeetingPage(requireContext())

界面展示

加入会议页面创建即时会议页面创建预约会议页面
已邀请与会人页面邀请与会人页面

会中模块

会中模块主要包括:会议主页、参会成员列表页、邀请成员入会页、聊天信息页 会议主页中包括:单成员页面、多成员页面、共享页面、合成会议页面,质量监测数据窗口 退出会议主页时,默认退到 Home 页面

引入

  • 将 cn.seastart.stmlink 路径下的 inviteMember 包、Meeting 包 拷贝到项目中,即可使用
stmlink/
├── inviteMember/           # 邀请成员模块
├── meeting/                # 会中模块
│   └── chat/                 # 聊天页面
│   └── member/               # 会中成员页面
│   └── room/                 # 会中主页
```typescript

#### 使用说明
```kotlin
/**
 * 跳转到 会议主页
 * roomNo:会议号
 * name:自己的昵称
 * avatar:自己的头像
 * isOpenCamera:是否打开摄像头
 * isOpenMic:是否打开麦克风
 */
MeetingRoomActivity.startMeetingRoomPage(
    this, roomNo, name, avatar, 
    isOpenCamera, isOpenMic
)

界面展示

单成员页面单成员页面多成员页面
屏幕共享页面音频路由切换弹窗质量监测弹窗
主持人的参会成员页面主持人操作弹窗普通成员的参会成员页面
聊天页面文件选择页面