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

Agora Flutter视频通话数秒后中断,报PlatformException(-7)错误求助

解决Agora Flutter视频通话数秒后中断(PlatformException(-7))问题

首先明确:你遇到的PlatformException(-7)对应Agora RTC引擎的ERR_INVALID_TOKEN错误,即令牌无效或过期导致通话连接中断,结合你描述的「初期正常、数秒至一分钟后中断」的现象,核心问题大概率出在令牌生成/使用逻辑或令牌过期处理上,以下是具体排查和解决思路:

1. 修正令牌生成与UID的匹配逻辑

你的代码存在一个关键逻辑错误:生成令牌时使用的是初始值为0的_localUid,但实际加入频道时,Agora会为你分配一个真实的UID(在joinChannelSuccess回调中返回),这会导致令牌中的UID与实际使用的UID不匹配,触发无效令牌错误。

修复方案:

选择以下两种方式之一:

  • 方式一:使用自定义唯一UID(推荐,比如用Firebase用户ID)

    // 假设你用Firebase Auth,获取当前用户ID作为自定义UID
    String customUid = FirebaseAuth.instance.currentUser!.uid;
    // 用自定义UID生成令牌
    agoraToken = await fetchAgoraToken(uid: customUid, channelId: "generatedChannelId");
    
    // 后续加入频道时传入这个自定义UID
    await engine.joinChannel(agoraToken, "generatedChannelId", '', int.parse(customUid));
    
  • 方式二:先获取Agora分配的UID再生成令牌

    // 先创建引擎并设置事件监听
    engine = await RtcEngine.create(Constants.AGORA_APP_ID);
    engine.setEventHandler(RtcEngineEventHandler(
      joinChannelSuccess: (channelId, uid, elapsed) async {
        _localUid = uid;
        // 获取对应UID的令牌并更新
        String newToken = await fetchAgoraToken(uid: _localUid, channelId: channelId);
        await engine.renewToken(newToken);
      },
      // 其他回调...
    ));
    
    // 先传入0让Agora分配UID,此时令牌可以传空或者临时令牌(如果后台支持)
    await engine.joinChannel('', "generatedChannelId", '', 0);
    

2. 处理令牌过期逻辑

如果你的令牌有效期设置过短(比如测试时设为1分钟),通话过程中令牌会过期导致中断,必须监听令牌过期事件并主动更新:

在RtcEngineEventHandler中添加以下回调:

tokenPrivilegeWillExpire: (String token) async {
  // 在令牌过期前重新获取新令牌
  String newToken = await fetchAgoraToken(uid: _localUid, channelId: "generatedChannelId");
  await engine.renewToken(newToken);
},
requestToken: () async {
  // 当引擎主动请求新令牌时触发
  String newToken = await fetchAgoraToken(uid: _localUid, channelId: "generatedChannelId");
  await engine.renewToken(newToken);
},

3. 检查令牌生成的核心参数

在Firebase Functions的令牌生成代码中,确认以下几点:

  • 令牌的过期时间是否合理,避免设置过短(建议至少3600秒即1小时)。
  • 生成令牌时使用的channelId、uid与客户端传入的完全一致(注意Agora的channelId区分大小写)。
  • 使用的Agora App Certificate与控制台中对应App ID的证书一致,不要混用测试/生产环境的证书。

4. 其他排查点

  • 检查网络环境:在稳定的Wi-Fi/4G网络下测试,排除网络波动导致的令牌验证失败。
  • 版本兼容性:尝试升级agora_rtc_engine到最新稳定版本,排查旧版本的已知bug。

内容的提问来源于stack exchange,提问作者ɐʂʂɐ ʂʂɪȠo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:20:47