initSDK
功能介绍
说明
初始化是客户端调用 SDK 的第一步,在应用的生命周期内只能调用一次,重复调用可能会导致未知的问题。
注意
(1)初始化成功后,再设置各种监听器,并进行登录,确保在同步等待登陆回调完成后再调用其他API。具体流程在各端的快速集成中有示例;
(2)客户端的底层日志会存放在指定目录,供调试查看,但不建议在生产环境中启用。
- iOS
- Android
- Flutter
- uni-app
- Browser/Electron/MiniProgram
- React-Native
- Unity
函数原型
// 方法一
Future<dynamic> initSDK({
required int platform,
required String apiAddr,
required String wsAddr,
required String dataDir,
required OnConnectListener listener,
int logLevel = 6,
bool isLogStandardOutput = true,
String? logFilePath,
String? operationID,
});
// 方法二
Future<bool?> init(
InitConfig config,
OnConnectListener listener, {
String? operationID,
});
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
config | InitConfig | 是 | 初始化参数 |
返回结果
名称 | 数值类型 | 描述 |
---|---|---|
~ | dynamic | 标识是否初始化成功 |
代码示例
OpenIM.iMManager.initSDK(
platform: IMPlatform.android,
apiAddr: '',
wsAddr: '',
dataDir: '',
listener: OnConnectListener(
onConnectFailed: (code, errorMsg) {},
onConnecting: () {},
onConnectSuccess: () {},
onKickedOffline: () {},
onUserTokenExpired: () {},
),
);
函数原型
- (BOOL)initSDKWithConfig:(OIMInitConfig *)config
onConnecting:(nullable OIMVoidCallback)onConnecting
onConnectFailure:(nullable OIMFailureCallback)onConnectFailure
onConnectSuccess:(nullable OIMVoidCallback)onConnectSuccess
onKickedOffline:(nullable OIMVoidCallback)onKickedOffline
onUserTokenExpired:(nullable OIMVoidCallback)onUserTokenExpired;
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
config | OIMInitConfig | 是 | 初始化参数 |
返回结果
名称 | 数值类型 | 描述 |
---|---|---|
success | BOOL | 标识是否初始化成功 |
onConnecting | OIMVoidCallback | 连接中的回调 |
onConnectFailure | OIMFailureCallback | 连接失败的回调 |
onConnectSuccess | OIMFailureCallback | 连接成功的回调 |
onKickedOffline | OIMVoidCallback | 踢下线的回调 |
onUserTokenExpired | OIMVoidCallback | token 过期的回调 |
代码示例
OIMInitConfig *config = [OIMInitConfig new];
config.apiAddr = @"";
config.wsAddr = @"";
config.objectStorage = @"";
BOOL success = [OIMManager.manager initSDKWithConfig:config
onConnecting:^{
} onConnectFailure:^(NSInteger code, NSString * _Nullable msg) {
// 连接失败的回调函数
// code 错误码
// error 错误信息
} onConnectSuccess:^{
// SDK 已经成功连接到IM服务器
} onKickedOffline:^{
// SDK 正在连接到IM服务器
} onUserTokenExpired:^{
// 在线时票据过期:此时您需要生成新的 token 并再次调用 的 login() 函数重新登录。
}];
参数详解
public boolean initSDK(Application application, InitConfig initConfig, @NotNull OnConnListener listener)
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
application | Application | 是 | Application |
initConfig | InitConfig | 是 | 初始化参数 |
listener | OnConnectListener | 是 | 监听 |
代码示例
InitConfig initConfig=new InitConfig(
Constant.getImApiUrl(),//SDK api地址
Constant.getImWsUrl(),//SDK WebSocket地址
getStorageDir(),//SDK数据库存储目录
);
OpenIMClient.getInstance().initSDK(application,
initConfig,
new OnConnListener() {
@Override
public void onConnectFailed(long code, String error) {
//连接服务器失败
}
@Override
public void onConnectSuccess() {
//连接服务器成功
}
@Override
public void onConnecting() {
//连接服务器中...
}
@Override
public void onKickedOffline() {
//当前用户被踢下线
}
@Override
public void onUserTokenExpired() {
//登录票据已经过期
}
});
注意
@openim/client-sdk
和@openim/wasm-client-sdk
不需要初始化,直接调用 login 即可。只有在electron中引入@openim/electron-client-sdk
采用了ffi的方式,才需要调用initSDK
初始化。
参数详解
IMSDK.initSDK(config: InitConfig, operationID?: string):Promise<boolean>
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
config | InitConfig | 是 | 初始化参数 |
operationID | string | 否 | 操作 ID,用于定位问题,保持唯一,建议用当前时间和随机数 |
返回结果
参数名称 | 参数类型 | 描述 |
---|---|---|
Promise.then() | Promise<boolean> | 调用成功回调 |
Promise.catch() | Promise<void> | 调用失败回调 |
代码示例
import { getWithRenderProcess } from '@openim/electron-client-sdk/lib/render';
const { instance: IMSDK } = getWithRenderProcess();
IMSDK.initSDK({
platformID: 'your-platform-id',
apiAddr: 'http://your-server-ip:10002',
wsAddr: 'ws://your-server-ip:10001',
dataDir: 'your-db-dir',
logFilePath: 'your-log-file-path',
logLevel: LogLevel.Debug,
isLogStandardOutput: true,
});
函数原型
IMSDK.asyncApi("initSDK",operationID: string, config: InitConfig): Promise<boolean>
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
operationID | string | 是 | 操作 ID,用于定位问题,保持唯一,建议用当前时间和随机数 |
config | InitConfig | 是 | 初始化参数 |
返回结果
通过
openim-uniapp-polyfill
包将函数 Promise 化,调用时需要使用then
和catch
判断并处理成功和失败回调。
参数名称 | 参数类型 | 描述 |
---|---|---|
Promise.then() | Promise<boolean> | 是否初始化成功 |
Promise.catch() | Promise<CatchResponse> | 调用失败回调 |
代码示例
// App.vue
import IMSDK from 'openim-uniapp-polyfill';
const path = await getDbDir();
const config = {
apiAddr: 'http://xxx:10002', // IM的API接口地址。如:http://xxx:10002
wsAddr: 'ws://xxx:10001', // IM的websocket地址。如: ws://xxx:10001
platformID: uni.$u.os() === 'ios' ? 1 : 2, // 平台,参照Platform类,
dataDir: path, // 数据存储路径
logLevel: 6, // 日志打印级别
logFilePath: path, // 日志存储的目录
isLogStandardOutput: true, // 是否输出到控制台
};
const flag = await IMSDK.asyncApi('initSDK', IMSDK.uuid(), config);
// utils.js
export const getDbDir = () =>
new Promise((resolve, reject) => {
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, (fs) => {
fs.root.getDirectory(
'user',
{
create: true,
},
(entry) => {
resolve(entry.fullPath);
},
(error) => {
reject(error);
}
);
});
});
函数原型
OpenIMSDKRN.initSDK(config: InitConfig, optionalID:string): Promise<boolean>
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
config | InitConfig | 是 | 初始化参数 |
operationID | string | 是 | 操作 ID,用于定位问题,保持唯一,建议用当前时间和随机数 |
返回结果
参数名称 | 参数类型 | 描述 |
---|---|---|
Promise.then() | Promise<boolean> | 是否初始化成功 |
Promise.catch() | Promise<CatchResponse> | 调用失败回调 |
代码示例
import OpenIMSDKRN from 'open-im-sdk-rn';
import RNFS from 'react-native-fs';
RNFS.mkdir(RNFS.DocumentDirectoryPath + '/tmp');
OpenIMSDKRN.initSDK({
platformID: 2, // 1: ios, 2: android
apiAddr: 'http://your-server-ip:10002',
wsAddr: 'ws://your-server-ip:10001',
dataDir: RNFS.DocumentDirectoryPath + '/tmp',
logLevel: 5,
isLogStandardOutput: true,
}, 'operationID');
函数原型
public static bool InitSDK(IMConfig config, IConnCallBack cb)
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
config | IMConfig | 是 | SDK配置 |
cb | IConnListener | 是 | 网络连接状态回调 |
代码示例
var config = new IMConfig()
{
PlatformID = (int)PlatformID,
WsAddr = wsAddr,
ApiAddr = apiAddr,
DataDir = dataDir,
LogLevel = 5,
IsLogStandardOutput = true,
LogFilePath = logDir,
IsExternalExtensions = true,
};
var connListener = new IConnListener();
var res = IMSDK.InitSDK(config, connListener);