SDKsReact Native
认证与管理登录会话
使用 OpenIM React Native SDK 初始化、登录、查询登录状态并退出当前账号。
在进行认证与会话管理前,请先完成开始之前和按 React Native 环境接入中的准备工作。OpenIM React Native SDK 通过初始化接口配置运行环境,再通过登录接口认证当前用户并建立与服务端的长连接。
完整接入流程如下:
- 调用初始化接口配置服务地址、本地存储与日志参数。
- 设置
onConnecting、onConnectSuccess和onConnectFailed事件监听。 - 调用登录接口传入用户凭据进行身份认证。
- 等待
onConnectSuccess事件触发,确认长连接已就绪。 - 主动退出或切换账号时调用退出登录接口。
初始化 SDK
调用初始化方法传入服务地址、本地数据目录和日志配置。dataDir 和 logFilePath 应使用应用可写的持久化目录。
React Native CLI
import OpenIMSDK, { LogLevel } from '@openim/rn-client-sdk';
import RNFS from 'react-native-fs';
const dataDir = RNFS.DocumentDirectoryPath;
await OpenIMSDK.initSDK({
apiAddr: 'http://your-server-ip:10002',
wsAddr: 'ws://your-server-ip:10001',
dataDir,
logFilePath: dataDir,
logLevel: LogLevel.Info,
isLogStandardOutput: true,
});Expo
Expo 项目使用 expo-file-system 提供的应用文档目录,再调用初始化方法。documentDirectory 返回的 URI 包含 file:// 前缀,传给 SDK 前需要移除该前缀:
import OpenIMSDK, { LogLevel } from '@openim/rn-client-sdk';
import * as FileSystem from "expo-file-system/legacy";
const dataDir = FileSystem.documentDirectory.replace(/^file:\/\//, '').replace(/\/$/, '');
await OpenIMSDK.initSDK({
apiAddr: 'http://your-server-ip:10002',
wsAddr: 'ws://your-server-ip:10001',
dataDir,
logFilePath: dataDir,
logLevel: LogLevel.Info,
isLogStandardOutput: true,
});参数说明
初始化方法接收的核心配置参数如下:
| 参数 | 类型 | 必填 | 含义 |
|---|---|---|---|
apiAddr | string | 是 | OpenIMServer HTTP API 地址。 |
wsAddr | string | 是 | OpenIMServer WebSocket 地址。 |
dataDir | string | 是 | SDK 本地数据库存储目录,必须位于应用可写沙盒路径。 |
logFilePath | string | 是 | SDK 本地日志文件存放目录,必须位于应用可写沙盒路径。 |
logLevel | LogLevel | 否 | 日志输出级别,使用 LogLevel 枚举(如 LogLevel.Info)。 |
isLogStandardOutput | boolean | 否 | 是否将 SDK 底层日志输出至系统标准控制台。 |
注册连接事件
在发起用户登录前设置连接事件监听。可以使用 OpenIMEvent 中的事件枚举值,也可以直接使用事件字符串;这里使用字符串展示登录流程:
const handleConnecting = () => {
console.log("onConnecting")
};
const handleConnectSuccess = () => {
console.log("onConnectSuccess")
};
const handleConnectFailed = (error: OpenIMEventBaseErrorType) => {
console.log("onConnectFailed", error.errCode, error.errMsg)
};
// 设置监听
OpenIMSDK.on('onConnecting', handleConnecting);
OpenIMSDK.on('onConnectSuccess', handleConnectSuccess);
OpenIMSDK.on('onConnectFailed', handleConnectFailed);登录当前用户
调用登录方法传入业务服务端签发的当前用户 ID 与 Token:
await OpenIMSDK.login({
userID,
token,
});完成身份认证后,建议等待 onConnectSuccess 事件触发,这表明长连接已成功就绪,后续依赖长连接的业务 API 即可正常调用。
查询登录状态
查询当前客户端的登录与连接状态:
const loginStatus = await OpenIMSDK.getLoginStatus();LoginStatus 包含以下枚举状态:
| 状态 | 含义 |
|---|---|
LoginStatus.Logout | 当前 SDK 实例处于未登录状态。 |
LoginStatus.Logging | 登录正在进行中,长连接正在建立。 |
LoginStatus.Logged | 当前 SDK 实例已成功登录并保持连接。 |
退出登录和切换账号
主动退出或切换账号时调用退出登录方法,并清理应用中保存的当前账号数据:
await OpenIMSDK.logout();切换账号时应先退出旧账号,再使用新账号的参数执行登录,无需重复执行初始化。不应在旧账号仍处于登录状态时登录新账号。
取消事件监听
退出登录、切换账号或销毁相关状态时,使用注册时的同一事件名称和函数引用调用取消监听方法:
// 取消监听
OpenIMSDK.off('onConnecting', handleConnecting);
OpenIMSDK.off('onConnectSuccess', handleConnectSuccess);
OpenIMSDK.off('onConnectFailed', handleConnectFailed);下一步
这个页面有帮助吗?