firetell_flutter_sdk 1.1.1
firetell_flutter_sdk: ^1.1.1 copied to clipboard
Firetell WebRTC VoIP SDK for Flutter — audio and video calls and VoIP push notifications (FCM & APNs) with native WebSocket event-based signaling.
Changelog #
All notable changes to the firetell_flutter_sdk package will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.1.1 - 2026-09-22 #
Fixed #
-
iOS CallKit UUID requirement — iOS CallKit rejects call IDs that are not in UUID format. The VoIP push payload from the Firetell server uses its own string format (
call_xxxxxxxx), which caused CallKit to silently fail on iOS.Added
CallIdMapper(lib/src/utils/call_id_mapper.dart): a bidirectional singleton registry that maps server call IDs to RFC 4122 v4 UUIDs at the point ofshowIncomingCall(). The UUID is passed toCallKitParams.idfor CallKit, while all internal operations (WebSocket signaling, HTTP reject,activeCallsmap) continue to use the original server call ID.- UUID is generated using
dart:math(Random.secure()) — no new dependencies added. dismissIncomingCall(serverCallId)now resolves the correct UUID before callingendCall().- Mapper entries are cleaned up on accept, decline, end, and timeout to prevent memory leaks.
- Android is unaffected: the mapper's fallback path returns the raw ID if no UUID mapping exists.
- UUID is generated using
Added #
CallIdMapperexported from the top-levelfiretell_flutter_sdk.dartfor consumer-side introspection and debugging.
1.1.0 - 2026-09-14 #
Added #
- Mobile Video Call Support:
- Full video calling support with native WebSocket signaling and WebRTC peer connection.
- Camera controls on Call:
isCameraOffboolean property to check current camera transmission state.muteVideo()to disable local video tracks and notify remote peer viacall.camera.unmuteVideo()to re-enable local video tracks and notify remote peer viacall.camera.toggleCamera()convenience method to toggle camera on/off.switchCamera()to switch between front-facing and rear-facing device cameras usingHelper.switchCamera.onCameraChangebroadcast stream to listen for local camera mute/unmute state changes.
- SDP video auto-detection:
- Automatically detects video media description (
m=video) in remote SDP offers received via WebSocket signaling (call.offer). - Sets
isVideo = trueinCall.accept()if SDP offer contains video, ensuring matching audio/video media negotiation.
- Automatically detects video media description (
- WebSocket signaling updates:
- Added
call.cameramessage handler in_handleWsMessageto synchronize camera state events between peers.
- Added
- Example Application Video Calling:
- Created dedicated full-screen VideoCallScreen with local Picture-in-Picture preview, remote video feed rendering, camera switch button, camera mute/unmute toggle, microphone mute, speakerphone toggle, and call duration badge.
- Added dedicated Video Call action button on the dial pad alongside the audio call button.
- Updated in-app incoming call dialog to show video calling indicators when
call.isVideois true. - Exported
package:flutter_webrtc/flutter_webrtc.dartfrom package library entry point for seamless UI renderer integration (RTCVideoRenderer,RTCVideoView,RTCVideoViewObjectFit).
- Platform Permissions:
- Added
android.permission.CAMERAandNSCameraUsageDescriptionsetup guidance in documentation and README.
- Added
1.0.3 - 2026-09-14 #
Added #
- Speakerphone Control:
- Added
isSpeakerOnboolean property to Call to check current speaker status. - Added
setSpeakerphoneOn(bool enable)to route audio between device loudspeaker and earpiece. - Added
toggleSpeaker()convenience method to toggle speakerphone on/off. - Added
onSpeakerChangebroadcast stream to listen for speaker state changes. - Automatically resets speakerphone to earpiece on call cleanup.
- Added
- Phone Numbers (DIDs) & Caller ID Support:
- Added
PhoneNumber,PhoneNumberCapabilities, andPhoneNumbersResponsemodels. - Added
client.getPhoneNumbers({page, limit})andclient.getPhoneNumbersResponse({page, limit})to fetch agent/team accessible phone numbers for outbound Caller ID (from). - Updated example
DialpadScreento automatically fetch available DIDs and provide an interactive Caller ID dropdown selector when dialing outbound.
- Added
- Backend Device Push Token Cleanup on Logout:
- Upgraded
FiretellClient.logout({deviceId})to an asynchronous method that callsPOST /api/v1/me/logoutwithdevice_idto unregister push tokens on the server, ensuring the device stops receiving VoIP incoming calls after logout. - Automatically resolves
deviceIdfromDeviceIdHelper.getOrCreate()if not explicitly specified.
- Upgraded
- Example Application:
- Added a dedicated Speaker/Earpiece toggle button with live state feedback to the active call screen.
- Added dynamic Caller ID selector on the Dial Pad screen.
- Streamlined logout flow via
await client.logout().
1.0.2 - 2026-09-14 #
Changed #
- Upgraded Dependencies:
- Updated to modern packages:
flutter_callkit_incoming: ^3.1.5,flutter_webrtc: ^1.6.2,web_socket_channel: ^3.0.3,http: ^1.6.0,uuid: ^4.6.0,shared_preferences: ^2.5.5,device_info_plus: ^13.2.0.
- Updated to modern packages:
- flutter_callkit_incoming 3.x Compatibility:
- Adapted
CallKitHandlerand example handlers to supportflutter_callkit_incoming 3.xsealed class event hierarchy (CallEventActionCallAccept,CallEventActionCallDecline, etc.). - Configured
missedCallNotification:andcallingNotification:inCallKitParams. - Resolved
CallEventnaming conflict with SDK's internal enum via explicit namespace aliasing.
- Adapted
Fixed #
- WebRTC Local Description Handling:
- Fixed
localDescriptiongetter error influtter_webrtcby utilizing asynchronousawait pc.getLocalDescription().
- Fixed
- Linter & Code Health:
- Fixed
unawaited_return_in_try_blocklint in WebSocket connect handshake. - Replaced unhandled
catchErrorwith cleanunawaitedtry/catch block inFiretellClient. - Added unnamed
library;directive for Dart 3 library doc comment compliance. - Renamed documentation directory to
doc/and main markdown file toREADME.mdper pub.dev package layout guidelines.
- Fixed
1.0.1 - 2026-09-14 #
Fixed #
- iOS VoIP Push Token Registration:
- Differentiated Apple PushKit VoIP tokens (
PKPushRegistry) from standard Firebase FCM tokens. - Used
FlutterCallkitIncoming.getDevicePushTokenVoIP()to obtain the raw 64-character hex APNs VoIP token on iOS forPOST /api/v1/me/devices/voip-push-token. - Maintained FCM token registration for standard notification push (
POST /api/v1/me/devices/notification-push-token) to handle background call cancellations (call.canceled) and endings (call.ended) across both iOS and Android. - Updated FCM token refresh listener to automatically synchronize updated tokens based on the running platform.
- Differentiated Apple PushKit VoIP tokens (
1.0.0 - 2026-09-14 #
Added #
-
Core WebRTC Calling:
FiretellClientclass for managing sessions, tokens, device registrations, and SSE event streaming.Callclass implementing full WebRTC lifecycle (makeCall,accept,reject,hangup,hold/unhold,mute/unmute,sendDTMF).- Native WebSocket per-call signaling protocol using event-based messages (
session.connect,call.offer,call.answer,call.ice_candidate,call.hangup). - Full ICE candidate gathering before sending SDP offer/answer for maximum NAT traversal reliability.
-
VoIP Push Notification & Cold-Start Support:
PushTokenServicefor registering device VoIP push tokens (fcm_voip,apns_voip,fcm_data) with backend REST API.DeviceIdHelperproviding persistent unique device UUID identification across app restarts (SharedPreferences).IceServerCachefor offline and cold-start STUN/TURN server caching.CallKitHandlerandColdStartCallHandlerpatterns enabling instant incoming call connection from locked screen or killed app state using push payload credentials (ws_urlandcall_token).
-
Reactive Event Streams:
- Stream-based client events:
onCallOffer,onCallAccepted,onCallEnded,onCallRejected,onCallRinging. - Granular call state streams:
onStateChanged,onRemoteStream,onLocalStream,onEvent.
- Stream-based client events:
-
Comprehensive Example App:
- Complete Flutter demo app covering login, push token registration, incoming call notification with CallKit, active call UI, and audio stream routing.
-
Documentation:
- Internal architecture, WebRTC call flow diagrams, and VoIP push integration guides under
docs/.
- Internal architecture, WebRTC call flow diagrams, and VoIP push integration guides under