认证与管理登录会话
使用 OpenIM React Native SDK 初始化、登录、查询登录状态并退出当前账号。
开始本页操作前,请先完成开始之前和按 React Native 环境接入中的准备工作。OpenIM React Native SDK 使用 initSDK() 初始化 SDK,再使用 login() 登录当前用户并建立与服务器的连接。
完整流程如下:
- 调用
initSDK()初始化 SDK。 - 设置
onConnecting、onConnectSuccess和onConnectFailed事件监听。 - 调用
login()登录当前用户。 - 等待
onConnectSuccess触发,表示登录成功并已连接服务器。 - 主动退出或切换账号时调用
logout()。
初始化 SDK
调用 initSDK() 传入服务地址、本地数据目录和日志配置。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 提供的应用文档目录,再调用 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() 的参数如下:
| 参数 | 类型 | 说明 |
|---|---|---|
apiAddr | string | OpenIMServer HTTP API 地址。 |
wsAddr | string | OpenIMServer WebSocket 地址。 |
dataDir | string | SDK 本地数据目录,必须位于应用可写路径。 |
logFilePath | string | SDK 日志目录,必须位于应用可写路径。 |
logLevel | LogLevel | 日志级别配置,使用 LogLevel 枚举。 |
isLogStandardOutput | boolean | 是否输出 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);下一步
这个页面有帮助吗?