Flutter VoIP通信插件flutter_pitel_voip的使用
Flutter VoIP通信插件flutter_pitel_voip
的使用
插件简介
flutter_pitel_voip
是一个支持 VoIP 通话的插件。要使用该服务,请联系 Pitel。
示例展示
注册扩展
呼叫界面
Pitel Connect 流程
当用户从 Pitel Connect 应用发起呼叫时,Pitel 服务器会向所有登录用户(接收到呼叫的用户)推送通知。当用户接受呼叫时,扩展将重新注册以接收呼叫。
功能特性
- 注册扩展
- 呼叫功能
- 挂断功能
- 开启/关闭麦克风
- 开启/关闭扬声器
安装步骤
1. 添加依赖包
使用命令行安装:
flutter pub add flutter_pitel_voip
或者手动添加到 pubspec.yaml
文件中:
flutter_pitel_voip: any
2. 获取依赖包
运行以下命令以获取依赖:
flutter pub get
3. 导入插件
在 Dart 文件中导入:
import 'package:flutter_pitel_voip/flutter_pitel_voip.dart';
4. 配置项目
在 app.dart
中配置 easyloading
import 'package:flutter_easyloading/flutter_easyloading.dart';
return MaterialApp.router(
builder: EasyLoading.init(),
);
Android 配置
在 android/app/src/main/AndroidManifest.xml
文件中添加权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
iOS 配置
在 Info.plist
文件中请求权限:
<key>NSMicrophoneUsageDescription</key>
<string>Use microphone</string>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>processing</string>
<string>remote-notification</string>
<string>voip</string>
</array>
确保 Podfile
的平台版本为 13.0
:
platform :ios, '13.0'
推送通知配置
请参考 PUSH_NOTIF.md 文件进行 Pushkit(iOS)和推送通知(Android)的设置。
故障排查
[仅限 Android] 如果在运行应用时出现 flutter_webrtc
错误,请更新以下文件中的代码:
$HOME/.pub-cache/hosted/pub.dartlang.org/flutter_webrtc-{version}/android/build.gradle
修改内容如下:
dependencies {
// 移除旧版本
// implementation 'com.github.webrtc-sdk:android:104.5112.03'
// 替换为新版本
implementation 'io.github.webrtc-sdk:android:104.5112.09'
}
示例代码
以下是完整的示例代码,展示如何使用 flutter_pitel_voip
插件。
1. 主应用配置 (app.dart
)
在主应用中包裹 MaterialApp
为 PitelVoip
:
import 'package:flutter/material.dart';
import 'package:flutter_pitel_voip/flutter_pitel_voip.dart';
Widget build(BuildContext context) {
return PitelVoip(
handleRegister: handleRegister, // 处理注册
handleRegisterCall: handleRegisterCall, // 处理呼叫注册
child: MaterialApp.router(
// 其他路由配置...
),
);
}
2. 主页面配置 (home_screen.dart
)
在主页面中包裹 PitelVoipCall
:
import 'package:flutter/material.dart';
import 'package:flutter_pitel_voip/flutter_pitel_voip.dart';
class HomeScreen extends StatelessWidget {
final String bundleId = 'your_bundle_id'; // 替换为实际值
final String appleTeamId = 'your_apple_team_id'; // 替换为实际值
final String domain = 'your_domain'; // 替换为实际值
final String outboundProxy = 'your_outbound_proxy'; // 替换为实际值
final int port = 5060; // 替换为实际值
final String uUser = '101'; // 替换为实际值
final String displayName = 'John Doe'; // 替换为实际值
final String urlWss = 'wss://your_wss_url'; // 替换为实际值
final String apiDomain = 'https://your_api_domain'; // 替换为实际值
[@override](/user/override)
Widget build(BuildContext context) {
return PitelVoipCall(
bundleId: bundleId,
appMode: 'dev', // 替换为实际模式(dev 或 production)
sipInfoData: SipInfoData.fromJson({
"authPass": "your_password",
"registerServer": domain,
"outboundServer": outboundProxy,
"port": port,
"accountName": uUser,
"displayName": displayName,
"wssUrl": urlWss,
"apiDomain": apiDomain,
}),
goBack: () {
Navigator.pop(context); // 返回上一页
},
goToCall: () {
Navigator.pushNamed(context, '/call'); // 跳转到呼叫页面
},
onCallState: (callState) {
// 设置呼叫状态到全局状态管理(如 Riverpod、GetX 等)
print('当前呼叫状态: $callState');
},
onRegisterState: (String registerState) {
print('注册状态: $registerState');
},
child: Center(child: Text('Home Page')),
);
}
}
3. 呼叫页面配置 (call_screen.dart
)
在呼叫页面中实现呼叫逻辑:
import 'package:flutter/material.dart';
import 'package:flutter_pitel_voip/flutter_pitel_voip.dart';
class CallPage extends StatelessWidget {
final CallState callState; // 从全局状态管理中获取呼叫状态
const CallPage({Key? key, required this.callState}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return CallScreen(
callState: callState,
goBack: () {
Navigator.pop(context); // 返回上一页
},
bgColor: Colors.cyan,
txtMute: '静音',
txtUnMute: '取消静音',
txtSpeaker: '扬声器',
textStyle: TextStyle(fontSize: 18),
titleTextStyle: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
showHoldCall: true, // 显示挂起按钮
);
}
}
更多关于Flutter VoIP通信插件flutter_pitel_voip的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter VoIP通信插件flutter_pitel_voip的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_pitel_voip
是一个用于在 Flutter 应用中实现 VoIP(Voice over IP)通信的插件。它允许你在应用中实现语音通话功能。以下是使用 flutter_pitel_voip
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_pitel_voip
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_pitel_voip: ^latest_version
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Dart 代码中,首先需要初始化 flutter_pitel_voip
插件。通常在 main.dart
或某个初始化函数中进行:
import 'package:flutter_pitel_voip/flutter_pitel_voip.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterPitelVoip.initialize();
runApp(MyApp());
}
3. 配置 VoIP 服务
根据你的 VoIP 服务提供商的要求,配置 flutter_pitel_voip
插件。这可能包括设置服务器地址、端口、认证信息等。
await FlutterPitelVoip.configure(
server: 'your.voip.server.com',
port: 5060,
username: 'your_username',
password: 'your_password',
);
4. 注册 SIP 账户
在使用 VoIP 功能之前,通常需要注册一个 SIP 账户:
await FlutterPitelVoip.registerSipAccount(
username: 'your_sip_username',
password: 'your_sip_password',
);
5. 拨打电话
要拨打电话,可以使用 makeCall
方法:
await FlutterPitelVoip.makeCall('recipient_sip_address');
6. 接听电话
要接听来电,可以使用 answerCall
方法:
await FlutterPitelVoip.answerCall();
7. 挂断电话
要挂断电话,可以使用 endCall
方法:
await FlutterPitelVoip.endCall();
8. 处理来电通知
你可以在应用中监听来电通知,以便在用户收到来电时执行某些操作。通常,你可以使用 flutter_local_notifications
插件来处理通知。
FlutterPitelVoip.onCallReceived.listen((call) {
// 处理来电通知
showIncomingCallNotification(call);
});
9. 处理通话状态
你可以监听通话状态的变化,以便在通话状态改变时执行某些操作:
FlutterPitelVoip.onCallStateChanged.listen((state) {
// 处理通话状态变化
print('Call state changed: $state');
});
10. 清理资源
在应用退出时,确保清理 VoIP 资源:
@override
void dispose() {
FlutterPitelVoip.dispose();
super.dispose();
}
11. 处理权限
在 Android 和 iOS 上,使用 VoIP 功能通常需要特定的权限。确保在应用中请求并处理这些权限。
import 'package:permission_handler/permission_handler.dart';
void requestPermissions() async {
await Permission.microphone.request();
await Permission.phone.request();
// 其他需要的权限
}
12. 处理后台运行(仅适用于 iOS)
在 iOS 上,VoIP 应用通常需要在后台运行以接收来电。你需要在 Info.plist
文件中添加 UIBackgroundModes
键:
<key>UIBackgroundModes</key>
<array>
<string>voip</string>
</array>