flutter_voximplant
Flutterアプリケーションに音声およびビデオ通話を埋め込むためのVoximplantプラグイン。
Voximplant Flutter SDK
{"sdk":"flutter"}{"sdk":"flutter"}^6.0.0以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。
Voximplant Flutter SDK for embedding voice and video communication into Flutter applications.
| Platform | Minimum version |
|---|---|
| Android | 5.0 (API 21) |
| iOS | 12.0 |
>= 3.24.0^3.5.0compileSdk 35 (AGP 8.6+, Kotlin 2.x are recommended)Add the dependency to your application's pubspec.yaml:
dependencies:
flutter_voximplant: ^3.17.0
Then run:
flutter pub get
Add NSMicrophoneUsageDescription and NSCameraUsageDescription entries to your application's Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>Microphone is required to make audio calls</string>
<key>NSCameraUsageDescription</key>
<string>Camera is required to make video calls</string>
It is required to add Java 11 support in android/app/build.gradle:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}
To get started, you'll need to register a free Voximplant developer account.
Client is the main class of the SDK that provides access to Voximplant’s functions,
the Voximplant().getClient() method is used to get its instance:
import 'package:flutter_voximplant/flutter_voximplant.dart';
VIClient client = Voximplant().getClient();
The VIClient.getClientState() method is used to get the current state of connection
to the Voximplant cloud and perform the actions according to it.
When initializing and connecting the SDK to the Voximplant cloud, you need to specify the node to connect to. Your node is bound to your Voximplant account. To find which node your account belongs to, log in to your control panel and see the Credentials for working with API, SDK, SIP section on the main dashboard.
const accountNode = VINode.NodeX;
Future<String> loginWithPassword(String username, String password) async {
VIClientState clientState = await _client.getClientState();
if (clientState == VIClientState.LoggedIn) {
return _displayName;
}
if (clientState == VIClientState.Disconnected) {
await _client.connect(node: accountNode);
}
VIAuthResult authResult = await _client.login(username, password);
_displayName = authResult.displayName;
return _displayName;
}
To initiate a call we need the VIClient.call method.
There is a VICallSettings class which could contain custom data and extra headers (SIP headers).
Since the call can behave in different ways, there is a group of call events.
They can be triggered by the VICall class instance as the class contains all the functionality for call management.
Future<VICall> makeAudioCall(String number) async {
VICall call = await _client.call(number);
call.onCallDisconnected = _onCallDisconnected;
call.onCallFailed = _onCallFailed;
call.onCallConnected = _onCallConnected;
call.onCallRinging = _onCallRinging;
call.onCallAudioStarted = _onCallAudioStarted;
return call;
}
_onCallConnected(VICall call, Map<String, String>? headers) {
print('Call connected');
}
Client.onIncomingCall is used to get incoming calls.
There are three methods for an incoming call: answer, decline and reject. An audio stream can be sent only after the answer method call.
CallService._() {
_client = Voximplant().getClient();
_client.onIncomingCall = _onIncomingCall;
}
_onIncomingCall(VIClient client, VICall call, bool video, Map<String, String>? headers) async {
await call.answer();
}
Audio call can be put on/off hold
_hold() async {
try {
await _call.hold(!_isOnHold);
setState(() {
_isOnHold = !_isOnHold;
});
} catch (e) {
}
}
VIAudioDeviceManager class API allow to:
All types of audio devices are represented in the VIAudioDevice enum.
Note that there are platform specific nuances in audio device management.
To select an audio device:
_selectAudioDevice(VIAudioDevice device) async{
VIAudioDeviceManager audioDeviceManager = Voximplant().getAudioDeviceManager();
audioDeviceManager.onAudioDeviceChanged = _onAudioDeviceChange;
await audioDeviceManager.selectAudioDevice(device);
}
_onAudioDeviceChange(VIAudioDeviceManager audioDeviceManager, AudioDevice audioDevice) {
// audio device is changed
}
https://github.com/voximplant/flutter_demos
A sample application is available in example/. To run it:
cd example
flutter pub get
flutter run