logo
当前页

排查呼叫邀请故障

Warning

如果您的项目已经集成了 Firebase Cloud Messaging,您将需要额外的步骤来处理 Firebase 和 Call Kit 之间的兼容性问题。详情请参考 如何解决同时集成 Firebase Cloud Message 时的冲突?

如果您遇到离线通话问题,我们建议您在排查离线问题之前先测试并确保在线通话功能正常工作。这通常会缩短您解决问题的时间。

以下是一些常见的集成问题和现象组合。您可以尝试使用此列表快速自我诊断并定位问题的原因。

排除在线呼叫故障

主叫用户点击通话按钮后,被叫用户 UI 无响应

如果主叫用户点击通话按钮后用户界面没有响应,请检查以下内容:

  1. 请确保双方都已成功初始化并连接,请参考 检查是否有任何初始化错误

  2. 检查主叫用户端是否有任何错误报告,请参考 检查主叫用户端是否有任何错误

排除离线通话故障

离线通话问题可能相当复杂且棘手,特别是在Android设备上。为了帮助您,我们下面列出了一些常见情况及其相应的解决方案。

Warning

在尝试排除离线通话故障之前,请确保在线呼叫邀请功能正常工作

检查测试设备是否已授予应用相关权限

可以收到通话邀请,但邀请对话框中只有通知,没有接受和拒绝按钮。

检查 ResourceID 配置是否正确

可以收到通话邀请,但点击接受后,应用无法启动。

检查测试设备是否已授予应用相关权限

用户在退出应用后仍能收到离线通知。

用户退出应用后,您应该调用ZegoUIKitPrebuiltCallService().uninit()

Untitled
// 在应用的用户登出时
void onUserLogout() {
    // 当应用的用户退出登录时
    ZegoUIKitPrebuiltCallService().uninit();
}
1
Copied!

被叫用户离线时未收到通话邀请通知

1 确保使用的是最新版本

在项目终端中输入 ./gradlew build --refresh-dependencies 进行强制同步。同步完成后,再次点击同步按钮进行同步。

2 检查应用是否已启用必要权限

安装后,某些 Android 设备可能会默认阻止应用显示通知。ZEGO 建议您打开应用设置,检查是否已向应用授予通知权限,确保应用被允许显示通知。

3 检查被叫用户是否正确获取了推送 ID

在 IDE(Android Studio)调试时,您通常可以在应用的控制台日志中查看到如 push idpushID 等重要信息。请确保被叫用户正确获取了推送ID。

如果您在获取有效的推送 ID 时遇到问题,可能是由于您的证书配置存在问题。我们建议您再次查看 快速开始(包含呼叫邀请),以确保您在控制台上的证书配置正确。配置正确后,您应该能看到类似以下内容:

如果在 ZEGO 控制台 上配置了证书后,仍然无法获取推送 ID,请仔细检查 Android 上的 google-service.json 文件中的 package_name 是否与您项目的包名匹配。

确认无误后,您应该能够正确获取推送ID。

4 检查是否能够从 ZEGO 控制台接收调试消息

要检查是否能够从 ZEGOC 控制台接收调试消息,请登录到 ZEGO 并导航到 开发辅助,点击 ZIM 离线推送测试 按钮,即可开始测试。

如果在点击 测试 按钮时遇到与 厂商推送服务器 相关的错误,请查看错误码和错误信息。这可以帮助您确定问题的根本原因。

厂商推送服务器 错误可能由以下原因引起:

  • 被叫用户未注册或未登录,这可能导致测试失败。确保被叫用户的应用程序未被卸载或被叫用户未退出应用程序。

  • 您的 Firebase 项目可能已被修改或删除,导致信息不匹配。通过登录 Firebase 控制台来确认这一点。

检查清单

检查初始化错误

检查ZEGO SDK是否初始化成功,以及 signalPlugin 是否已连接。您应该调用 ZegoUIKitPrebuiltCallService.init 来初始化并登录 ZEGO signalPlugin。通过以下代码检查连接状态:

Untitled
ZegoUIKitPrebuiltCallService.events.setErrorEventsListener(new ErrorEventsListener() {
    @Override
    public void onError(int errorCode, String message) {
        // 如果有错误抛出
    }
});
ZegoUIKitPrebuiltCallService.events.invitationEvents.setPluginConnectListener(
    new SignalPluginConnectListener() {
    @Override
    public void onSignalPluginConnectionStateChanged(ZIMConnectionState state, ZIMConnectionEvent event,
        JSONObject extendedData) {
            // signalPlugin 用于发送呼叫邀请,如果您的 ZIMConnectionState 是 DISCONNECTED,您将无法发送或接收通话邀请。
    }
});
1
Copied!

检查主叫用户端是否有任何错误

  • 如果您使用 ZegoSendCallInvitationButton 来启动通话,您可以这样检查错误码:

    Untitled
    newVideoCall.setOnClickListener(new ClickListener() {
        @Override
        public void onClick(int errorCode, String errorMessage, List<ZegoCallUser> errorInvitees) {
            
        }
    });
    
    1
    Copied!
  • 如果您使用 ZegoUIKitPrebuiltCallService.sendInvitationWithUIChange(),只需检查该方法的回调。

    Untitled
    ZegoUIKitPrebuiltCallService.sendInvitationWithUIChange(activity, invitees, type, new PluginCallbackListener() {
        @Override
        public void callback(Map<String, Object> result) {
            int code = (int) result.get("code");
            String message = (String) result.get("message");
            List<ZegoUIKitUser> errorInvitees = (List<ZegoUIKitUser>) result.get("errorInvitees");
        }
    });
    
    1
    Copied!

请检查错误码和消息,并确认 errorInvitees 列表是否为空。

有关错误码的详细信息,请参阅 即时通讯 - ZIM 错误码

Note

此外,如果您在发送通话邀请时使用了 customData 参数,请注意该参数的大小不能超过 1024 字节。

检查测试设备是否已授予应用相关权限

请确保应用已在手机设置中被授予相关权限。同时请检查手机是否处于勿扰模式。

以下是在小米设备上实现离线推送所需的权限参考:

通常需要检查的权限包括:

  • 通知:切换到启用

  • 显示悬浮窗:切换到启用

  • 电池优化:无限制

您可以在 这里 查找您手机品牌的相关信息权限设置方法。

检查 ResourceID 配置是否正确

请检查 ZEGO 控制台中的 resourceID 配置是否为 FCM Data messages。

请检查 ZEGO 控制台中配置的 resourceID 是否与代码中 ZegoSendCallInvitationButton 使用的 resourceID 完全相同。

Untitled
ZegoSendCallInvitationButton button;
button.setResourceID(String resourceID);
1
Copied!