utd_calls_kit 0.10.0
utd_calls_kit: ^0.10.0 copied to clipboard
WhatsApp-style 1:1 audio & video calling for Flutter — independent UTD-Stream kit.
0.10.0 #
Production auth hook + transport hardening (additive, non-breaking).
UTDCallsConfig.sessionProvider— optional server-signed session source, the production auth path. When set, the kit never mints identity with the publishableapp_key; your backend calls the engine'sPOST /api/v1/auth/sessionwithX-App-Secretand the app parses the JSON withUTDSessionInfo.fromJson. Hardened engines reject the app_key identity mint by default (403appkey_identity_mint_disabled) unless the project opts in (settings.allow_appkey_identity_mint/ envALLOW_APPKEY_IDENTITY_MINT=true) — keep the no-backend mint for development only. The provider runs on every (re)connect and on the proactive pre-expiry re-mint, so it must return a fresh session each call.- Bumped
utd_signalingto^0.3.1— TLS is now enforced: a non-loopbackhttp://baseUrl/tokenBaseUrlthrows atUTDApiClientconstruction time andws://signal URLs are refused.UTDTransportSecurity.allowInsecure = true(debug only) is the dev escape hatch; loopback stays exempt. - Proactive token re-mint: the session's
expiresAtnow flows intoUTDSignalCredentials, so the signal socket re-mints + reconnects shortly before the token lapses — fixing the stale-REST-bearer window on long-lived sessions (each re-mint re-applies the engine bearer too). - Internal mint moved from the frozen
mintSessionrecord toUTDApi.mintSessionV2(UTDSessionInfo) — same wire call, growable result. Capability surfacing (signalingEnabled/planLimits) is unchanged. - Dependency resolution:
utd_signaling0.3.1 relaxes itsdevice_info_plus/package_info_plusranges so this kit solves cleanly againstutd_media_client2.x (which pinsdevice_info_plus ^12.3.0, whosewin32 ^5in turn excludespackage_info_plus10.x).
0.9.2 #
Signaling capability surfacing (additive, non-breaking).
- Call invitation now rides the paid
signalingcapability (call invitation- presence), billed separately from
chat.UTDCallController.signalingEnabled/.planLimits(from the session mint, viaUTDCallsClient) let app code pre-check before starting a call — both nullable;nullon an older engine ("unknown, let the server decide").
- presence), billed separately from
- When the engine refuses a call because signaling isn't enabled for the plan
(a paid-capability gate), the failure now carries
UTDStreamException.isFeatureDisabled/isSignalingDisabledand still maps toUTDCallEndReason.notActivated, so the UI can show an upsell rather than a raw error. The exception is rethrown fromstartCall/acceptIncomingfor app-code inspection. - Public API additions:
UTDCallController.signalingEnabled/.planLimits,UTDCallsClient.signalingEnabled/.planLimits. Billing is MAU-based (no per-minute/per-message change to this kit). Bumpedutd_signalingto0.1.1.
0.9.0 #
- VoIP/FCM wake-from-killed → CallKit. An incoming call now rings the device
even when the app is backgrounded or killed:
- iOS: PushKit VoIP pushes are delivered natively into CallKit by
flutter_callkit_incoming; accept/decline flow through the existingUTDCallKitBridgeinto the controller. - Android: a top-level
@pragma('vm:entry-point')FCM background handler (utdFirebaseBackgroundHandler) shows the full-screen CallKit incoming UI (backed by the plugin's foreground service) on a{type:'call'}data message; foregroundonMessagedoes the same.
- iOS: PushKit VoIP pushes are delivered natively into CallKit by
- New
api/push_token_api.dart(UTDPushTokenApi): register / unregister push tokens viaPOST/DELETE /api/v1/devices/push-token(Bearer). Collects the iOS PushKit VoIP token (FlutterCallkitIncoming.getDevicePushTokenVoIP) and/or the FCM token (FirebaseMessaging.instance.getToken) and registers whichever is available with the right platform; re-registers on FCMonTokenRefreshand on PushKit VoIP token updates. - New
push/push_dispatcher.dart(UTDPushDispatcher,UTDCallPush): token collection + foreground/background call routing + cold-start resume (coldStartAcceptedCall). UTDCallsConfig.enablePushflag (defaulttrue). When enabled, the client registers tokens oninit()and the controller resumes a cold-started accepted call (look upcall_id→getCall→acceptIncoming→ join). A CallKit accept whose invitation never arrived over the signal WS (woke from background/killed) is resolved the same way.UTDCallController.unregisterPush()for sign-out.callkit_bridgenow resolves a call'scall_idfromCallKitParams.extra['call_id']when the UUID was shown by a background push isolate (whose UUID the bridge never registered).- Added
firebase_core+firebase_messagingdependencies. - 1.0.0 is gated on device QA — push, CallKit wake, and cold start cannot be
exercised by
flutter analyzeor unit tests. See the README device-QA checklist. Requires host-app Firebase + iOS PushKit/CallKit/APNs config, and the engine'sAPNS_*/FCM_*credentials provisioned (push dispatch is gated until then).
0.5.0 #
- Native incoming-call UI: CallKit (iOS) / ConnectionService (Android) via the
new
UTDCallKitBridge, driven by in-app signal-WS invitations. UTDCallsConfig.enableCallKitflag (defaulttrue); the in-appUTDIncomingCallScreenremains the fallback when disabled/unavailable.- Bridged native actions (accept →
acceptIncoming, decline/timeout →reject, ended → hang up); native timer started on room connect; UI dismissed on terminal states. - Added
flutter_callkit_incominganduuiddependencies. - Foreground / in-app only — PushKit/FCM wake-from-killed deferred to v1.0.
0.0.1 #
- TODO: Describe initial release.