如果你的目标平台为 iOS,你的开发环境需要满足以下需求:
如果你的目标平台为 Android,你的开发环境需要满足以下需求:
如果你的目标平台为 macOS,你的开发环境需要满足以下需求:
如果你的目标平台为 Windows,你的开发环境需要满足以下需求:
更多环境要求细节,详见 Install Flutter。
flutter doctor
命令检查开发环境和运行环境是否满足要求。一个有效的声网开发者账号。
参考以下步骤创建一个声网项目:
声网会给每个项目自动分配一个 App ID 作为项目唯一标识。
在声网控制台的项目管理页面,找到你的项目,点击 App ID 右侧的 图标,即可获取项目的 App ID。
为提高项目的安全性,声网推荐使用 Token 对即将加入频道的用户进行鉴权。
为了方便测试,声网控制台提供生成 RTC 临时 Token 的功能。参考以下步骤获取 RTC 临时 Token:
testroom
,然后点击生成。后续调用 API 加入频道时,请确保填入的频道名与这里的频道名一致。本文使用 Visual Studio Code 创建 Flutter 项目。你需要在 Visual Studio Code 中安装 Flutter plugin。关于详细设置可以参考 Set up an editor。
在 pubspec.yaml
文件中添加以下依赖项:
agora_rtc_engine
依赖项,集成声网 Flutter SDK。关于 agora_rtc_engine
的最新版本可以查询 https://pub.dev/packages/agora_rtc_engine。permission_handler
依赖项,安装权限处理插件。environment:
sdk: ">=2.12.0 <3.0.0"
# 依赖项
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
# 声网 Flutter SDK 依赖项,请使用最新版本的 agora_rtc_engine
agora_rtc_engine: ^5.1.0
# 权限处理插件依赖项
permission_handler: ^8.3.0
由于 JCenter 即将关闭,声网已停止将 RTC Android SDK 包发布到 JCenter,改为发布到 JitPack。因此,编译 Android 应用时,请确保在项目的 /android/build.gradle
文件中添加如下行:
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
打开 main.dart
,删除
void main() => runApp(MyApp());
语句下方的全部代码。并按照步骤增加以下代码:
导入以下 package:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:agora_rtc_engine/rtc_engine.dart';
import 'package:permission_handler/permission_handler.dart';
输入你获取的 App ID 和临时 Token。
/// 定义 App ID 和 Token
const APP_ID = '<Your App ID>';
const Token = '<Your Token>';
定义 MyApp 应用类:
// 应用类
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
定义应用状态类,包含以下设置:
// 应用状态类
class _MyAppState extends State<MyApp> {
bool _joined = false;
int _remoteUid = 0;
bool _switch = false;
@override
void initState() {
super.initState();
initPlatformState();
}
// 初始化应用
Future<void> initPlatformState() async {
// 获取麦克风权限
if (defaultTargetPlatform == TargetPlatform.android) {
await [Permission.microphone].request();
}
// 创建 RTC 客户端实例
RtcEngineContext context = RtcEngineContext(APP_ID);
var engine = await RtcEngine.createWithContext(context);
// 定义事件处理逻辑
engine.setEventHandler(RtcEngineEventHandler(
joinChannelSuccess: (String channel, int uid, int elapsed) {
print('joinChannelSuccess ${channel} ${uid}');
setState(() {
_joined = true;
});
}, userJoined: (int uid, int elapsed) {
print('userJoined ${uid}');
setState(() {
_remoteUid = uid;
});
}, userOffline: (int uid, UserOfflineReason reason) {
print('userOffline ${uid}');
setState(() {
_remoteUid = 0;
});
}));
// 设置频道场景为直播
await engine.setChannelProfile(ChannelProfile.LiveBroadcasting);
// 设置用户角色为主播
await engine.setClientRole(ClientRole.Broadcaster);
// 加入频道,频道名为 123
await engine.joinChannel(Token, '123', null, 0);
}
// 构建简单通话 UI
Widget build(BuildContext context) {
return MaterialApp(
title: '声网 Audio quickstart',
home: Scaffold(
appBar: AppBar(
title: Text('声网 Audio quickstart'),
),
body: Center(
child: Text('Please chat!'),
),
),
);
}
}
在项目根目录运行以下命令安装依赖项。
flutter packages get
在 Visual Studio Code 右下角状态栏选择需要运行项目的设备。运行以下命令启动示例项目。
flutter run
按照以下步骤测试你的 app:
Demo/index.html
文件,并输入相同的 App ID 、频道名称和临时 Token。你的朋友加入频道后,可以听到你的声音。