常见问题
更新时间: 2023/06/06 17:09:07
本文介绍呼叫组件 Android 端的常见问题及解决方案。
- 在挂断时,离开 RTC 房间和 close 信令频道哪个先执行?
- 如何获取呼叫组件的日志?
- 不能正常入会如何解决?
- 多端登录时,接听失败
- 呼叫时展示的昵称错误
- 为什么应用集成呼叫组件后,应用退出后收不到推送消息?
- 集成组件后出现编译错误问题
expected reference but got (raw string) code example
- 为什么应用集成呼叫组件后,应用退到后台不会响铃
在挂断时,离开 RTC 房间和 close 信令频道哪个先执行?
呼叫组件在挂断时,先执行close信令。
如何获取呼叫组件的日志?
-
V2.0.0及以上版本
若呼叫组件版本为 V2.0.0 及以上版本,日志的获取方式如下:
请实现
XKitInitOptions
接口,并在proguard-rules.pro
中添加相应的防代码混淆策略,以避免代码被混淆。设置呼叫组件日志路径的示例代码如下:
@Keep public class ExampleOptions implements XKitInitOptions { @Nullable @Override public XKitLog0ptions_log0ption(@NonNull Context context) { return new XKitLogOptions.Builder() .path("目标路径") .build(); } }
-
V1.3.3~ V1.8版本
若 App 依赖的 IM SDK 版本 为8.5.5 及以上,呼叫组件版本为 V1.3.3及以上版本,日志的获取方式如下:
- 如果 IM 的日志路径为默认的日志路径:请提供目标账号的 accId 以及 AppKey,联系网易云信技术支持工程师从后台拉取相应的日志。
- 如果 IM 的日志路径为自定义的日志路径:请将呼叫组件的日志路径修改为和 IM 的日志路径相同。
-
V1.3.3 以下版本
若使用的呼叫组件版本为 V1.3.3 以下,呼叫组件的日志路径如下:
/sdcard/android/data/应用包名/files/ne_log
不能正常入会如何解决?
Q:同时引入呼叫组件以及NERtc SDK,不能正常入会,应如何处理?
A:请参考如下步骤进行排查和处理:
-
确保呼叫组件为 1.3.3 版本以上,如果低于该版本,请升级至最新版本。
-
确认其他工程为全局初始化一次 NERtc SDK,还是每次使用的时候初始化,使用完成后释放。
目前组件默认为全局初始化一次,组件释放时释放 SDK 实例。如果其他工程初始化和组件初始化逻辑不同,会产生冲突,导致入会失败。请通过设置
rtcInitScope(false)
解决。
若每次通话开始初始化,通话结束释放实例,会增加用户接听首帧时长,且呼叫的本地预览无法支持。
多端登录时,接听失败
Q:用户 A 多端登录,用户 B 呼叫用户 A,用户 A 多设备均可收到呼叫邀请,但是当其中一端用户点击接听时,出现无法接听或接听失败,此时应如何处理?
A:当前设计方案为被叫收到呼叫邀请时,首先加入信令 channel ,但是同一个用户限制只能加入一次信令 channel,这就导致多端设备收到呼叫时,其中一端加入channel失败,此时加入channel 失败方点击接听会出现问题。若有多端登录的需求可以按照如下配置:
呼叫时展示的昵称错误
呼叫组件展示的昵称均通过云信 IM SDK 下述方法获取:
NIMClient.getService(UserService::class.java).getUserInfo("AccId").getName();
若用户需要展示昵称,可以使用下述方法更新目标用户昵称:
HashMap<UserInfoFieldEnum, Object> fields = new HashMap<>();
fields.put(UserInfoFieldEnum.Name,"userName");
NIMClient.getService(UserService.class).updateUserInfo(fields);
为什么应用集成呼叫组件后,应用退出后收不到推送消息?
目前呼叫组件的离线推送功能公用 IM SDK 的推送,具体请参见接入 IM Sdk 的推送功能。
推送接入成功后,若用户需要修改被叫离线收到的呼叫推送消息内容,可以使用 pushConfigProvider
完成修改,示例代码如下:
CallKitUIOptions options = new CallKitUIOptions.Builder()
......
.pushConfigProvider(new PushConfigProvider() {
@Override
public SignallingPushConfig providePushConfig(InvitedInfo info) {
// true - 需要推送,false 不推送
// pushTitle - 推送标题
// pushContnet - 推送内容
return new SignallingPushConfig(true, pushTitle, pushContent);
}
})
......
.build();
CallKitUI.init(context,options);
集成组件后出现编译错误问题 expected reference but got (raw string) code example
请在应用的主工程 styles.xml 文件中添加如下代码:
<style name="BottomDialogTheme" parent="ThemeOverlay.AppCompat.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsTranslucent">false</item>
</style>
为什么应用集成呼叫组件后,应用退到后台不会响铃?
问题原因
响铃依赖弹出的呼叫界面,如果应用没有配置后台弹出界面,后台收到呼叫时,无法弹出对应的呼叫界面,所以无法实现响铃。
解决方案
您可以通过如下两种方案解决该问题:
- 通过呼叫组件的
notificationConfigFetcher
配置后台消息提醒的通知栏铃声,具体请参见初始化参数配置。 - 在呼叫组件的
incomingCallEx
自行实现接听逻辑,判断应用如果在后台的情况下,调用系统的接口播放铃声。另外,您还需要自行实现前台弹出界面的逻辑,可以直接继承呼叫组件DefaultIncomingCallEx
中的onIncomingCall
方法。