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

Flutter使用Agora与Firebase实现一对一语音通话的参数配置问题

Agora Flutter 一对一语音通话问题解答

关于joinChannel的optionalUid参数

该参数是Agora服务内部的用户唯一标识,和你自有业务系统(例如Firebase Auth的UID)不强制绑定,规则如下:

  • 如果你传入0或者null,Agora服务会自动为当前用户分配一个不重复的数字UID,你可以通过joinChannelSuccess回调拿到自动生成的UID值
  • 如果你要自行指定,需要保证同一个频道内每个用户的UID不重复,且必须是32位无符号整数,你也可以把业务侧的用户ID转换为符合该范围的数字传入,方便后续做业务逻辑映射
  • 如果你生成Token时指定了UID,那么joinChannel时传入的optionalUid必须和生成Token时使用的UID完全一致,否则会加入频道失败

无需控制台固定频道名的Token生成方案

控制台生成固定频道名的Token仅用于调试场景,生产环境本就不推荐使用,正确处理逻辑如下:

  • 在你的服务端(可以用Firebase Cloud Functions)部署Agora官方提供的多语言Token生成SDK,不要在客户端本地生成Token,会导致App Certificate泄露,存在被盗用风险
  • 客户端用户发起通话请求时,先把本次使用的频道名、用户UID(不管是自行指定还是预留让Agora生成的都可以)传给你的服务端接口
  • 服务端用收到的频道名、UID,结合你Agora控制台的App ID、App Certificate,生成对应该频道和用户的专属Token,返回给客户端
  • 客户端拿到返回的Token后,再调用joinChannel方法即可

修正后参考代码

_joinChannel() async {
  await Permission.microphone.request();
  // 示例:传0让Agora自动分配UID,自行指定的话替换为对应数字即可
  const optionalUid = 0;
  // 从自己的服务端动态获取对应频道和UID的Token,生产环境不要传null
  final userToken = await fetchAgoraTokenFromServer(
    channelName: widget.call.channelName!,
    uid: optionalUid,
  );
  await _engine
      .joinChannel(userToken, widget.call.channelName!, null, optionalUid)
      .catchError((onError) {
    print('error ${onError.toString()}');
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:12:01