Skip to main content
🤖 LLM Friendly: This page is available in raw Markdown format for LLM consumption:changelog.md|Get full documentation:llms.txt/llms-full.txt

Changelog

All notable changes to the firetell_flutter_sdk package are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


[1.1.0] - 2026-09-14​

Added​

  • Mobile Video Call Support:
    • Full video calling support matching the core capabilities of the browser SDK (excluding screen sharing for mobile ergonomics).
    • Camera controls on Call:
      • isCameraOff boolean property to check current camera transmission status.
      • muteVideo() to disable local video tracks and broadcast state to remote peer via call.camera.
      • unmuteVideo() to re-enable local video tracks and broadcast state to remote peer via call.camera.
      • toggleCamera() convenience method to toggle camera on/off.
      • switchCamera() to switch between front-facing and rear-facing device cameras using Helper.switchCamera.
      • onCameraChange broadcast 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 = true in Call.accept() if SDP offer contains video, ensuring matching audio/video media negotiation.
    • WebSocket signaling updates:
      • Added call.camera message handler in _handleWsMessage to synchronize camera state events between peers.
  • Example Application Video Calling:
    • Created dedicated full-screen VideoCallScreen (video_call_screen.dart) 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.isVideo is true.
    • Exported package:flutter_webrtc/flutter_webrtc.dart from package library entry point for seamless UI renderer integration (RTCVideoRenderer, RTCVideoView, RTCVideoViewObjectFit).
  • Platform Permissions:
    • Added android.permission.CAMERA and NSCameraUsageDescription setup guidance in documentation and README.

[1.0.3] - 2026-09-14​

Added​

  • Speakerphone Control:
    • Added isSpeakerOn boolean 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 onSpeakerChange broadcast stream to listen for speaker state changes.
    • Automatically resets speakerphone to earpiece on call cleanup.
  • Phone Numbers (DIDs) & Caller ID Support:
    • Added PhoneNumber, PhoneNumberCapabilities, and PhoneNumbersResponse models.
    • Added client.getPhoneNumbers({page, limit}) and client.getPhoneNumbersResponse({page, limit}) to fetch agent/team accessible phone numbers for outbound Caller ID (from).
    • Updated example DialpadScreen to automatically fetch available DIDs and provide an interactive Caller ID dropdown selector when dialing outbound.
  • Backend Device Push Token Cleanup on Logout:
    • Upgraded FiretellClient.logout({deviceId}) to an asynchronous method that calls POST /api/v1/me/logout with device_id to unregister push tokens on the server, ensuring the device stops receiving VoIP incoming calls after logout.
    • Automatically resolves deviceId from DeviceIdHelper.getOrCreate() if not explicitly specified.
  • 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.
  • flutter_callkit_incoming 3.x Compatibility:
    • Adapted CallKitHandler and example handlers to support flutter_callkit_incoming 3.x sealed class event hierarchy (CallEventActionCallAccept, CallEventActionCallDecline, etc.).
    • Configured missedCallNotification: and callingNotification: in CallKitParams.
    • Resolved CallEvent naming conflict with SDK's internal enum via explicit namespace aliasing.

Fixed​

  • WebRTC Local Description Handling:
    • Fixed localDescription getter error in flutter_webrtc by utilizing asynchronous await pc.getLocalDescription().
  • Linter & Code Health:
    • Fixed unawaited_return_in_try_block lint in WebSocket connect handshake.
    • Replaced unhandled catchError with clean unawaited try/catch block in FiretellClient.
    • Added unnamed library; directive for Dart 3 library doc comment compliance.
    • Renamed documentation directory to doc/ and main markdown file to README.md per pub.dev package layout guidelines.

[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 for POST /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.

[1.0.0] - 2026-09-14​

Added​

  • Core WebRTC Calling:
    • FiretellClient class for managing sessions, tokens, device registrations, and SSE event streaming.
    • Call class 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:
    • PushTokenService for registering device VoIP push tokens (fcm_voip, apns_voip, fcm_data) with backend REST API.
    • DeviceIdHelper providing persistent unique device UUID identification across app restarts (SharedPreferences).
    • IceServerCache for offline and cold-start STUN/TURN server caching.
    • CallKitHandler and ColdStartCallHandler patterns enabling instant incoming call connection from locked screen or killed app state using push payload credentials (ws_url and call_token).
  • Reactive Event Streams:
    • Stream-based client events: onCallOffer, onCallAccepted, onCallEnded, onCallRejected, onCallRinging.
    • Granular call state streams: onStateChanged, onRemoteStream, onLocalStream, onEvent.
  • 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 doc/.