You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Zego Cloud中实现呼叫邀请信令(仿WhatsApp通话逻辑)

实现Zego UIKit呼叫邀请逻辑(仿WhatsApp通话请求)

要实现点击通话按钮发送邀请、对方显示「接听/拒绝」按钮的逻辑,需要借助Zego的信令插件处理呼叫邀请流程,具体步骤如下:

1. 集成Zego信令插件

在pubspec.yaml中添加呼叫邀请所需依赖:

dependencies:
  zego_uikit_prebuilt_call: ^latest_version
  zego_uikit_signaling_plugin: ^latest_version

执行flutter pub get完成依赖安装。

2. 初始化呼叫邀请服务

在应用启动时全局初始化ZegoUIKit和呼叫邀请服务:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await ZegoUIKit().initLog();
  await ZegoUIKitPrebuiltCallInvitationService().init(
    appID: your_app_id, // 替换为你的Zego AppID
    appSign: your_app_sign, // 替换为你的Zego AppSign
    userID: current_user_id, // 当前登录用户ID
    userName: current_user_name, // 当前登录用户名称
    plugins: [ZegoUIKitSignalingPlugin()],
  );

  runApp(const MyApp());
}

3. 修改聊天界面的通话按钮逻辑

将原来直接跳转通话页面的逻辑,改为发送呼叫邀请:

// 音频通话按钮
IconButton(
  onPressed: () {
    ZegoUIKitPrebuiltCallInvitationService().sendCallInvitation(
      invitees: [
        ZegoUIKitUser(
          id: widget.user.id, // 目标用户ID
          name: widget.user.name, // 目标用户名称
        )
      ],
      callID: _generateUniqueCallID(),
      type: ZegoCallType.voiceCall,
    );
  },
  icon: const Icon(Icons.phone, color: Colors.black),
),
// 视频通话按钮
IconButton(
  onPressed: () {
    ZegoUIKitPrebuiltCallInvitationService().sendCallInvitation(
      invitees: [
        ZegoUIKitUser(
          id: widget.user.id,
          name: widget.user.name,
        )
      ],
      callID: _generateUniqueCallID(),
      type: ZegoCallType.videoCall,
    );
  },
  icon: const Icon(Icons.videocam, color: Colors.black),
),

补充生成唯一通话ID的工具方法:

String _generateUniqueCallID() {
  return DateTime.now().millisecondsSinceEpoch.toString();
}

4. 配置呼叫邀请接收弹窗

在MaterialApp的builder中初始化邀请弹窗,确保目标用户能收到邀请提示:

MaterialApp(
  builder: (context, child) {
    return ZegoUIKitPrebuiltCallInvitationService().initOverlay(
      context: context,
      child: child,
    );
  },
  // 其他应用配置项
)

5. 自定义通话页面行为(可选)

如果需要自定义通话页面的挂断、回调等行为,可在初始化邀请服务时配置:

ZegoUIKitPrebuiltCallInvitationService().init(
  // ...其他初始化参数
  requireConfig: (ZegoCallInvitationData data) {
    if (data.type == ZegoCallType.videoCall) {
      return ZegoUIKitPrebuiltCallConfig.oneOnOneVideoCall()
        ..onHangUp = () {
          Navigator.pop(context); // 挂断后返回原聊天页面
        };
    } else {
      return ZegoUIKitPrebuiltCallConfig.oneOnOneVoiceCall()
        ..onHangUp = () {
          Navigator.pop(context);
        };
    }
  },
);

内容的提问来源于stack exchange,提问作者Sarah Messiahal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:45:06