常见问题处理
更新时间: 2024/11/20 17:05:14
编译问题
编译时提示 IM 相关类冲突
问题描述
App中同时集成了较低版本的 NERoom 和IM UIKit,报 IM 相关类 Duplicate class问题。
问题原因
NERoom 和 IM UIKit 中都依赖 IM SDK,内部依赖的 IM 版本不一致。比如您同时集成了 NERoom V1.8.2 和 IM UIKit 中的 chatkit V9.2.10,其中 NERoom V1.8.2依赖了com.netease.nimlib.flutter:basesdk:8.11.11
和com.netease.nimlib.flutter:chatroom:8.11.11
,chatkit V9.2.10 依赖了com.netease.nimlib:basesdk:9.2.5
。
解决方案
方案1:您可尝试升级至最新版本的 NERoom 和IM UIKit。
方案2:您可强制指定 App 中的 IM SDK 版本,使 NERoom 中依赖的IM 版本和 chatkit 中依赖的版本一致。示例代码如下:
build.gradle中尝试下如下写法:
// 依赖nim sdk
implementation("com.netease.nimlib:basesdk:9.2.5")
implementation("com.netease.nimlib:chatroom:9.2.5")
// 移除带flutter的nim sdk依赖
configurations {
all*.exclude group: 'com.netease.nimlib.flutter'
}
// 强制指定依赖nim sdk
configurations.all {
resolutionStrategy {
force 'com.netease.nimlib:basesdk:9.2.5'
force 'com.netease.nimlib:chatroom:9.2.5'
}
}
初始化问题
初始化语聊房组件时报错
问题描述
初始化报错:Caused by: java.lang.IllegalStateException: SDK not initialized or invoked in wrong process!
问题原因
您的 App 同时集成了 IM SDK 和语聊房组件 NEVoiceRoomKit 导致。如果您已经在代码中初始化 IM,再去执行 NEVoiceRoomKit 的 initialize
方法,NEVoiceRoomKit 的initialize
方法也会初始化 IM,导致报错。
解决方案
方案1:若您尚未集成IM,您可以只初始化 NEVoiceRoomKit ,不用再去额外初始化 IM,NEVoiceRoomKit内部会帮您做IM初始化。
参考代码如下:
public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Map<String, String> extras = new HashMap<>();
NEVoiceRoomKit.getInstance()
.initialize(
context,
new NEVoiceRoomKitConfig("your appKey", extras),
new NEVoiceRoomCallback<Unit>() {
@Override
public void onSuccess(@Nullable Unit unit) {
}
@Override
public void onFailure(int code, @Nullable String msg) {
}
});
}
}
方案2:若您已经集成了IM,初始化 NEVoiceRoomKit 时,通过 NEVoiceRoomKitConfig#reuseIM 开启 IM 复用功能。
参考代码如下:
public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化 IM SDK (仅在复用时需要显示初始化)
SDKOptions sdkOptions = SDKOptions.DEFAULT;
// 具体参数由应用层根据实际情况传入
//...
//...
NIMClient.config(this, null, sdkOptions);
if (ProcessUtils.isMainProcess()) {
NIMClient.initSDK();
}
//初始化 NEVoiceRoomKit
String appKey = "your appKey";
// 打开 IM 复用开关
boolean reUseIM = true;
NEVoiceRoomKitConfig config = new NEVoiceRoomKitConfig(appKey, reUseIM);
NEVoiceRoomKit.getInstance()
.initialize(
this,
config,
new NEVoiceRoomCallback<Unit>() {
@Override
public void onSuccess(@Nullable Unit unit) {}
@Override
public void onFailure(int code, @Nullable String msg) {}
});
}
}