浏览 SDKs · React Native
平台
SDKsReact Native

认证与管理登录会话

使用 OpenIM React Native SDK 初始化、登录、查询登录状态并退出当前账号。

复制

在进行认证与会话管理前,请先完成开始之前和按 React Native 环境接入中的准备工作。OpenIM React Native SDK 通过初始化接口配置运行环境,再通过登录接口认证当前用户并建立与服务端的长连接。

完整接入流程如下:

  1. 调用初始化接口配置服务地址、本地存储与日志参数。
  2. 设置 onConnecting、onConnectSuccess 和 onConnectFailed 事件监听。
  3. 调用登录接口传入用户凭据进行身份认证。
  4. 等待 onConnectSuccess 事件触发,确认长连接已就绪。
  5. 主动退出或切换账号时调用退出登录接口。

初始化 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,
});

参数说明

初始化方法接收的核心配置参数如下:

参数类型必填含义
apiAddrstring是OpenIMServer HTTP API 地址。
wsAddrstring是OpenIMServer WebSocket 地址。
dataDirstring是SDK 本地数据库存储目录,必须位于应用可写沙盒路径。
logFilePathstring是SDK 本地日志文件存放目录,必须位于应用可写沙盒路径。
logLevelLogLevel否日志输出级别,使用 LogLevel 枚举(如 LogLevel.Info)。
isLogStandardOutputboolean否是否将 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);

下一步