常见问题处理

更新时间: 2023/03/29 11:32:35

编译问题

编译时提示 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.11com.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) {}
            });
  }
}

此文档是否对你有帮助?
有帮助
去反馈
  • 编译问题
  • 编译时提示 IM 相关类冲突
  • 初始化问题
  • 初始化语聊房组件时报错