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

Flutter集成Twilio Voice:来电接收后无法接通的问题求助

解决Twilio Voice SDK调用answer()时的空指针异常问题

核心原因

空指针异常的本质是TwilioVoice.instance.call为null,说明你在调用answer()前,没有正确初始化来电对应的Call实例。外呼流程和来电流程的Token使用、实例初始化逻辑完全不同,这是最容易踩的坑。

排查与修复步骤

  • 正确处理Firebase来电消息中的twi_bridge_token
    收到Firebase远程消息后,不能直接调用answer(),必须先用消息里的twi_bridge_token初始化来电Call实例:

    // 解析Firebase消息中的参数
    final bridgeToken = message.data['twi_bridge_token'];
    final callSid = message.data['twi_call_sid'];
    
    // 使用bridge token初始化来电实例(具体方法参考twilio_voice包的API)
    await TwilioVoice.instance.initializeCall(
      bridgeToken: bridgeToken,
      callSid: callSid,
    );
    

    注意:外呼用的是自己生成的accessToken,而来电必须用Twilio下发的twi_bridge_token,两者不能混用。

  • 调用answer()前强制判空
    在触发接听操作时,先检查Call实例是否存在,避免空指针:

    if (TwilioVoice.instance.call != null) {
      try {
        await TwilioVoice.instance.call.answer();
      } catch (e) {
        print('接听失败: $e');
      }
    } else {
      print('Call实例未初始化,请检查来电消息处理逻辑');
      // 可选:重新用bridge token初始化Call实例
    }
    
  • 验证Call实例的生命周期
    在收到Firebase消息后、显示通知时、点击通知接听前,分别打印TwilioVoice.instance.call的状态,确认实例是否在某个环节被意外销毁或未初始化。

  • 检查包版本与平台配置

    • 确保twilio_voice包的版本是最新稳定版,避免旧版本的API bug
    • 核对Android Manifest和iOS Info.plist的配置:比如Android是否添加了READ_PHONE_STATE、RECORD_AUDIO权限,iOS是否开启了VoIP权限和后台模式
  • 确认Twilio Webhook配置
    检查Twilio的来电Webhook是否正确返回了包含twi_bridge_token的消息,确保token有效且未过期。

内容的提问来源于stack exchange,提问作者ABDUL REHMAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:57:11