# V4.4.0 升级指南

随着时间增长，`UIKit` 功能业务越来越复杂，让我们不得不再次审视 `UIKit` 的定位角色，划清其在 `Demo`、`SDK` 之间关系和职责，却发现 `UIkit` 与 `Demo` 已经开始糅杂、耦合；并且开发者自定义变得不直观，学习成本高。
因此在 V4.4.0 我们不得不进行一次 `UIKit` 重构。建议开发者耐心阅读下新版的[架构解析](架构解析.md)以及[接口说明](NimUikit定制化接口介绍.md)。由于内部结构发生了一些调整，有些类的包名发生了变化，若开发者升级到V4.4.0，请关注本文给出的迁移指导。

## 接口变更

### ToolBar

`ToolBarOptions` 去掉默认值，与任何业务没有耦合。新增加 `NimToolBarOptions`，配置了 `UIKit` 默认值。

### 消息撤回观察者

封装了默认的消息撤回观察者 `NimMessageRevokeObserver`，开发者可以直接使用。

### 通知栏用户信息提供者

封装了 `SDK` 通知栏提醒时需要的用户信息提供者 `NimUserInfoProvider`，可以在初始化 `SDK` 时使用。

### 数据访问接口变更

访问数据不在使用 xxxCache 接口，而是使用xxxProvider 的方式，参考[接口说明](NimUikit定制化接口介绍.md) 中数据请求接口、数据变化通知接口的介绍。

## 流程变更

### 初始化

- 新增加 `UIKitOption` 作为 `UIKit` 全局配置选项，开发者在 `UIKit` 初始化时可以根据需求进行配置。支持的自定义配置项参考[UIKit全局配置项介绍](Uikit全局配置项介绍.md)。

- 增加异步初始化选项，`UIKitOption` 中配置。采用异步初始化可以节省 Application OnCreate 耗时，但是必须保证初始化完成之后再使用 `UIKit` 功能。

### 登入登出

- 调用手动登录有两种选择，一是使用 `UIKit` 封装的登录方法，而是直接调用 `SDK` 登录方法，若选择后者，则需要在登录成功回调之后，调用  NimUIKit#loginSuccess() 方法。

- 主动登出或者被踢之后，请调用 NimUIKit#logout 方法，重置 `UIKit`。

### 聊天室

- 进入聊天室成功之后，请调用 NimUIKit#enterChatRoomSuccess() 方法。

- 退出聊天室之后，清调用 NimUIKit#exitedChatRoom() 方法。

## Package 变更

由于 `UIKit` 内部包结构进行了调整，因此烦请开发者 App 中利用开发工具重新引用包即可，特别注意布局文件里面引用 `View` 或者 `Fragment` 的包路径。 


