@cometchat/skills 4.4.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/README.md +41 -163
- package/RULES.md +114 -0
- package/bin/cometchat-skills.mjs +1180 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +151 -74
- package/peers.yaml +312 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +54 -0
- package/registry/android-v6.json +137 -0
- package/registry/angular-v5.json +114 -0
- package/registry/flutter-calls-v5.json +54 -0
- package/registry/flutter-v6.json +119 -0
- package/registry/ios-calls-v5.json +59 -0
- package/registry/ios-v5.json +97 -0
- package/registry/rn-calls-v5.json +59 -0
- package/registry/rn-v5.json +129 -0
- package/registry/sdk-android-v5.json +53 -0
- package/registry/sdk-jsv4.json +53 -0
- package/registry/web-calls-v5.json +54 -0
- package/registry/web-v7.json +99 -0
- package/skills/cometchat/SKILL.md +42 -2096
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +40 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +181 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
- package/skills/cometchat-ios-core/references/docs-map.md +123 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +186 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-onboarding/SKILL.md +89 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +90 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +313 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +78 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
- package/skills/cometchat-react-v7-core/references/layout.md +158 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +909 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-a11y/SKILL.md +0 -477
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-i18n/SKILL.md +0 -419
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-production/SKILL.md +0 -738
- package/skills/cometchat-ios-testing/SKILL.md +0 -376
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -1,474 +1,65 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-flutter-v6-push
|
|
3
|
-
description:
|
|
3
|
+
description: "Add push notifications to a Flutter app with CometChat — FCM on Android, FCM/APNs on iOS, registered through CometChatNotifications with the Dashboard provider as the sender. THIN + docs-first: the Firebase setup is FETCHED from CometChat's notifications docs; this skill bakes the SDK symbols and the token lifecycle. Triggers: 'add push notifications in flutter', 'FCM push flutter', 'notify me when the app is closed', 'cometchat push flutter'."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "Flutter >=
|
|
5
|
+
compatibility: "Flutter >=3.38.9; cometchat_chat_uikit ^6 (6.1.x); cometchat_sdk ^5.0.6 (ships CometChatNotifications); firebase_messaging (FCM)"
|
|
6
6
|
metadata:
|
|
7
7
|
author: "CometChat"
|
|
8
|
-
version: "
|
|
9
|
-
tags: "cometchat flutter
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat flutter push notifications fcm apns firebase v6"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
> **Ground truth — DOCS-FIRST.** Push is an EXTERNAL integration (a Firebase project, native config on both platforms, and a Dashboard provider), not a UI Kit widget. The current setup lives in **CometChat's notifications docs — FETCH them**, via `../cometchat-flutter-v6-core/references/docs-map.md` → `/notifications/push-overview` · `/notifications/flutter-push-notifications-android` · `/notifications/flutter-push-notifications-ios`. (The old singular `/notifications/flutter-push-notifications` now redirects to a legacy page — use the per-platform pages above.) This skill bakes ONLY the SDK symbols (verified vs `cometchat_sdk` 5.0.6) and the hardening deltas. **Symbols baked; the step-by-step is fetched.**
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- `cometchat-flutter-v6-core` — install, credentials, `init→login→render`. This skill ASSUMES it (push registers AFTER login, on the SAME SDK).
|
|
16
|
+
- `cometchat-flutter-v6-events` — the listener lifecycle; a push registration is a lifecycle-bound side effect.
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
## Use this skill when
|
|
19
|
+
"add push notifications", "FCM push", "notify me when the app is closed / backgrounded".
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
- `
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
**Ground truth:**
|
|
24
|
-
- firebase_messaging — https://pub.dev/packages/firebase_messaging
|
|
25
|
-
- CometChat docs — https://www.cometchat.com/docs/notifications/push-notifications
|
|
26
|
-
- FCM data vs notification payloads — https://firebase.google.com/docs/cloud-messaging/concept-options
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 1. Architecture
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
Flutter app
|
|
34
|
-
├── firebase_messaging — FCM token registration + receive
|
|
35
|
-
└── Background isolate handler — handles pushes when app is killed
|
|
36
|
-
|
|
37
|
-
CometChat Notifications SDK (server-side, dashboard-managed)
|
|
38
|
-
├── PushPlatform configured (FCM key for Android, APNs cert for iOS)
|
|
39
|
-
└── Listens for new-message events → fans out to FCM/APNs
|
|
40
|
-
|
|
41
|
-
CometChat dashboard
|
|
42
|
-
└── Webhook → CometChat Notifications backend (no custom server needed for chat push)
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Unlike Web Push (which requires you to run a push server), CometChat hosts the chat-push relay. Configure FCM/APNs creds in the dashboard's Notifications settings; CometChat does the rest.
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 2. Setup
|
|
50
|
-
|
|
51
|
-
### Add packages
|
|
52
|
-
|
|
53
|
-
```yaml
|
|
54
|
-
# pubspec.yaml
|
|
55
|
-
dependencies:
|
|
56
|
-
flutter:
|
|
57
|
-
sdk: flutter
|
|
58
|
-
cometchat_chat_uikit: ^6.0
|
|
59
|
-
firebase_messaging: ^14.0.0
|
|
60
|
-
firebase_core: ^2.0.0
|
|
61
|
-
flutter_local_notifications: ^16.0.0 # for foreground notifications + iOS in-app banner
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Firebase project setup
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
flutterfire configure
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
This wizard:
|
|
71
|
-
- Asks which Firebase project to use (or creates one)
|
|
72
|
-
- Asks which platforms (iOS, Android, Web)
|
|
73
|
-
- Generates `lib/firebase_options.dart`
|
|
74
|
-
- Places `android/app/google-services.json`
|
|
75
|
-
- Places `ios/Runner/GoogleService-Info.plist`
|
|
76
|
-
|
|
77
|
-
If you don't have FlutterFire CLI: `dart pub global activate flutterfire_cli`.
|
|
78
|
-
|
|
79
|
-
### Android — `android/app/build.gradle`
|
|
80
|
-
|
|
81
|
-
```gradle
|
|
82
|
-
apply plugin: 'com.google.gms.google-services'
|
|
83
|
-
|
|
84
|
-
android {
|
|
85
|
-
defaultConfig {
|
|
86
|
-
minSdkVersion 26 // V6 floor; FCM needs 19+
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
In `android/build.gradle`:
|
|
92
|
-
|
|
93
|
-
```gradle
|
|
94
|
-
buildscript {
|
|
95
|
-
dependencies {
|
|
96
|
-
classpath 'com.google.gms:google-services:4.4.0'
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Android — manifest
|
|
102
|
-
|
|
103
|
-
```xml
|
|
104
|
-
<!-- android/app/src/main/AndroidManifest.xml -->
|
|
105
|
-
<uses-permission android:name="android.permission.INTERNET" />
|
|
106
|
-
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 13+ -->
|
|
107
|
-
|
|
108
|
-
<application>
|
|
109
|
-
<meta-data
|
|
110
|
-
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
|
111
|
-
android:value="cometchat_messages" />
|
|
112
|
-
<meta-data
|
|
113
|
-
android:name="com.google.firebase.messaging.default_notification_icon"
|
|
114
|
-
android:resource="@drawable/ic_notification" />
|
|
115
|
-
</application>
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### iOS — capabilities
|
|
119
|
-
|
|
120
|
-
In Xcode → target → Signing & Capabilities:
|
|
121
|
-
- ☑ Push Notifications
|
|
122
|
-
- ☑ Background Modes → Remote notifications
|
|
123
|
-
|
|
124
|
-
Then upload an APNs Authentication Key (.p8) to **Firebase Console → Project Settings → Cloud Messaging → Apple app configuration**. Token-based auth (.p8) is preferred over cert-based — same key works for sandbox + production.
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 3. Initialize Firebase + register for push
|
|
21
|
+
## Build it — FETCH the docs, then apply the deltas
|
|
22
|
+
1. **FETCH the setup** (source of truth): the notifications docs above. Follow their Firebase project creation, `google-services.json` / `GoogleService-Info.plist` placement, the Gradle/Podfile changes, and (iOS) the APNs key upload. **If the docs are wrong or missing a step, that is a DOCS gap — flag it (`RULES.md` §20), don't bake a permanent workaround.**
|
|
23
|
+
2. **Dashboard prerequisite:** configure the **push provider in the CometChat Dashboard** — it is the SENDER. Note the **provider ID**; registration needs it. Without this, nothing is ever delivered no matter how correct the client is.
|
|
24
|
+
3. **Install:** `flutter pub add firebase_core firebase_messaging`. `CometChatNotifications` ships with the already-installed `cometchat_sdk` — no extra CometChat package.
|
|
129
25
|
|
|
26
|
+
## Baked SDK symbols (verified vs 5.0.6 — do NOT guess these)
|
|
130
27
|
```dart
|
|
131
|
-
// lib/main.dart
|
|
132
|
-
import 'package:firebase_core/firebase_core.dart';
|
|
133
|
-
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
134
|
-
import 'firebase_options.dart';
|
|
135
|
-
|
|
136
|
-
void main() async {
|
|
137
|
-
WidgetsFlutterBinding.ensureInitialized();
|
|
138
|
-
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
|
139
|
-
|
|
140
|
-
// CRITICAL: register the background handler BEFORE runApp
|
|
141
|
-
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
|
142
|
-
|
|
143
|
-
runApp(const MyApp());
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Background handler MUST be a top-level function (not a closure inside a class)
|
|
147
|
-
// AND must be annotated with @pragma to survive tree-shaking in release builds
|
|
148
|
-
@pragma('vm:entry-point')
|
|
149
|
-
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
|
150
|
-
// Runs in a SEPARATE isolate. No Bloc, no UI state — just data persistence
|
|
151
|
-
// or local notifications if needed.
|
|
152
|
-
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
|
153
|
-
// CometChat Notifications backend already shows the system notification;
|
|
154
|
-
// typically no extra work needed here.
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**The `@pragma('vm:entry-point')` annotation is non-negotiable.** Without it, Flutter's tree-shaking removes the function in release builds and the background handler silently fails.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## 4. Token registration with CometChat
|
|
163
|
-
|
|
164
|
-
The CometChat Notifications backend needs the device's FCM token to send pushes. Register it via the `CometChatNotifications` SDK after login resolves:
|
|
165
|
-
|
|
166
|
-
```dart
|
|
167
|
-
// lib/services/push_service.dart
|
|
168
28
|
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
169
|
-
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
170
|
-
import 'package:flutter/services.dart';
|
|
171
|
-
|
|
172
|
-
class PushService {
|
|
173
|
-
final FirebaseMessaging _fcm = FirebaseMessaging.instance;
|
|
174
|
-
|
|
175
|
-
/// Call AFTER CometChatUIKit.login resolves.
|
|
176
|
-
Future<void> registerForPush() async {
|
|
177
|
-
// Request permission (iOS prompts; Android 13+ prompts)
|
|
178
|
-
final settings = await _fcm.requestPermission(
|
|
179
|
-
alert: true,
|
|
180
|
-
badge: true,
|
|
181
|
-
sound: true,
|
|
182
|
-
);
|
|
183
|
-
if (settings.authorizationStatus != AuthorizationStatus.authorized) return;
|
|
184
|
-
|
|
185
|
-
// Get the FCM token
|
|
186
|
-
final token = await _fcm.getToken();
|
|
187
|
-
if (token == null) return;
|
|
188
|
-
|
|
189
|
-
// Register with CometChat — provider ID matches your dashboard PushPlatform
|
|
190
|
-
await _registerWithCometChat(token, platform: defaultTargetPlatform);
|
|
191
|
-
|
|
192
|
-
// Listen for token refresh — happens on OS upgrades, app reinstalls
|
|
193
|
-
_fcm.onTokenRefresh.listen((newToken) async {
|
|
194
|
-
await _registerWithCometChat(newToken, platform: defaultTargetPlatform);
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
Future<void> unregister() async {
|
|
199
|
-
final token = await _fcm.getToken();
|
|
200
|
-
if (token == null) return;
|
|
201
|
-
await _unregisterWithCometChat(token);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
Future<void> _registerWithCometChat(String token, {required TargetPlatform platform}) async {
|
|
205
|
-
// Canonical SDK source: chat-sdk-flutter/lib/notification/main/cometchat_notifications.dart
|
|
206
|
-
// (registerPushToken lines 36-235, unregisterPushToken lines 246-261).
|
|
207
|
-
//
|
|
208
|
-
// The kit's only public push surface is CometChatNotifications.registerPushToken /
|
|
209
|
-
// unregisterPushToken — named-arg signature. PNRegistry seen in the vendor docs is
|
|
210
|
-
// a sample-app extension (cometchat-uikit-flutter sample_app_push_notifications),
|
|
211
|
-
// NOT a kit-exported symbol — copying it as-is into a customer project fails to
|
|
212
|
-
// compile with "Undefined name 'PNRegistry'".
|
|
213
|
-
//
|
|
214
|
-
// Provider ID comes from the dashboard's Notifications → Push → Provider ID config;
|
|
215
|
-
// customers typically store it as a const (AppCredentials.fcmProviderId pattern).
|
|
216
|
-
final pushPlatform = platform == TargetPlatform.android
|
|
217
|
-
? PushPlatforms.FCM_FLUTTER_ANDROID
|
|
218
|
-
: PushPlatforms.FCM_FLUTTER_IOS; // iOS via Firebase (FCM relay).
|
|
219
|
-
// For pure APNs chat: PushPlatforms.APNS_FLUTTER_DEVICE + deviceToken: <APNs token>
|
|
220
|
-
// For VoIP/CallKit: PushPlatforms.APNS_FLUTTER_VOIP + voipToken: <PushKit token>
|
|
221
|
-
// See cometchat-flutter-v6-calls for VoIP plumbing.
|
|
222
|
-
|
|
223
|
-
await CometChatNotifications.registerPushToken(
|
|
224
|
-
pushPlatform,
|
|
225
|
-
fcmToken: token,
|
|
226
|
-
providerId: AppCredentials.fcmProviderId, // your dashboard PushPlatform provider ID
|
|
227
|
-
onSuccess: (resp) => debugPrint('CometChat push registered: $resp'),
|
|
228
|
-
onError: (CometChatException e) => debugPrint('CometChat push register failed: ${e.message}'),
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
Future<void> _unregisterWithCometChat(String token) async {
|
|
233
|
-
// Distinct method on CometChatNotifications (chat-sdk-flutter lines 246-261).
|
|
234
|
-
// No token arg required — the SDK resolves the registration by the logged-in user's identity.
|
|
235
|
-
await CometChatNotifications.unregisterPushToken(
|
|
236
|
-
onSuccess: (_) => debugPrint('CometChat push unregistered'),
|
|
237
|
-
onError: (CometChatException e) => debugPrint('CometChat push unregister failed: ${e.message}'),
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
**Symbol note (2026-06-03, reversing 2026-05-14):** The kit's only public push surface is `CometChatNotifications.registerPushToken` / `unregisterPushToken` — verified in `chat-sdk-flutter/lib/notification/main/cometchat_notifications.dart` and cross-verified against the V5 sister skill (`cometchat-flutter-v5-push`) and the replit-template canonical skill. `PNRegistry.registerPNService` is a v5-sample-app extension (lives in `cometchat-uikit-flutter/sample_app_push_notifications/`, defined as `extension PNRegistry on CometChatService`) — it is NOT exported by any `cometchat_*` pub package. The previous 2026-05-14 audit treated a docs page that cites the sample-app helper as SDK ground truth; that audit has been reversed.
|
|
244
29
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
class MyApp extends StatefulWidget {
|
|
254
|
-
@override
|
|
255
|
-
State<MyApp> createState() => _MyAppState();
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
class _MyAppState extends State<MyApp> {
|
|
259
|
-
final PushService _push = PushService();
|
|
260
|
-
|
|
261
|
-
@override
|
|
262
|
-
void initState() {
|
|
263
|
-
super.initState();
|
|
264
|
-
_initCometChat();
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
Future<void> _initCometChat() async {
|
|
268
|
-
final settings = (UIKitSettingsBuilder()
|
|
269
|
-
..appId = CometChatConfig.appId
|
|
270
|
-
..region = CometChatConfig.region
|
|
271
|
-
..authKey = CometChatConfig.authKey)
|
|
272
|
-
.build();
|
|
273
|
-
|
|
274
|
-
CometChatUIKit.init(
|
|
275
|
-
uiKitSettings: settings,
|
|
276
|
-
onSuccess: (_) async {
|
|
277
|
-
// After login (in your AuthBloc or wherever)
|
|
278
|
-
await _push.registerForPush();
|
|
279
|
-
_setupForegroundHandler();
|
|
280
|
-
_setupNotificationTapHandler();
|
|
281
|
-
},
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
void _setupForegroundHandler() {
|
|
286
|
-
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
|
|
287
|
-
// App is in foreground — system doesn't show a notification automatically.
|
|
288
|
-
// Either show a flutter_local_notifications banner, or surface in-app via Bloc.
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
void _setupNotificationTapHandler() {
|
|
293
|
-
// Tap on notification while app is backgrounded
|
|
294
|
-
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
|
|
295
|
-
_navigateToConversation(message);
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
// Cold-start tap — app was terminated, user tapped notification
|
|
299
|
-
FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
|
|
300
|
-
if (message != null) _navigateToConversation(message);
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
void _navigateToConversation(RemoteMessage message) {
|
|
305
|
-
final data = message.data;
|
|
306
|
-
final conversationId = data['conversationId'] as String?;
|
|
307
|
-
final receiverType = data['receiverType'] as String?;
|
|
308
|
-
if (conversationId == null) return;
|
|
309
|
-
|
|
310
|
-
// Use a global navigator key (set on MaterialApp.navigatorKey) to navigate
|
|
311
|
-
// from outside the widget tree
|
|
312
|
-
AppNavigator.navigatorKey.currentState?.pushNamed(
|
|
313
|
-
receiverType == 'group' ? '/messages/group/$conversationId' : '/messages/user/$conversationId',
|
|
314
|
-
);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
|
-
## 6. CometChat dashboard PushPlatform
|
|
322
|
-
|
|
323
|
-
In the dashboard:
|
|
324
|
-
|
|
325
|
-
1. Navigate to **Notifications → Push Notifications**.
|
|
326
|
-
2. Add provider:
|
|
327
|
-
- **FCM** for Android: paste the FCM Server Key (from Firebase Console → Project Settings → Cloud Messaging → Cloud Messaging API (Legacy)) OR the new HTTP v1 API service account JSON
|
|
328
|
-
- **APN** for iOS: paste the .p8 + Team ID + Key ID, OR the .p12 (legacy)
|
|
329
|
-
3. Save. CometChat now relays new-message events to FCM/APNs.
|
|
330
|
-
|
|
331
|
-
**Use HTTP v1 API for FCM** — Google deprecated the legacy server keys. The dashboard's UI lists both; pick HTTP v1 for new setups.
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
## 7. Foreground notifications
|
|
336
|
-
|
|
337
|
-
When the app is foregrounded, FCM does NOT show a system notification — `onMessage` fires instead and you decide what to do. Options:
|
|
338
|
-
|
|
339
|
-
### A — In-app banner via Bloc
|
|
340
|
-
|
|
341
|
-
```dart
|
|
342
|
-
// In your AppBloc or a NotificationBloc
|
|
343
|
-
on<IncomingMessageNotification>((event, emit) {
|
|
344
|
-
emit(state.copyWith(banner: BannerData(
|
|
345
|
-
title: event.senderName,
|
|
346
|
-
body: event.preview,
|
|
347
|
-
onTap: () => navigatorKey.currentState?.pushNamed(...),
|
|
348
|
-
)));
|
|
349
|
-
});
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
Render the banner in `MaterialApp.builder`.
|
|
353
|
-
|
|
354
|
-
### B — Local notification via flutter_local_notifications
|
|
355
|
-
|
|
356
|
-
```dart
|
|
357
|
-
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
358
|
-
|
|
359
|
-
final FlutterLocalNotificationsPlugin _localNotifs = FlutterLocalNotificationsPlugin();
|
|
360
|
-
|
|
361
|
-
Future<void> _showLocalNotif(RemoteMessage message) async {
|
|
362
|
-
await _localNotifs.show(
|
|
363
|
-
message.hashCode,
|
|
364
|
-
message.notification?.title ?? '',
|
|
365
|
-
message.notification?.body ?? '',
|
|
366
|
-
NotificationDetails(
|
|
367
|
-
android: AndroidNotificationDetails(
|
|
368
|
-
'cometchat_messages',
|
|
369
|
-
'Messages',
|
|
370
|
-
importance: Importance.high,
|
|
371
|
-
priority: Priority.high,
|
|
372
|
-
),
|
|
373
|
-
iOS: DarwinNotificationDetails(),
|
|
374
|
-
),
|
|
375
|
-
payload: jsonEncode(message.data),
|
|
30
|
+
// Register AFTER login, with the token you got from firebase_messaging getToken().
|
|
31
|
+
Future<void> registerPush(String fcmToken, String providerId) async {
|
|
32
|
+
await CometChatNotifications.registerPushToken(
|
|
33
|
+
PushPlatforms.FCM_FLUTTER_ANDROID, // FCM_FLUTTER_IOS on iOS; for a raw APNs token use APNS_FLUTTER_DEVICE / APNS_FLUTTER_VOIP (there is NO plain PushPlatforms.APNS)
|
|
34
|
+
providerId: providerId, // from the Dashboard provider you configured
|
|
35
|
+
fcmToken: fcmToken,
|
|
36
|
+
onSuccess: (res) {},
|
|
37
|
+
onError: (e) {},
|
|
376
38
|
);
|
|
377
39
|
}
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
Initialize `flutter_local_notifications` once in `main()`:
|
|
381
|
-
|
|
382
|
-
```dart
|
|
383
|
-
await _localNotifs.initialize(
|
|
384
|
-
InitializationSettings(
|
|
385
|
-
android: AndroidInitializationSettings('@mipmap/ic_launcher'),
|
|
386
|
-
iOS: DarwinInitializationSettings(),
|
|
387
|
-
),
|
|
388
|
-
onDidReceiveNotificationResponse: (response) {
|
|
389
|
-
if (response.payload != null) {
|
|
390
|
-
final data = jsonDecode(response.payload!);
|
|
391
|
-
// navigate
|
|
392
|
-
}
|
|
393
|
-
},
|
|
394
|
-
);
|
|
395
|
-
```
|
|
396
40
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
```dart
|
|
402
|
-
class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
|
403
|
-
final PushService _push;
|
|
404
|
-
|
|
405
|
-
on<LogoutRequested>((event, emit) async {
|
|
406
|
-
await _push.unregister(); // CRITICAL — before SDK logout
|
|
407
|
-
await CometChatUIKit.logout(/* ... */);
|
|
408
|
-
emit(Unauthenticated());
|
|
409
|
-
});
|
|
41
|
+
// On logout — otherwise the device keeps receiving the previous user's messages.
|
|
42
|
+
Future<void> unregisterPush() async {
|
|
43
|
+
await CometChatNotifications.unregisterPushToken(onSuccess: (res) {}, onError: (e) {});
|
|
410
44
|
}
|
|
411
45
|
```
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
## 10. Anti-patterns
|
|
434
|
-
|
|
435
|
-
1. **Background handler missing `@pragma('vm:entry-point')`.** Tree-shaken in release builds; works in debug. The "works in dev, fails in production" canary.
|
|
436
|
-
2. **Background handler as a closure inside a class.** Must be a TOP-LEVEL function. Closures can't be passed across isolate boundaries.
|
|
437
|
-
3. **Calling `_push.registerForPush()` before login.** CometChat doesn't know whose UID this token belongs to. Register from the post-login success callback.
|
|
438
|
-
4. **Skipping `onTokenRefresh`.** OS upgrades and app reinstalls rotate the FCM token without warning. Listen to refresh and re-register.
|
|
439
|
-
5. **Using FCM legacy server keys.** Google deprecated them. Use HTTP v1 API service account in CometChat dashboard.
|
|
440
|
-
6. **Not unregistering on logout.** Previous user's notifications keep arriving for the new session.
|
|
441
|
-
7. **Showing a foreground notification AND an in-app banner for the same message.** Pick one. The skill defaults to in-app banner (Bloc-driven) if the chat tab is active; system notification otherwise.
|
|
442
|
-
8. **`flutter_local_notifications` initialization missing icon resource.** Crashes on Android with "Notification icon not found." Drop a `ic_notification.png` in `android/app/src/main/res/drawable/`.
|
|
443
|
-
|
|
444
|
-
---
|
|
445
|
-
|
|
446
|
-
## 11. Verification checklist
|
|
447
|
-
|
|
448
|
-
- [ ] `firebase_messaging ^14.0.0` + `firebase_core ^2.0.0` in pubspec.yaml
|
|
449
|
-
- [ ] `flutterfire configure` ran successfully; `lib/firebase_options.dart` exists
|
|
450
|
-
- [ ] `google-services.json` in `android/app/`
|
|
451
|
-
- [ ] `GoogleService-Info.plist` in `ios/Runner/`
|
|
452
|
-
- [ ] iOS: Push Notifications + Remote-notification background mode capabilities enabled
|
|
453
|
-
- [ ] iOS: APNs .p8 key uploaded to Firebase Console
|
|
454
|
-
- [ ] Android: `minSdkVersion 26` in `android/app/build.gradle` (V6 floor)
|
|
455
|
-
- [ ] Android manifest: `POST_NOTIFICATIONS` permission + notification channel meta-data
|
|
456
|
-
- [ ] Background handler is top-level + `@pragma('vm:entry-point')`
|
|
457
|
-
- [ ] Background handler initialized via `FirebaseMessaging.onBackgroundMessage` BEFORE `runApp`
|
|
458
|
-
- [ ] FCM/APN token registered with CometChat via `CometChatNotifications.registerPushToken(PushPlatforms.FCM_FLUTTER_ANDROID, fcmToken: token, providerId: ..., onSuccess: ..., onError: ...)` (or `PushPlatforms.FCM_FLUTTER_IOS` / `APNS_FLUTTER_DEVICE` + `deviceToken:` / `APNS_FLUTTER_VOIP` + `voipToken:` equivalent) AFTER login resolves. `PNRegistry` in the vendor docs is a v5-sample-app extension, not a kit API.
|
|
459
|
-
- [ ] `onTokenRefresh` re-registers
|
|
460
|
-
- [ ] Foreground handler decides banner vs no-banner based on chat tab focus
|
|
461
|
-
- [ ] `onMessageOpenedApp` + `getInitialMessage` both navigate to the conversation
|
|
462
|
-
- [ ] Logout calls `_push.unregister()` BEFORE `CometChatUIKit.logout()`
|
|
463
|
-
- [ ] Dashboard PushPlatform configured with FCM HTTP v1 + APNs .p8
|
|
464
|
-
- [ ] Real-device smoke (NOT simulator): backgrounded app → message → notification rings + tapping opens chat thread
|
|
465
|
-
|
|
466
|
-
---
|
|
467
|
-
|
|
468
|
-
## 12. Pointers
|
|
469
|
-
|
|
470
|
-
- `cometchat-flutter-v5-push` — V5/GetX sister skill (FCM stack unchanged; client wiring different)
|
|
471
|
-
- `cometchat-flutter-v6-calls` SKILL.md §1.2 + `references/server-push-bridge.md` — calls VoIP push (overlap; both can coexist)
|
|
472
|
-
- `cometchat-flutter-v6-core` — UIKitSettings, init/login order
|
|
473
|
-
- `cometchat-flutter-v6-troubleshooting` — push debugging (token never registers, background handler doesn't fire, FCM payload not received)
|
|
474
|
-
- `cometchat-flutter-v6-migration` — full V5→V6 migration recipe; push delta is one section
|
|
46
|
+
> `PushPlatforms` is an enum with per-platform Flutter variants — pick the one matching the running platform and the token type (`fcmToken` vs `deviceToken` vs `voipToken`). Do not pass an FCM token as a `deviceToken`.
|
|
47
|
+
|
|
48
|
+
## The token lifecycle (the part docs usually under-specify)
|
|
49
|
+
1. **Register AFTER `login` succeeds** — a token registered against no user goes nowhere.
|
|
50
|
+
2. **Re-register on token refresh.** FCM rotates tokens; listen to `onTokenRefresh` and re-register, or delivery silently stops days later.
|
|
51
|
+
3. **Unregister on logout**, before `CometChatUIKit.logout()` — otherwise the next user of that device receives the previous user's notifications. This is a privacy bug, not just a nuisance.
|
|
52
|
+
4. **Ask permission at the right moment** — iOS (and Android 13+) require a runtime prompt. Request it on a deliberate user action, not at first launch, or users decline permanently.
|
|
53
|
+
|
|
54
|
+
## Common pitfalls (BAKED)
|
|
55
|
+
- **No Dashboard provider** → the client is perfect and nothing is delivered. Check this FIRST when debugging.
|
|
56
|
+
- **Registering before login** → silence.
|
|
57
|
+
- **Never re-registering on refresh** → push works for days, then stops.
|
|
58
|
+
- **No unregister on logout** → the previous user's messages land on the device.
|
|
59
|
+
- **Testing on a simulator** → iOS simulators cannot receive push. Use a real device.
|
|
60
|
+
- **Expecting push while the app is foregrounded** — foreground messages arrive as data; you present them yourself.
|
|
61
|
+
- **Assuming the web/desktop story matches mobile** — verify before promising it.
|
|
62
|
+
|
|
63
|
+
## Verify it works
|
|
64
|
+
On a REAL device: permission granted → the token registers after login (no error) → background the app → a message from another user produces a notification → tapping it opens the app → logging out stops delivery to that device. Nothing arriving with a clean client almost always means the Dashboard provider or the platform credential (APNs key / `google-services.json`), not your Dart.
|
|
65
|
+
> Live delivery is a **manual device check** — it cannot be automated here. Say so honestly rather than claiming verification you did not do.
|