Integrate Daakia's video conferencing capabilities into your Flutter applications with ease.
This SDK provides a simple and efficient way to add video conferencing features to your Flutter apps, supporting both Android and iOS platforms.
β Android | β iOS
v4.5.1 - See CHANGELOG.md for detailed release notes and what's new.
add daakia_vc_flutter_sdk: to your pubspec.yaml dependencies then run flutter pub get
dependencies:
daakia_vc_flutter_sdk: ^4.5.1We require a set of permissions that need to be declared in your AppManifest.xml. These are required permissions
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.package">
<!-- Camera & Audio -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Network -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Bluetooth -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!-- Foreground Service (Meeting Notifications & Screen Share) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<!-- Notifications (Android 13+) -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
...
</manifest>-
Foreground Service Permissions (new in v4.4.1):
FOREGROUND_SERVICE: Required for background meeting notificationsFOREGROUND_SERVICE_MEDIA_PLAYBACK: For meeting audio when app is backgroundedFOREGROUND_SERVICE_MEDIA_PROJECTION: Required for screen sharing on Android 10+
-
POST_NOTIFICATIONS: Required for meeting notifications on Android 13+
These permissions are automatically merged from the SDK's manifest. You don't need to manually add them unless your app targets Android versions that require explicit declaration.
Daakia SDK supports Picture-in-Picture (PiP) mode on Android to allow users to continue their meeting while navigating away from the app.
π± Note: PiP is currently available only on Android. iOS support will be added in a future release.
-
Update
AndroidManifest.xml<application> <activity android:name=".MainActivity" android:supportsPictureInPicture="true"> </activity> </application>
-
Update
MainActivity.ktChange your activity from:
import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity()
to:
import cl.puntito.simple_pip_mode.PipCallbackHelperActivityWrapper class MainActivity : PipCallbackHelperActivityWrapper()
All of the following entries must be present in your Info.plist. Apple will reject your App Store submission if any purpose string is missing β even if your app doesn't call the API directly, a dependency may reference it.
<dict>
...
<!-- Required: video conferencing -->
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) uses your camera for video conferencing</string>
<!-- Required: audio conferencing -->
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) uses your microphone for audio conferencing</string>
<!-- Required: sharing images in chat -->
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) accesses your photo library to share images in the conference chat</string>
<!-- Required: keep audio running when app is backgrounded -->
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
...
</dict>Note:
NSPhotoLibraryUsageDescriptionis required by the SDK's chat attachment feature. Omitting it will cause App Store submission to fail even if the user never picks a photo.
To keep audio running when the app is backgrounded, also enable Background Modes β Audio, AirPlay, and Picture in Picture in Xcode under your target's Capabilities tab.
For iOS, the minimum supported deployment target is 14.0. Add the following to your Podfile:
platform :ios, '14.0'You may need to delete Podfile.lock and re-run pod install after updating the deployment target.
The SDK uses permission_handler to check and request camera/microphone access at the OS level. On iOS, you must explicitly enable these permissions in your Podfile's post_install block, otherwise permission checks will always return denied and the controls will not function correctly.
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['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
'PERMISSION_CAMERA=1',
'PERMISSION_MICROPHONE=1',
]
end
end
endAfter updating your Podfile, run:
cd ios && pod installimport 'package:daakia_vc_flutter_sdk/daakia_vc_flutter_sdk.dart';
await Navigator.push<void>(
context,
MaterialPageRoute(
builder: (_) => DaakiaVideoConferenceWidget(
meetingId: meetingUID,
secretKey: licenseKey,
isHost: isHost,
configuration: DaakiaMeetingConfiguration (optional),
),
),
);Use DaakiaVideoConferenceWidget to start the meeting.
To run the DaakiaVideoConferenceWidget, you will need to pass the following parameters:
-
meetingId(String):
This parameter is required to join a specific meeting. It helps identify the unique meeting to which the user will connect. -
secretKey(String):
This is a license key that grants access to the meeting service. It is necessary for secure access. -
isHost(bool, optional):
This optional parameter defines the user's role. When set totrue, the user will join as the host of the meeting; otherwise, they will be a participant. -
configuration(DaakiaMeetingConfiguration, optional):
Provides advanced customization like metadata and participant name behavior.
For full details, see DaakiaMeetingConfiguration Documentation
To use the Daakia Video Conference SDK, you will need a meetingId and a secretKey (license key). These are required for accessing and initiating meetings.
How to Obtain:
- Contact Us: Reach out to us directly at contact@daakia.co.in. Our team will assist you in setting up your account and providing the necessary credentials.
- Visit Our Website: You can also find more information and request access by visiting our website: https://www.daakia.co.in/.
We will guide you through the process of creating meetings and obtaining your unique license key.
The SDK supports Datadog integration for advanced logging, monitoring, and crash reporting.
This is optional β your app will run normally without it.
If enabled, all SDK-related logs are automatically sent to Datadog.
You donβt need to call any manual log functions β everything is handled internally by the SDK.
To enable Datadog, initialize the service at app startup (e.g., in main.dart):
import 'package:daakia_vc_flutter_sdk/service/daakia_vc_datadog_service.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DaakiaVcDatadogService.initialize(
clientToken: "<YOUR_DATADOG_CLIENT_TOKEN>",
env: "<YOUR_ENV>",
serviceName: "<YOUR_SERVICE_NAME>",
applicationId: "<YOUR_DATADOG_APPLICATION_ID>",
version: "<YOUR_APP_VERSION>",
);
runApp(const MyApp());
}π You can obtain the required Datadog credentials in the same way as the meetingId and secretKey β by reaching out to our team.
Screen sharing is supported on Android 10+. The SDK uses a media projection foreground service for this functionality.
Required permissions (automatically merged from SDK's manifest):
FOREGROUND_SERVICEFOREGROUND_SERVICE_MEDIA_PROJECTION(required for screen capture)POST_NOTIFICATIONS(for Android 13+)
AndroidManifest.xml to declare the service with mediaProjection type only:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application>
...
<service
android:name="de.julianassmann.flutter_background.IsolateHolderService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="mediaProjection" />
</application>
</manifest>Note: In v4.4.1, the
foregroundServiceTypewas changed from"mediaProjection|microphone|camera"to only"mediaProjection"to fix Android 16 compatibility issues. RemoveFOREGROUND_SERVICE_CAMERAandFOREGROUND_SERVICE_MICROPHONEpermissions if they were previously declared.
On iOS, screen sharing requires a broadcast extension to capture content from other apps. Refer to the iOS setup guide for detailed instructions.
For support, email contact@daakia.co.in.