
flutter pubaddtencent_calls_uikit
android/app/ 目录下找到 build.gradle.kts(或 build.gradle )文件中配置并开启混淆规则:android {buildTypes {release {isMinifyEnabled = trueproguardFiles(getDefaultProguardFile("proguard-android.txt"),"proguard-rules.pro")}}}
android {buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}}
android/app 目录下创建 proguard-rules.pro 文件,并在其中添加如下代码:-keep class com.tencent.** { *; }
AndroidManifest.xml 里设置 MainActivity 的 android:supportsPictureInPicture 为 true:<manifest xmlns:android="http://schemas.android.com/apk/res/android"><application><activityandroid:name=".MainActivity"android:supportsPictureInPicture="true"</activity></application></manifest>
Info.plist 文件中,在顶级 <dict> 目录下添加以下两项。<key>NSCameraUsageDescription</key><string>CallingApp需要访问您的相机权限,开启后录制的视频才会有画面</string><key>NSMicrophoneUsageDescription</key><string>CallingApp需要访问您的麦克风权限,开启后录制的视频才会有声音</string>
deployment postprocessing,将其设置为 Yes 。
strip style,将其中 Release 的值设置为 Non-Global Symbols 。
navigatorObservers 中添加 TUICallKit.navigatorObserver,用于监听页面路由变化和管理组件生命周期。localizationsDelegates 中添加相关本地化代理,确保界面文案能够根据系统语言正确显示。import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';......class XXX extends StatelessWidget {const XXX({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(navigatorObservers: [TUICallKit.navigatorObserver],localizationsDelegates: const [// 您的 App 其他配置AtomicLocalizations.delegate,],);}}
login 接口完成插件的登录。此步骤至关重要:只有成功登录后,您才能正常使用 TUICallKit 提供的各项功能。import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';import 'package:tencent_calls_uikit/src/debug/generate_test_user_sig.dart';......final String userId = 'xxxxx'; // 请替换为您的 UserIdfinal int sdkAppId = 0; // 请替换为第一步在控制台得到的 SDKAppIdfinal String secretKey = 'xxxx'; // 请替换为第一步在控制台得到的 SecretKeyvoid login() async {String userSig = GenerateTestUserSig.genTestSig(userId, sdkAppId, secretKey);CompletionHandler result = await TUICallKit.instance.login(sdkAppId, userId, userSig);if (result.errorCode == 0) {print('Login success');} else {print('Login failed: ${result.errorCode} ${result.errorMessage}');}}
参数 | 类型 | 说明 |
userId | String | 客户根据自己的业务自定义用户 ID,只允许包含大小写英文字母(a-z A-Z)、数字(0-9)及下划线和连词符。 |
sdkAppId | int | |
secretKey | String | |
userSig | String | 一种安全保护签名,用于对用户进行登录鉴权认证,确认用户是否真实,阻止恶意攻击者盗用您的云服务使用权。 |
GenerateTestUserSig.genTestSig 函数生成 userSig。该方法中 secretKey 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量。setSelfInfo 接口设置头像和昵称:import 'package:tencent_calls_uikit/tencent_calls_uikit.dartvoid _setSelfInfo() {String nickname = "jack"String avatar = "https:/****/user_avatar.png"CompletionHandler result = TUICallKit.instance.setSelfInfo(nickname, avatar);}
参数 | 类型 | 说明 |
nickname | String | 目标用户的昵称。 |
avatar | String | 目标用户的头像。 |
calls 函数,并指定媒体类型和被叫方用户 ID 列表,来发起语音或视频通话。calls 接口同时支持一对一通话和多人通话。当 userIdList 中包含一个 userId 时,为一对一通话;当 userIdList 包含多个 userId 时,则为多人通话。import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';......void _call() {List<String> participantIds = ['vince'];CallMediaType mediaType = CallMediaType.audio;CallParams callParams = CallParams();TUICallKit.instance.calls(participantIds, mediaType, callParams);}
参数 | 类型 | 说明 |
userIdList | List<String> | 目标用户的 userId 列表。 |
mediaType | CallMediaType | 通话的媒体类型,例如视频通话、语音通话。 |
params | CallParams | 通话扩展参数,例如房间号、通话邀请超时时间,离线推送自定义内容等。 |

import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';void _enableAITranscriber() {TUICallKit.instance.enableAITranscriber(true);}

import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';......void _enableFloatWindow() {TUICallKit.instance.enableFloatWindow(true);}
enableIncomingBanner 开启/关闭来电横幅显示,该功能默认为关闭状态(false)。当被叫端收到来电时,默认展示全屏通话等待界面。启用此功能后,将首先显示一个横幅通知,然后根据需要切换到全屏通话界面。请注意,显示来电横幅需要授予悬浮窗权限,具体的显示策略将根据权限设置及应用当前是否在前台或后台运行来决定。
import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';......void _enableFloatWindow() {TUICallKit.instance.enableIncomingBanner(true);}
calls 方法发起通话时,若被叫用户列表超过一人,则自动视为群组通话。其他成员可通过 join 方法加入该多人通话。calls 方法发起通话时,若被叫用户列表(userIdList)超过一人,则自动视为群组通话。import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';void _call() {List<String> participantIds = ['vince','mike'];CallMediaType mediaType = CallMediaType.audio;CallParams callParams = CallParams();TUICallKit.instance.calls(participantIds, mediaType, callParams);}
参数 | 类型 | 说明 |
userIdList | List<String> | 目标用户的 userId 列表。 |
mediaType | CallMediaType | 通话的媒体类型,例如视频通话、语音通话。 |
params | CallParams | 通话扩展参数,例如房间号、通话邀请超时时间,离线推送自定义内容等。 |
join 方法加入指定的群组通话。import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';void join() {String callId = "123456";TUICallKit.instance.join(callId);}
参数 | 类型 | 说明 |
callId | String | 此次通话的唯一标识。 |
import 'package:tencent_calls_uikit/tencent_calls_uikit.dart';......void _setCallingBell() {TUICallKit.instance.enableMuteMode(true);}
图标 | 文件名称 | 说明 |
![]() | dialing.png | 接听来电图标 |
![]() | hangup.png | 挂断通话图标 |
![]() | mute_on.png | 关闭麦克风图标 |
![]() | handsfree.png | 关闭扬声器图标 |
![]() | camera_off.png | 关闭摄像头图标 |
![]() | add_user.png | 通话过程中邀请用户图标 |
文档反馈