Flutter即时通讯插件flutter_agora_messenger的使用

Flutter即时通讯插件flutter_agora_messenger的使用

声明

声网呼叫邀请SDK

声网的云信令SDK只有Android和iOS版本的,这里对他们进行了Flutter的封装,可以结合声网视频通话、音频通话还有推送SDK完成音视频通话的功能。

相关文档

安装方式

方法一:通过GitHub安装

pubspec.yaml文件中添加以下内容:

dependencies:
  flutter_agora_messenger:
    path: ../flutter_agora_messenger

方法二:通过Pub安装

(此部分未提供具体步骤,通常需要在pubspec.yaml中添加依赖并执行flutter pub get

呼叫流程 (A 呼叫 B)

  1. 发起呼叫
    A调用startOutgoingCall发起呼叫,B收到remoteInvitationReceived事件。

  2. 挂断处理

    • A挂断时,A收到localInvitationCanceled,B收到remoteInvitationCanceled事件。
    • B挂断时,B收到remoteInvitationRefused,A收到localInvitationRefused事件。
  3. 接听处理
    B接听时,B收到remoteInvitationAccepted,A收到localInvitationAccept事件。

Demo

配置参数

在运行Demo之前,需要修改Configs中的参数:

  • appId: 声网的AppId。
  • tmpRtmToken: 声网RTM Token,参考RTM TOKEN生成文档
  • tmpLocalNumber: 本机号码。
  • tmpPeerNumber: 呼叫号码。

示例代码

以下是完整的示例代码,展示了如何使用flutter_agora_messenger插件实现即时通讯功能。

main.dart

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_agora_messenger/flutter_agora_messenger.dart';
import 'package:flutter_agora_messenger_example/Configs.dart'; // 配置文件
import 'package:flutter_agora_messenger_example/calling_page.dart'; // 呼叫页面
import 'package:flutter_agora_messenger_example/home_page.dart'; // 主页

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件
    FlutterAgoraMessenger().initial(Configs.appId);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (context, widget) {
        return widget!;
      },
      home: HomePage(), // 启动主页
    );
  }
}

HomePage.dart(主页)

import 'package:flutter/material.dart';
import 'package:flutter_agora_messenger/flutter_agora_messenger.dart';
import 'calling_page.dart'; // 呼叫页面

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Agora Messenger Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 跳转到呼叫页面
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => CallingPage()),
            );
          },
          child: Text('开始呼叫'),
        ),
      ),
    );
  }
}

CallingPage.dart(呼叫页面)

import 'package:flutter/material.dart';
import 'package:flutter_agora_messenger/flutter_agora_messenger.dart';
import 'package:flutter_agora_messenger_example/Configs.dart'; // 配置文件

class CallingPage extends StatefulWidget {
  [@override](/user/override)
  _CallingPageState createState() => _CallingPageState();
}

class _CallingPageState extends State<CallingPage> {
  String _status = '等待呼叫...';

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化呼叫监听
    FlutterAgoraMessenger().onRemoteInvitationReceived.listen((event) {
      setState(() {
        _status = '对方已接听';
      });
    });

    FlutterAgoraMessenger().onLocalInvitationCanceled.listen((event) {
      setState(() {
        _status = '呼叫已取消';
      });
    });

    FlutterAgoraMessenger().onRemoteInvitationRefused.listen((event) {
      setState(() {
        _status = '对方拒绝了呼叫';
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('呼叫页面'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_status),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 开始呼叫
                FlutterAgoraMessenger().startOutgoingCall(
                  Configs.tmpLocalNumber,
                  Configs.tmpPeerNumber,
                  Configs.tmpRtmToken,
                );
              },
              child: Text('发起呼叫'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter即时通讯插件flutter_agora_messenger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter即时通讯插件flutter_agora_messenger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_agora_messenger 是一个基于 Agora 的 Flutter 插件,用于实现即时通讯(IM)功能。Agora 提供了强大的实时音视频和消息传递能力,flutter_agora_messenger 插件则简化了在 Flutter 应用中集成 Agora IM 的过程。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 flutter_agora_messenger 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_agora_messenger: ^latest_version

然后运行 flutter pub get 来安装插件。

2. 初始化 Agora IM

在使用插件之前,你需要初始化 Agora IM。通常,你需要在应用的启动时进行初始化。

import 'package:flutter_agora_messenger/flutter_agora_messenger.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Agora IM
  await FlutterAgoraMessenger.init(
    appId: 'YOUR_AGORA_APP_ID',
  );
  
  runApp(MyApp());
}

3. 登录 Agora IM

用户需要登录到 Agora IM 才能发送和接收消息。你可以使用用户的唯一标识符(如用户ID)进行登录。

void login() async {
  try {
    await FlutterAgoraMessenger.login(
      userId: 'USER_ID',
      token: 'USER_TOKEN', // 如果需要的话
    );
    print('Login successful');
  } catch (e) {
    print('Login failed: $e');
  }
}

4. 发送消息

登录成功后,你可以发送消息给其他用户或群组。

void sendMessage() async {
  try {
    await FlutterAgoraMessenger.sendMessage(
      toUserId: 'RECEIVER_USER_ID',
      message: 'Hello, this is a test message!',
    );
    print('Message sent successfully');
  } catch (e) {
    print('Failed to send message: $e');
  }
}

5. 接收消息

你可以通过监听消息事件来接收其他用户发送的消息。

void listenForMessages() {
  FlutterAgoraMessenger.onMessageReceived.listen((message) {
    print('Received message: ${message.content} from ${message.senderId}');
  });
}

6. 登出

当用户不再需要使用 IM 功能时,可以登出。

void logout() async {
  try {
    await FlutterAgoraMessenger.logout();
    print('Logout successful');
  } catch (e) {
    print('Logout failed: $e');
  }
}

7. 处理错误

在使用过程中,可能会遇到各种错误。你可以通过捕获异常来处理这些错误。

try {
  // 调用 Agora IM 相关方法
} catch (e) {
  print('An error occurred: $e');
}
回到顶部