文档捉虫大赛:人工智能与机器学习专题> HOT
本文将介绍如何用最短的时间完成 TUICallKit 组件的接入,跟随本文档,您将在一个小时的时间内完成如下几个关键步骤,并最终得到一个包含完备 UI 界面的视频通话功能。

环境准备

Flutter 3.0及更高版本。

步骤1:开通服务

TUICallKit 是基于腾讯云 即时通信 IM实时音视频 TRTC 两项付费 PaaS 服务构建出的音视频通信组件。您可以按照如下步骤开通相关的服务并体验 7 天的免费试用服务:
1. 登录到 即时通信 IM 控制台,单击创建新应用,在弹出的对话框中输入您的应用名称,并单击确定



2. 单击刚刚创建出的应用,进入基本配置页面,并在页面的右下角找到开通腾讯实时音视频服务功能区,单击免费体验即可开通 TUICallKit 的 7 天免费试用服务。如果需要正式应用上线,可以单击 前往加购 即可进入购买页面。



注意
IM 音视频通话能力针对不同的业务需求提供了差异化的付费版本供您选择,您可以在 IM 购买页 了解包含功能并选购您适合的版本。
3. 在同一页面找到 SDKAppID密钥(SecretKey) 并记录下来,它们会在后续的 步骤四:登录 TUI 组件 中被用到。



友情提示: 单击免费体验以后,部分之前使用过 实时音视频 TRTC 服务的用户会提示:
[-100013]:TRTC service is suspended. Please check if the package balance is 0 or the Tencent Cloud accountis in arrears
因为新的 IM 音视频通话能力是整合了腾讯云实时音视频 TRTC即时通信 IM 两个基础的 PaaS 服务,所以当 实时音视频 TRTC 的免费额度(10000分钟)已经过期或者耗尽,就会导致开通此项服务失败,这里您可以单击 TRTC 控制台,找到对应 SDKAppID 的应用管理页,示例如图,开通后付费功能后,再次启用应用即可正常体验音视频通话能力。




步骤2:导入组件

使用 Flutter 导入组件,具体步骤如下:
1. 在您的 pubspec.yaml 文件中添加 tencent_calls_uikit 插件依赖,单击插件超链接切换到 Versions 目录下查询最新版本。
dependencies:
tencent_calls_uikit: 最新版本
2. 执行以下命令安装组件:
flutter pub get

步骤3:完成工程配置

1. 将 TUICallKit 的 navigatorObserver 添加到 App 组件中,以 MateriaApp 为例,代码如下:
import 'package:tencent_calls_uikit/tuicall_kit.dart';

MaterialApp
     navigatorObservers:[TUICallKit.navigatorObserver]
     ...
2. 如果您需要编译运行在 Android 平台,由于我们在 SDK 内部使用了Java 的反射特性,需要将 SDK 中的部分类加入不混淆名单,因此需要您在 proguard-rules.pro 文件中添加如下代码:
-keep class com.tencent.** { *; }
3. 如果您的工程需要在 iOS 模拟器上调试,您需要在工程的/ios/Podfile文件中添加以下代码:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['VALID_ARCHS'] = 'arm64 arm64e x86_64'
config.build_settings['VALID_ARCHS[sdk=iphonesimulator*]'] = 'x86_64'
end
end
end
4. 如果您需要使用 iOS 的音视频功能,您需要授权麦克风和摄像头的使用权限。
授权操作方法:在您的 iOS 工程的 Info.plist 中添加以下两项,分别对应麦克风和摄像头在系统弹出授权对话框时的提示信息。
<key>NSCameraUsageDescription</key>
<string>CallingApp需要访问您的相机权限,开启后录制的视频才会有画面</string>
<key>NSMicrophoneUsageDescription</key>
<string>CallingApp需要访问您的麦克风权限,开启后录制的视频才会有声音</string>

步骤4:登录 TUICallKit 组件

在您的项目中添加如下代码,这个步骤异常关键,因为只有在登录成功后才能正常使用 TUICallKit 的各项功能,故请您耐心检查相关参数是否配置正确:
TUIResult result = TUICallKit.instance.login(SDKAppID, // 请替换为第一步得到的SDKAppID
'userId', // 请替换为您的User ID
'userSig'); // 您可以在控制台计算一个UserSig并填到该位置
在调用完成后,您可以通过 TUIResult`类型的返回值查看是否登录成功。
参数说明:
sdkAppId:在步骤一中的最后一步中您已经获取到,这里不再赘述。
userId:当前用户的 ID,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)。
userSig:使用步骤三中获取的 SecretKey 对 SDKAppID、UserID 等信息进行加密,就可以得到 UserSig,它是一个鉴权用的票据,用于腾讯云识别当前用户是否能够使用 TRTC 的服务。您可以通过控制台中的 辅助工具 生成一个临时可用的 UserSig,也可以参见 Github 中的示例代码 进行调试,更多信息请参见 如何计算及使用 UserSig
注意:
尊敬的开发者,您好,当前步骤是目前开发者反馈问题最多的步骤,常见问题如下:
sdkAppId 设置错误,国内站的 SDKAppID 一般是以140开头的10位整数。
userSig 被错配成了加密密钥(Secretkey),userSig 是用 SecretKey 把 sdkAppId、userId 以及过期时间等信息加密得来的,而不是直接把 Secretkey 配置成 userSig。
userId 被设置成“1”、“123”、“111”等简单字符串,由于 TRTC 不支持同一个 UserID 多端登录,所以在多人协作开发时,形如 “1”、“123”、“111” 这样的 userId 很容易被您的同事占用,导致登录失败,因此我们建议您在调试的时候设置一些辨识度高的 userId。
警告:
Github 中的示例代码使用了 genTestUserSig 函数在本地计算 userSig 是为了更快地让您跑通当前的接入流程,但该方案会将您的 SecretKey 暴露在 App 的代码当中,这并不利于您后续升级和保护您的 SecretKey,所以我们强烈建议您将 userSig 的计算逻辑放在服务端进行,并由 App 在每次使用 TUICallKit 组件时向您的服务器请求实时计算出的 userSig。

步骤5:拨打通话

1对1视频通话

通过调用 TUICallKit 的 call 函数并指定通话类型和被叫方的 userId,就可以发起语音或者视频通话。
// 假设给mike拨打视频电话
TUICallKit.instance.call('mike', TUICallMediaType.video);
参数
类型
含义
userId
String
目标用户的 UserID:"mike"
callMediaType
通话的媒体类型,示例:TUICallMediaType.videoTUICallMediaType.audio

群内视频通话

通过调用 TUICallKit 的 groupCall 函数并指定通话类型和被叫方的 UserID 列表,就可以发起群内的语音或者视频通话。
// 假设在groupId:0001的群组内,向denny, mike 和 tommy 发起视频通话
TUICallKit.instance.groupCall('0001', ['denny', 'mike', 'tommy'], TUICallMediaType.video);
参数
类型
含义
groupId
String
群组 ID
userIdList
Array
目标用户的 userId 列表
callMediaType
通话的媒体类型,示例:TUICallMediaType.videoTUICallMediaType.audio
说明
群组的创建详见: IM 群组管理 ,或者您也可以直接使用 IM TUIKit,一站式集成聊天、通话等场景。
TUICallKit 目前还不支持发起非群组的多人视频通话,如果您有此类需求,欢迎反馈: TUIKit 需求收集表

步骤6:接听通话

步骤4 完成后,收到来电请求后,TUICallKit 组件会自动启动相应的接听界面。

步骤7:更多特性

设置昵称与头像

如果您需要自定义昵称或头像,可以使用如下接口进行更新:
// 函数定义为: Future<TUIResult> setSelfInfo(String nickname, String avatar)
TUIResult result = TUICallKit.instance.setSelfInfo('userName', 'url:********');
注意
因为用户隐私限制,非好友之间的通话,被叫的昵称和头像更新可能会有延迟,一次通话成功后就会顺利更新。

离线唤醒

完成以上步骤,就可以实现音视频通话的拨打和接通,但如果您的业务场景需要在 应用的进程被杀死后或者应用退到后台后,还可以正常接收到音视频通话请求,就需要增加离线唤醒功能,详情请参见 离线唤醒(Flutter)

悬浮窗功能

如果您的业务需要开启悬浮窗功能,您可以在 TUICallKit 组件初始化时调用以下接口开启该功能:
TUICallKit.instance.enableFloatWindow(true);

通话状态回调

如果您的业务需要 观察通话状态,例如通话开始、结束,以及通话过程中的网络质量等等,可以添加观察者,观察如下事件:
TUICallEngine.instance.addObserver(TUICallObserver(
onError: (int code, String message) {
//您的回调处理逻辑
}, onCallBegin: (TUIRoomId roomId, TUICallMediaType callMediaType, TUICallRole callRole) {
//您的回调处理逻辑
}, onCallEnd: (TUIRoomId roomId, TUICallMediaType callMediaType, TUICallRole callRole, double totalTime) {
//您的回调处理逻辑
},, onUserNetworkQualityChanged: (List<TUINetworkQualityInfo> networkQualityList) {
//您的回调处理逻辑
}, onCallReceived: (String callerId, List<String> calleeIdList, String groupId, TUICallMediaType callMediaType) {
//您的回调处理逻辑
}
));

自定义铃音

如果您需要自定义来电铃音,可以通过如下接口进行设置:
TUICallKit.instance.setCallingBell('flie path');

常见问题

错误提示“The package you purchased does not support this ability”?

如遇以上错误提示,是由于您当前应用的音视频通话能力包过期或未开通,请参见 步骤1:开通服务,领取或者开通音视频通话能力,进而继续使用 TUICallKit 组件。

如何购买套餐?

请参考购买链接 音视频通话 SDK 价格总览,如有其他问题,请单击页面右侧,进行售前套餐咨询,或者加入 QQ 群:605115878,进行咨询和反馈。

Android 编译报错:uses-sdk:minSdkVersion 16 cannot be smaller than version 19.

详细的报错信息如下:
uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:tencent_calls_uikit] /Users/xxx/xxxx/xxxx/xxxx/demo/flutter/callkit/callkit/build/tencent_calls_uikit/intermediates/merged_manifest/debug/AndroidManifest.xml as the library might be using APIs not available in 16
Suggestion: use a compatible library with a minSdk of at most 16,
or increase this project's minSdk version to at least 19,
or use tools:overrideLibrary="com.tencent.cloud.tuikit.flutter.tuicallkit" to force usage (may lead to runtime failures)
这是因为 tencent_call_uikit Plugin Android 端支持的 minSdkVersion 是 19,可以将您工程中的 android/app/build.gradle文件中的 minSdkVersion修改为 19 及其以上即可。

交流与反馈

如果您在使用过程中,有什么建议或者意见,可以在这里反馈:TUICallKit 产品反馈问卷,感谢您的反馈。
如果您是开发者,也欢迎您加入我们的 TUICallKit 技术交流 QQ 群:605115878,进行技术交流和产品沟通。