浏览 SDKs · React Native
SDKsReact Native

认证与管理登录会话

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

复制

开始本页操作前,请先完成开始之前按 React Native 环境接入中的准备工作。OpenIM React Native SDK 使用 initSDK() 初始化 SDK,再使用 login() 登录当前用户并建立与服务器的连接。

完整流程如下:

  1. 调用 initSDK() 初始化 SDK。
  2. 设置 onConnectingonConnectSuccessonConnectFailed 事件监听。
  3. 调用 login() 登录当前用户。
  4. 等待 onConnectSuccess 触发,表示登录成功并已连接服务器。
  5. 主动退出或切换账号时调用 logout()

初始化 SDK

调用 initSDK() 传入服务地址、本地数据目录和日志配置。dataDirlogFilePath 应使用应用可写的持久化目录。

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 提供的应用文档目录,再调用 initSDK()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,
});

参数说明

initSDK() 的参数如下:

参数类型说明
apiAddrstringOpenIMServer HTTP API 地址。
wsAddrstringOpenIMServer WebSocket 地址。
dataDirstringSDK 本地数据目录,必须位于应用可写路径。
logFilePathstringSDK 日志目录,必须位于应用可写路径。
logLevelLogLevel日志级别配置,使用 LogLevel 枚举。
isLogStandardOutputboolean是否输出 SDK 日志到平台标准日志。

注册连接事件

调用 login() 前设置连接事件监听。可以使用 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);

登录当前用户

调用 login() 传入可信后端返回的 userID 和 Token:

await OpenIMSDK.login({
  userID,
  token,
});

调用 login() 后等待 onConnectSuccess 事件。该事件触发表示登录成功,SDK 连接服务器成功,业务 API 应在此之后调用。

查询登录状态

getLoginStatus() 查询当前登录状态:

const loginStatus = await OpenIMSDK.getLoginStatus();

LoginStatus 包含以下状态:

状态说明
LoginStatus.Logout当前 SDK 实例未登录。
LoginStatus.Logging登录流程正在进行。
LoginStatus.Logged当前 SDK 实例已登录。

退出登录和切换账号

主动退出或切换账号时调用 logout(),并清理应用中保存的当前账号数据:

await OpenIMSDK.logout();

切换账号时先完成旧账号退出,再使用新账号的参数调用 login(),无需重复 initSDK。不应在旧账号仍处于登录状态时登录新账号。

取消事件监听

退出登录、切换账号或销毁相关状态时,使用注册时的同一事件名称和函数引用调用 off()

// 取消监听
OpenIMSDK.off('onConnecting', handleConnecting);
OpenIMSDK.off('onConnectSuccess', handleConnectSuccess);
OpenIMSDK.off('onConnectFailed', handleConnectFailed);

下一步