Upscope Flutter Plugin
A Flutter plugin that wraps the native Upscope cobrowsing SDKs for Android and iOS.
Overview
This plugin provides a unified Flutter API for integrating Upscope's cobrowsing functionality into your Flutter applications. It supports both Android and iOS platforms through a federated plugin architecture.
Features
- ✅ Initialize Upscope with configuration
- ✅ Connect/disconnect from Upscope servers
- ✅ Session management (start, stop, decline)
- ✅ Real-time event streaming
- ✅ Custom messaging
- ✅ Screen sharing with app-only or full-screen capture
- ✅ Automatic platform registration
- ✅ PlatformView support for native overlays
- ✅ Comprehensive example app
Installation
Add this to your package's pubspec.yaml file:
dependencies:
upscope_flutter: ^1.0.13
Usage
Basic Setup
import 'package:upscope_flutter/upscope_flutter.dart';
// Initialize Upscope
final config = UpscopeConfiguration(
apiKey: 'your-api-key',
);
final upscopeManager = await Upscope.initialize(config);
Connecting and Managing Sessions
// Connect to Upscope
await upscopeManager.connect();
// Get lookup code for session
final lookupCode = await upscopeManager.getLookupCode();
print('Lookup code: $lookupCode');
// Send custom message
await upscopeManager.customMessage('Hello from Flutter!');
// Stop session
await upscopeManager.stopSession();
// Disconnect
await upscopeManager.disconnect();
Event Handling
// Subscribe to connection status changes
upscopeManager.subscribeToIsConnected((isConnected) {
print('Connection status changed: $isConnected');
});
// Subscribe to recording status changes
upscopeManager.subscribeToIsRecording((isRecording) {
print('Recording status changed: $isRecording');
});
// Subscribe to short ID changes
upscopeManager.subscribeToShortId((shortId) {
print('Short ID: $shortId');
});
Using Native Overlays
For apps that need to display native overlays (like drawing tools), you can use the UpscopeOverlayView:
import 'package:upscope_flutter/upscope_flutter.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Stack(
children: [
// Your app content
MyAppContent(),
// Native overlay view
Positioned.fill(
child: UpscopeOverlayView(
onViewCreated: () {
print('Overlay view created');
},
),
),
],
);
}
}
Configuration Options
The UpscopeConfiguration class supports the following options:
| Parameter | Type | Default | Description |
|---|---|---|---|
apiKey |
String |
required | Your Upscope API key |
metadata |
Map<String, dynamic> |
{} |
Additional metadata |
Platform-Specific Setup
Android
-
The plugin automatically includes the Upscope Android SDK.
-
Add required permissions to
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.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<!-- For full-screen capture (optional) -->
<uses-permission android:name="android.permission.MEDIA_PROJECTION" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
iOS
- Add the Upscope iOS SDK to your app's
ios/Podfile:
platform :ios, '16.0' # Required for UpscopeIO SDK
target 'Runner' do
use_frameworks!
# Add Upscope iOS SDK
pod 'UpscopeIO', :git => 'https://github.com/upscopeio/cobrowsing-ios.git', :tag => 'v2025.6.4'
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
Note: UpscopeIO requires iOS 16.0 or later as the minimum deployment target.
-
Run
pod installin theiosdirectory to install dependencies. -
For full-screen capture, add screen recording capability to your app's entitlements.
API Reference
UpscopeManager
The main class for interacting with the Upscope SDK.
Methods
initialize(UpscopeConfiguration config)- Initialize the SDKconnect()- Connect to Upscope serversdisconnect()- Disconnect from serversreset()- Reset SDK stategetShortId()- Get session short IDgetLookupCode()- Get/generate lookup codeupdateConnection({Map<String, dynamic>? metadata})- Update connection metadatagetWatchLink()- Get session watch URLstopSession()- End current sessioncustomMessage(String message)- Send custom messagedeclineSession()- Decline incoming sessiongetIsConnected()- Get connection statusgetIsConnecting()- Get connecting statusgetIsRecording()- Get recording statusgetUniqueConnectionId()- Get unique connection identifier
Event Subscriptions
subscribeToIsConnected(Function(bool) callback)subscribeToIsConnecting(Function(bool) callback)subscribeToIsRecording(Function(bool) callback)subscribeToShortId(Function(String) callback)subscribeToLookupCode(Function(String) callback)subscribeToUniqueConnectionId(Function(String) callback)
UpscopeOverlayView
A widget for displaying native overlay content.
Properties
onViewCreated- Callback when the native view is createdlayoutDirection- Layout direction for the viewgestureRecognizers- Gesture recognizers to attach to the view
Troubleshooting
Common Issues
- Plugin not found: Ensure you've added the plugin to your
pubspec.yamland runflutter pub get - Platform not supported: This plugin only supports Android and iOS
Debug Mode
Enable logging in your configuration to see detailed debug information:
final config = UpscopeConfiguration(
apiKey: 'your-api-key',
);
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License
This plugin is provided under the same license as the Upscope SDKs. Please refer to Upscope's official documentation and licensing terms for production use.
Support
For support with the Upscope service itself, please contact Upscope support. For issues with this Flutter plugin, please file an issue in this repository.