Repository navigation
docs(flutter): ringing on Calls SDK 5.1 + cometchat_voip, chat-only push, UI Kit calling - #564
DhruvKushvaha2004 wants to merge 7 commits into
Conversation
…h_notifications 2.0 - New notifications/flutter-push-notifications.mdx replaces the separate Flutter (Android) and Flutter (iOS) pages. It keeps the structure of PR #440 and documents cometchat_push_notifications 2.0 (chat notifications only): init and config, registerPushToken (FCM on Android, APNs on iOS), token refresh, unregisterPushToken before logout, onNotificationTap, setActiveConversation, badge and clearNotifications, the Android small icon and the optional iOS Notification Service Extension. Calls are pointed to the Calls SDK Ringing Flow, with a short note on handing call pushes to cometchat_voip first. - New notifications/push-getting-started.mdx from PR #440 (dashboard, Firebase and APNs setup common to all platforms); its iOS card points to the existing APNs page. - Removed flutter-push-notifications-android.mdx and flutter-push-notifications-ios.mdx; their URLs and /extensions/flutter-push-notifications redirect to the new page, and the legacy redirect on /notifications/flutter-push-notifications is removed. - notifications.mdx and push-overview.mdx show a single Flutter card. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ringing: replaces the Chat SDK ringing page in place with the Calls SDK flow (initiateCall, Ringing…, answer, decline, cancel, timeout, end). - Push Ringing: rewrites voip-calling for cometchat_voip (setup, init, push hand-off, token, ring readiness, call modes, call waiting, missed calls, killed/locked, troubleshooting). - Migrating from Legacy Ringing: new page with before/after code and the legacy-to-new API mapping. - Background Handling: launch(isVideo:), whole-call notification, tidied snippet, fixed links. - Overview, v5 migration guide (5.0 to 5.1), troubleshooting, Flutter push page and Chat SDK listeners (CallListener superseded) updated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Calling Integration: new page (Getting Started) with the steps an app takes: Calls SDK + cometchat_voip init, the call push bridge (VoipCallPushBridge), enableCalls / callPushBridge / navigatorKey, push hand-off, push token, ring readiness and logout. - Call features: rewritten as an overview of how a call works. - Incoming Call: deprecated on Android and iOS, shown on web only. - Outgoing Call: Calling…/Ringing… states, timeout, End and events. - Events, Methods, Troubleshooting, Upgrading from v5 and Getting Started updated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Push Ringing keeps the app alive only from the ring until the answered call joins; CometChatOngoingCallService keeps a joined call alive. - Phase table (ringing, answering, in the call) in the Note; the page applies to every call kind. - Tip: the UI Kit's call screen starts and stops the service itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…inging - Setup: cometchat_calls_sdk 5.1, a note pointing ringing apps to cometchat_voip and Push Ringing, permissions asked on Answer. - Actions: leave() replaces the deprecated leaveSession() and endCallSession(); a ringing call is cancelled with endCall. - Events: the prepared session, onParticipantConnected, and what onSessionTimedOut / onConnectionClosed mean before anyone joins. - Troubleshooting: ringing rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
registerPushToken and handleTokenRefresh are not Android-only: the token is the FCM token on Android and the PushKit VoIP token on iOS. On iOS the package owns the PKPushRegistry in both auto modes, obtains the VoIP token during init and registers it as soon as a user is logged in to the Calls SDK (at init if one already is, otherwise at the next login). Only manual mode leaves the registry, and the token, to the app. Verified against cometchat_voip 2.0.0-beta7 on release/2.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
jitvarpatil
left a comment
There was a problem hiding this comment.
🤖 Review Buddy (review-docs-pr)
Recommendation: request changes. Automated review; the final decision stays with a maintainer.
TL;DR. Structurally this is a clean reorg: 0 dangling nav refs (build is safe), both deleted Flutter push pages and /extensions/flutter-push-notifications redirect to the new page, 0 chained 404s, 0 broken in-content links in the changed pages, every cross-page anchor into the rewritten pages resolves, all images exist, and the Mintlify preview renders. I also cross-checked every API name on the new pages against cometchat_voip + cometchat_push_notifications (release/2.0), cometchat_calls_sdk 5.1 and the UI Kit ringing-v2-uikit branch — almost everything matches. What needs fixing before merge: the pages pin three package versions that don't exist on pub.dev yet (the PR says so — this is the merge gate), the UI Kit pin ^6.2.0 is wrong even after release because 6.2.0 already shipped without the bridge API, the caller-side end-reason strings the pages promise (rejected/busy/unanswered) are not what the SDK delivers, and the Ringing page says initiateCall is 1:1-only while the SDK and the Push Ringing page say otherwise.
P0 — blocker (merge gate)
- Pinned package versions are not published; merging to
mainpublishes them live.calls/flutter/setup.mdx:31,calls/flutter/voip-calling.mdx:40-41,calls/flutter/migrating-from-legacy-ringing.mdx:68-69,ui-kit/flutter/calling-integration.mdx:42-43,notifications/flutter-push-notifications.mdx:66pincometchat_calls_sdk: ^5.1.0,cometchat_voip: ^2.0.0,cometchat_push_notifications: ^2.0.0. pub.dev today:cometchat_calls_sdk5.0.9,cometchat_push_notifications1.0.1,cometchat_voipnot published (release/2.0 is at 2.0.0-beta4). Every reader'sflutter pub getfails until the releases land. The PR body already says "not ready to publish" — this item just makes the hold explicit: do not merge before all three are on pub.dev, then resolve every{/* TODO(RC) */}.
P1 — fix before merge
cometchat_chat_uikit: ^6.2.0is the wrong pin — 6.2.0 is already on pub.dev and does not contain the ringing API.ui-kit/flutter/calling-integration.mdx:42(and the TODO at:14naming "cometchat_chat_uikit 6.2.0"). I pulled the published 6.2.0 tarball: nocometchat_call_push_bridge.dart, zero mentions ofcallPushBridge; its pubspec depends oncometchat_calls_sdk ^5.0.8. Theringing-v2-uikitbranch still carriesversion: 6.2.0, so the page must pin whatever version that branch actually ships as (≥ 6.3.0), and the branch's pubspec needs its own bump (out of scope here, flagging for the Kit owners).ui-kit/flutter/getting-started.mdx:59,79keep^6.2.0while:185now advertises calling — after the release, bump those too.- Caller-side end reasons are documented as
rejected/busy/unanswered/cancelled, but that is not whatonIncomingCallEndeddelivers.calls/flutter/ringing.mdx:175(table),:162-164(code),calls/flutter/voip-calling.mdx:270-273,calls/flutter/migrating-from-legacy-ringing.mdx:198,:254. Evidence: on the Dart push pathcometchat_voipmaps the push action throughCometChatCallEndReason.fromAction—rejected|busy|ended→declined,unanswered→timedOut,ongoing→answeredElsewhere— and injectsreason.wireName(cometchat_voip/lib/cometchat_voip.dart:474-482); the Calls SDK hands that string straight to the listener (calls-sdk-flutter/lib/src/plugin/cometchatcalls.dart:388); the iOS native path sendsdeclined/ended/failed/filtered; and the SDK's own doc-comment says the vocabulary differs per platform (lib/src/listener/incoming_call_listener.dart:13-18). Consequences: code comparing to"rejected"/"unanswered"never matches, andbusyis indistinguishable from a decline on the caller. Fix: document the reason as a platform-dependent wire string and tell readers to normalise withCometChatCallEndReason.fromWire(reason)(it accepts both vocabularies), list the real values, and drop or caveat the caller-sidebusydistinction. The callee-sideonCallEndedreasons (ringing.mdx:176) are correct. - Group ringing contradicts the SDK and the sibling page.
calls/flutter/ringing.mdx:90documentsoptions.receiverTypeasReceiverType.useronly and:293-295says "initiateCallis for 1:1 calls", butInitiateCallOptions.receiverTypeacceptsReceiverType.group("a user UID or a group GUID",lib/src/builder/initiate_call_options.dart:11-13,cometchatcalls.dartinitiateCalldoc-comment) andcalls/flutter/voip-calling.mdx:275already documents how a group ring ends. Either document groupinitiateCall(what rings, how it ends, nobusy/unansweredsent) or make both pages agree that groups are join-by-id only and removevoip-calling.mdx:275. - The "Rolling out" steps that keep old↔new apps interoperable are placeholders in the rendered page.
calls/flutter/migrating-from-legacy-ringing.mdx:355-361renders as "Go to the calling settings" / "Turn on the migration setting" with the real name, path and screenshot in hiddenTODO(RC)comments. This is the step that stops calls breaking during the rollout window; it must be concrete before publish. AlsoacceptOnAnswer(:363, verified: exists, defaulttrue) appears only here — add it to the options table atcalls/flutter/voip-calling.mdx:82-92.
P2 — nits
TODO(RC)comments cite "cometchat_calls_sdk 5.1.0-team" (ringing.mdx:19,voip-calling.mdx:27,migrating-from-legacy-ringing.mdx:12,calling-integration.mdx:14), but the calls-core tag5.1.0-teamcarries calls-sdk-flutter 5.0.8 with none ofinitiateCall/leave()/onParticipantConnected/addIncomingCallListener; the Flutter 5.1 API is on tag5.1.0-beta.1. Point the RC re-check at the right ref (and citerelease/2.0forcometchat_voiprather than a beta number — it has already moved from beta2/beta4 to beta7 across these commits).calls/flutter/voip-calling.mdx:139-145vs:192-196: the token table marksregisterPushToken(token:)/handleTokenRefreshas "Android, iOS", the prose then says on iOS you pass a token only inmanualmode, and the mode table says Manual is Android-only. Make the three agree (e.g. "Android — iOS: automatic" and drop the manual-on-iOS sentence).notifications/push-getting-started.mdx:9: the FCM list omits Flutter (Android) while:22and:34include it.notifications/flutter-push-notifications.mdx:33"Flutter 3.3.0+ / Dart 3.10.8+" mirrors the plugin's pubspec, but Dart 3.10 implies Flutter ≥ 3.38, so the Flutter floor is misleading (the pubspec'sflutter: '>=3.3.0'is the real culprit).- Link text "Migrating from legacy ringing" (
ringing.mdx:16,317,voip-calling.mdx:327) vs the page title "Migrating from Legacy Ringing". - Pre-existing, not introduced here (FYI): 4 broken links in untouched
calls/flutterpages —in-call-chat.mdx:444,share-invite.mdx:329→/calls/flutter/button-click-listener;participant-management.mdx:142,145→/calls/flutter/participant-actions,/calls/flutter/participant-event-listener— and two nav orphansui-kit/flutter/llms-flutter-v6,sdk/flutter/llms-flutter-v5.
Passed / verified
- Build safe: 0 unresolved
docs.jsonpage refs. Redirects:/notifications/flutter-push-notifications-androidand-ios→ new page;/extensions/flutter-push-notificationsretargeted; the legacy redirect from/notifications/flutter-push-notificationscorrectly removed so the new page isn't shadowed; 0 chained 404s; redirects 926 → 927. - Links: 0 broken internal links in the 27 changed pages; all 7 cross-page anchors into the rewritten pages (
#cancel-a-call,#answer-a-call,#your-own-ring-screen,#a-call-while-in-a-call,#step-2-initialize,#call-events,#receive-a-call) resolve; no page still links to the deleted URLs; all image refs resolve; GitHub repo linkcometchat/push-notifications-sdk-flutteris public. - API cross-check (source of truth, not the PR):
cometchat_voiprelease/2.0 —init,CometChatVoipConfig.fromCallAppSettings(settings, providerId:)and every option in the table (defaults match, ring timeout 45 s),handlePushNotification(data, sentTime:),registerPushToken(token:),handleTokenRefresh,unregisterPushToken,checkRingReadiness+ all 8CometChatRingReadinessvalues,openSettings,verifyPushSetup+ all 7 results,onCallRinging/onRingScreenRequested/onCallAnswered/onCallEnded,answer/accept/decline(busy:)/dismissRinging(answered:),reportOutgoingCall/reportCallConnected/reportCallEnded,getActiveCall,isInitialized,ringSurfaces.{showIncomingNotification,verify,stopRinging,keepAlive,showMissedCall},CometChatVoipCall.{sessionId,isVideo,callType,receiverType,callerUid,callerName,callerAvatarUrl,expiresAt},CometChatCallEnded.{call,reason},reason.isMissed(= cancelled ∨ timedOut, matching the Missed-calls prose),reason.wireName,CometChatRingRequest.{call,answerEndsActiveCall}, the threeCometChatCallModes; minSdk 26 / iOS 15.1; iOS answer→join cap is indeed 20 s (RingConstants.swift:29). cometchat_push_notifications2.0 —init, all 7 config fields + defaults,requestPermission,registerPushToken({token, platform, providerId}),PushPlatform.FCM_FLUTTER_ANDROID/APNS_FLUTTER_DEVICE,handlePushNotification(returnsfalsefor call pushes),onNotificationTapresponse fields,setActiveConversation({id, receiverType}),CometChatPushReceiverType.user,setBadgeCount/getBadgeCount,clearNotifications({conversationId}),unregisterPushToken,cometchat_push_notifications_export.dart, NSE podCometChatPushNotificationsNSE/CometChatNotificationServiceExtension/CometChatExtensionGroupID; minSdk 24, compileSdk 36, iOS 13.0.cometchat_calls_sdk5.1 —initiateCall({receiver, options, onSuccess(InitiatedCall), onError}),InitiateCallOptions{type, receiverType, sessionSettings}(type defaults to video, as warned),InitiatedCallfields incl.isVideo,endCall({sessionId, status, onSuccess, onError})+EndCallStatus.{rejected,cancelled,busy,unanswered},addIncomingCallListener(id, listener)/IncomingCallListener.onIncomingCallEnded(InitiatedCall, String),getActiveSession,LoginListener,ParticipantEventListeners.onParticipantConnected,CallSession.leave()withleaveSession()/endCallSession()@Deprecated,CometChatOngoingCallService.launch({bool? isVideo})/abort(), FGS permissions declared in the plugin manifest,logout({onSuccess(String), onError}).- UI Kit
ringing-v2-uikit—CometChatCallPushBridgemembers exactly as the sample bridge (defaults onreportCallConnected/reportCallEnded),CometChatPushCall/CometChatPushCallEndedfields, exported fromcometchat_calls_uikit.dart;UIKitSettings.enableCalls(defaultfalse) /callingConfiguration/callPushBridge;ccOutgoingCallevent;@DeprecatedonCometChatIncomingCall,IncomingCallOverlay,CometChatIncomingCallStyle;CallListener/CallListener2hidden from both barrels;CometChatUIKit.logoutruns call clean-up then the Calls logout; outgoing timeout 45 s (active_call_tracker.dart:180); refused-mic notice opens app settings. - Mintlify preview: deployment green and
/calls/flutter/ringingreturns 200. Local Mintlify build not run here.
The caller's end reason is a native string whose wording differs per platform, so the pages no longer promise `rejected` / `busy` / `unanswered`: they hand it to `CometChatCallEndReason.fromWire`, list the values that come back, and say a busy decline is indistinguishable from a plain one. Group calls: `initiateCall` takes a group GUID, so Ringing documents the group ring and how it ends instead of calling the method 1:1-only, which contradicted Push Ringing. `setPeerCall(true)` is now scoped to 1:1. The UI Kit pin can't be `^6.2.0` — that release is on pub.dev without the call push bridge. Also: `acceptOnAnswer` in the config table, Manual mode runs on iOS too, FCM covers Flutter (Android), the plugin's Dart floor is the one that applies, and the dashboard rollout step says out loud that it is unfinished. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Thanks — worked through this against the local FixedCaller-side end reasons. Confirmed: Group ringing. UI Kit pin. pub.dev's latest Nits. One correction to the review: Manual mode is not Android-only — Still openP0 version pins — the merge gate. Still true as of today: The dashboard migration setting. Its name and path aren't recorded anywhere I can reach — not the voip README, changelog, props docs or skill — so I didn't invent them. The two placeholder steps are now a visible Not acted onThe P2 saying the The four pre-existing broken links and two nav orphans are out of scope here — worth their own PR. |
Description
Flutter docs for the new ringing flow. Calls are placed and ended with the Calls SDK 5.1, and incoming calls ring through
cometchat_voipin every app state. Push notifications are now chat only. The structure follows the Android PR (#561).Push notifications (chat only)
notifications/flutter-push-notifications.mdxoncometchat_push_notifications2.0.notifications/push-getting-started.mdx.flutter-push-notifications-android/-ios, with redirects.Calls SDK (Flutter)
calls/flutter/ringing): replaces the Chat SDK ringing page in place. Covers start a call, "Ringing…", answer, join, decline, cancel, ring timeout, end, a call while in a call, logout, and call status values.calls/flutter/voip-calling): rewritten forcometchat_voip. Covers packages and platform setup, init, handing over pushes, push token, ring readiness, call modes (Auto, your own ring screen, Manual), how a ring ends, call waiting, missed calls, the killed/locked app, and troubleshooting.launch(isVideo:), and a note that the UI Kit starts the service itself.leave()replaces the deprecatedleaveSession()/endCallSession()), events (prepared session,onParticipantConnected), overview, the v5 migration guide's "5.0 to 5.1" section, and troubleshooting.Chat SDK (Flutter)
sdk/flutter/real-time-listeners: Warning thatCallListenerand the Chat SDK calling methods are superseded.UI Kit (Flutter v6)
cometchat_voip;VoipCallPushBridge),callPushBridgeandnavigatorKey;Type of Change
Checklist
Additional Information
cometchat_calls_sdk5.1,cometchat_voip2.0 and the UI Kit's ringing branch. Hidden{/* TODO(RC) */}comments mark what to fill in at release: package versions, and the dashboard migration setting's name, path and screenshot (Migrating from Legacy Ringing → Rolling out).Screenshots (if applicable)
N/A (text and Mermaid diagrams only).