@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,190 +1,51 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-android-v6-production
|
|
3
|
-
description: "CometChat Android
|
|
3
|
+
description: "Ship a CometChat Android v6 app safely — server-minted auth tokens instead of the dev Auth Key, keeping credentials out of the APK, release-build and R8/ProGuard checks, user provisioning server-side, rate limits, and the Play Store publishing prerequisites. Triggers: 'is my cometchat android app production ready', 'auth token instead of auth key android', 'release build cometchat android', 'proguard cometchat', 'publish chat app play store'."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "Android
|
|
5
|
+
compatibility: "Android minSdk >=28; compileSdk >=36; Kotlin >=2.1; AGP >=8.9.1; JVM target 11; com.cometchat:chatuikit-kotlin-android ^6 OR com.cometchat:chatuikit-compose-android ^6 (6.0.x, verified 6.0.5); com.cometchat:chat-sdk-android ^5"
|
|
6
6
|
metadata:
|
|
7
7
|
author: "CometChat"
|
|
8
|
-
version: "
|
|
9
|
-
tags: "cometchat
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat android production release auth-token security v6 proguard"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
> **Ground truth:** `
|
|
12
|
+
> **Ground truth:** the installed kit source (`CometChatUIKit.loginWithAuthToken`) + `contracts.android-v6.json` (`prod-auth-token-guidance`) + the live SDK pages `/sdk/android/v5/rate-limits` and `/sdk/android/v5/publishing-app-on-playstore`. Fetch specifics from docs; never assert a limit or a ProGuard rule from memory.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Prepare a CometChat v6 Android app for production release — switch to token-based auth, configure ProGuard/R8, apply security best practices, and optimize the release build.
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- `cometchat-android-v6-core` — install, credentials, `initFromSettings → login`, lifecycle. Assumed here, never repeated.
|
|
16
|
+
- `cometchat-android-v6-builder-settings` — the settings file + auth method reference · `cometchat-android-v6-testing` — pre-release verification · `cometchat-android-v6-push` (unregister on logout).
|
|
19
17
|
|
|
20
18
|
## Use this skill when
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
.setAuthKey("AUTH_KEY") // REMOVE THIS
|
|
42
|
-
.build()
|
|
43
|
-
|
|
44
|
-
CometChatUIKit.login("uid", callback) // Uses authKey internally
|
|
45
|
-
|
|
46
|
-
// ✅ Production pattern
|
|
47
|
-
val settings = UIKitSettings.UIKitSettingsBuilder()
|
|
48
|
-
.setAppId("APP_ID")
|
|
49
|
-
.setRegion("us")
|
|
50
|
-
// No authKey
|
|
51
|
-
.build()
|
|
52
|
-
|
|
53
|
-
// Get token from your backend server
|
|
54
|
-
val authToken = yourServer.getAuthToken(userId)
|
|
55
|
-
CometChatUIKit.loginWithAuthToken(authToken, callback)
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 1.2 Server-Side Token Generation
|
|
59
|
-
|
|
60
|
-
Your backend generates auth tokens using the CometChat REST API:
|
|
61
|
-
- Endpoint: `POST https://{appId}.api-{region}.cometchat.io/v3/users/{uid}/auth_tokens`
|
|
62
|
-
- Header: `apiKey: YOUR_API_KEY` (server-side only)
|
|
63
|
-
|
|
64
|
-
The auth token is then passed to the client for `loginWithAuthToken()`.
|
|
65
|
-
|
|
66
|
-
## 2. ProGuard / R8 Configuration
|
|
67
|
-
|
|
68
|
-
### 2.1 Consumer Rules
|
|
69
|
-
|
|
70
|
-
CometChat UIKit modules include `consumer-rules.pro` that are automatically applied. Check that your app's `build.gradle.kts` has:
|
|
71
|
-
|
|
72
|
-
```kotlin
|
|
73
|
-
android {
|
|
74
|
-
buildTypes {
|
|
75
|
-
release {
|
|
76
|
-
isMinifyEnabled = true
|
|
77
|
-
proguardFiles(
|
|
78
|
-
getDefaultProguardFile("proguard-android-optimize.txt"),
|
|
79
|
-
"proguard-rules.pro"
|
|
80
|
-
)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### 2.2 Additional ProGuard Rules
|
|
87
|
-
|
|
88
|
-
If you encounter issues with minification, add these rules:
|
|
89
|
-
|
|
90
|
-
```proguard
|
|
91
|
-
# CometChat SDK
|
|
92
|
-
-keep class com.cometchat.chat.** { *; }
|
|
93
|
-
-keep class com.cometchat.calls.** { *; }
|
|
94
|
-
|
|
95
|
-
# CometChat UIKit
|
|
96
|
-
-keep class com.cometchat.uikit.** { *; }
|
|
97
|
-
|
|
98
|
-
# Gson (used for FCM DTO parsing)
|
|
99
|
-
-keep class com.google.gson.** { *; }
|
|
100
|
-
-keepattributes Signature
|
|
101
|
-
-keepattributes *Annotation*
|
|
102
|
-
|
|
103
|
-
# Firebase
|
|
104
|
-
-keep class com.google.firebase.** { *; }
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## 3. Security Checklist
|
|
108
|
-
|
|
109
|
-
| Item | Status | Notes |
|
|
19
|
+
"are we production ready?", "switch from the Auth Key to auth tokens", "prepare the release build", "does CometChat need ProGuard rules?", "what are the rate limits?", "anything to do before Play Store submission?".
|
|
20
|
+
|
|
21
|
+
## Production golden path
|
|
22
|
+
1. **Auth: server-minted tokens, never the Auth Key.** The dev flow (`login(uid, …)` backed by `credentials.authKey` in the settings file) is **development only** — the Auth Key can create/authenticate any user, so shipping it in an APK is a full compromise (APKs are trivially decompiled). Production: your backend creates the user and mints a per-user **auth token** via the CometChat REST API, your app fetches it over your own authenticated channel, then:
|
|
23
|
+
```kotlin
|
|
24
|
+
CometChatUIKit.loginWithAuthToken(authToken, object : CometChat.CallbackListener<User>() {
|
|
25
|
+
override fun onSuccess(user: User) { /* unlock the chat UI */ }
|
|
26
|
+
override fun onError(e: CometChatException) { /* surface + retry path */ }
|
|
27
|
+
})
|
|
28
|
+
```
|
|
29
|
+
Guard it the same way (`getLoggedInUser() != null` → skip). Token fetch failure must be a real error state, not a blank screen.
|
|
30
|
+
2. **Strip credentials from the release artifact.** Omit `credentials.authKey` from `app/src/main/assets/cometchat-settings.json` in release builds (or ship a release-flavored assets file); keep the file **gitignored**. `appId`/`region` are not secrets, the Auth Key is. Verify by unzipping the APK/AAB and grepping the merged assets — do this before every release.
|
|
31
|
+
3. **Provision users server-side.** `CometChatUIKit.createUser(...)` is for prototypes; production creates users through your backend + the CometChat REST API, in the same request that issues the auth token.
|
|
32
|
+
4. **Log out cleanly.** Unregister the push token BEFORE `CometChatUIKit.logout(...)` (`cometchat-android-v6-push`), and clear any cached uid/token in your own storage — otherwise the next user on a shared device inherits notifications.
|
|
33
|
+
5. **Release build sanity.** Build the **release** variant (not just debug) and run the app: minified/shrunk builds are where reflection-based failures appear. The kit ships its own consumer rules, so there is normally nothing to add — but **verify by running the release build**, and if a `ClassNotFoundException`/serialization failure appears, capture it and check the current kit docs before hand-writing `-keep` rules. Don't paste ProGuard rules from memory.
|
|
34
|
+
6. **Rate limits & scale.** The Chat SDK has documented limits (message rates, request sizes, listener/connection behavior) — fetch `/sdk/android/v5/rate-limits.md` before building anything that sends in bulk or fans out; paginate with request builders rather than unbounded fetches.
|
|
35
|
+
7. **Play Store prerequisites.** Fetch `/sdk/android/v5/publishing-app-on-playstore.md` — it covers what the SDK needs for a store submission. Also budget for: runtime permission rationale (CAMERA/RECORD_AUDIO for calls, POST_NOTIFICATIONS for push), a privacy-policy entry covering chat data, and Data-safety form answers reflecting what CometChat transmits.
|
|
36
|
+
|
|
37
|
+
## Known failure modes → fix
|
|
38
|
+
| Symptom | Cause | Fix |
|
|
110
39
|
|---|---|---|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
android
|
|
123
|
-
compileSdk = 36
|
|
124
|
-
|
|
125
|
-
defaultConfig {
|
|
126
|
-
minSdk = 28
|
|
127
|
-
targetSdk = 36
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
buildTypes {
|
|
131
|
-
release {
|
|
132
|
-
isMinifyEnabled = true
|
|
133
|
-
isShrinkResources = true
|
|
134
|
-
proguardFiles(
|
|
135
|
-
getDefaultProguardFile("proguard-android-optimize.txt"),
|
|
136
|
-
"proguard-rules.pro"
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
compileOptions {
|
|
142
|
-
sourceCompatibility = JavaVersion.VERSION_11
|
|
143
|
-
targetCompatibility = JavaVersion.VERSION_11
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
kotlinOptions {
|
|
147
|
-
jvmTarget = "11"
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## 5. Dependency Management
|
|
153
|
-
|
|
154
|
-
### 5.1 Compose BOM
|
|
155
|
-
|
|
156
|
-
For Compose stack, use the BOM to align Compose library versions:
|
|
157
|
-
|
|
158
|
-
```kotlin
|
|
159
|
-
implementation(platform("androidx.compose:compose-bom:2024.x.x"))
|
|
160
|
-
implementation("androidx.compose.ui:ui")
|
|
161
|
-
implementation("androidx.compose.material3:material3")
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### 5.2 Version Pinning
|
|
165
|
-
|
|
166
|
-
Pin CometChat SDK versions explicitly:
|
|
167
|
-
|
|
168
|
-
```kotlin
|
|
169
|
-
implementation("com.cometchat:chatuikit-compose-android:6.0.+")
|
|
170
|
-
// or
|
|
171
|
-
implementation("com.cometchat:chatuikit-kotlin-android:6.0.+")
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
> Never pin `6.0.0-beta2` (or any `-beta` preview) in a production build — V6 went GA on 2026-05-25. The `6.0.+` dynamic pin tracks GA patches forward (ENG-35701). Pin an exact GA patch (e.g. `6.0.1`) if your release process requires reproducible builds.
|
|
175
|
-
|
|
176
|
-
## 6. minSdk 28 Implications
|
|
177
|
-
|
|
178
|
-
v6 requires `minSdk = 28` (Android 9.0 Pie). This means:
|
|
179
|
-
- No support for Android 7.0-8.1 devices
|
|
180
|
-
- Full TLS 1.3 support
|
|
181
|
-
- Native BiometricPrompt API available
|
|
182
|
-
- Adaptive icons required
|
|
183
|
-
|
|
184
|
-
## Hard rules
|
|
185
|
-
|
|
186
|
-
- NEVER ship `authKey` in production builds — it allows anyone to create users and login
|
|
187
|
-
- ALWAYS use `loginWithAuthToken()` with server-generated tokens in production
|
|
188
|
-
- ALWAYS test the release build with ProGuard/R8 enabled before shipping — CometChat uses reflection in some areas
|
|
189
|
-
- `minSdk` must be 28 — do NOT lower it, v6 APIs depend on API 28+ features
|
|
190
|
-
- Remove all `Log.d()` / debug logging in release builds — use `BuildConfig.DEBUG` guards
|
|
40
|
+
| Auth works in debug, fails in release | release settings file has no `authKey` but code still uses `login(uid)` | switch the release path to `loginWithAuthToken` |
|
|
41
|
+
| Auth Key found in the APK | `credentials.authKey` shipped | remove for release; rotate the key in the Dashboard |
|
|
42
|
+
| Crash only in release | shrinking/obfuscation | reproduce on the release variant, read the real stack trace, then consult docs before adding keep rules |
|
|
43
|
+
| Notifications reach the wrong user | token not unregistered on logout | unregister before logout |
|
|
44
|
+
| Sends throttled / requests rejected | rate limits | batch + paginate; fetch the limits page |
|
|
45
|
+
| Blank chat after reinstall | token fetch failed and wasn't surfaced | render an error state + retry |
|
|
46
|
+
|
|
47
|
+
## Common pitfalls
|
|
48
|
+
Treating the dev Auth Key path as shippable · a settings file committed to git · never building the release variant before submission · creating users from the client in production · hand-written ProGuard rules copied from an old version · unbounded message/user fetches · no error state for token-fetch failure · leaving `enableCalling`/debug logging on when the product doesn't use calls.
|
|
49
|
+
|
|
50
|
+
## Verify it works
|
|
51
|
+
Compile (`./gradlew :app:assembleDebug # in YOUR app (npm run verify:fences:android-v6 is a pack-repo gate)`). Then, on a **release** build installed on a device: login uses `loginWithAuthToken` and succeeds; unzipping the artifact shows **no Auth Key**; chat, calls (if used) and push all work post-minification; logout unregisters push and a second user's session is clean; an intentionally broken token fetch shows a readable error, not a blank screen. Anything you could not verify (store review, backend token endpoint) — say so explicitly rather than claiming it.
|
|
@@ -1,315 +1,65 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-android-v6-push
|
|
3
|
-
description: "
|
|
3
|
+
description: "Add push notifications (FCM) to an Android v6 CometChat app — Firebase + Dashboard provider setup, the push dependency, token registration after login, token refresh, unregister on logout, manifest/service wiring, badge count and notification navigation. THIN + docs-first: fetches the notifications docs for exact payloads. Triggers: 'add push notifications android cometchat', 'fcm cometchat android', 'notifications not arriving android', 'badge count android'."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "Android
|
|
5
|
+
compatibility: "Android minSdk >=28; compileSdk >=36; Kotlin >=2.1; AGP >=8.9.1; JVM target 11; com.cometchat:chatuikit-kotlin-android ^6 OR com.cometchat:chatuikit-compose-android ^6 (6.0.x); com.cometchat:chat-sdk-android ^5; Firebase BoM (firebase-messaging)"
|
|
6
6
|
metadata:
|
|
7
7
|
author: "CometChat"
|
|
8
|
-
version: "
|
|
9
|
-
tags: "cometchat
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat android push notifications fcm v6 firebase"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
> **Ground truth:** `
|
|
12
|
+
> **Ground truth:** `features.android-v6.json` (`push-notifications`) + the **live notifications docs** — `/notifications/android-push-notifications` is the manual (12 sections: Firebase+Dashboard prep, Gradle, manifest/services, application wiring, token registration, unregister, badge count, message/call pushes, payload customization, navigation). This skill is THIN and docs-first: it owns the ORDER and the traps; **fetch the page for exact payloads/snippets** (`core` → `references/docs-map.md`).
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Set up push notifications for CometChat v6 using Firebase Cloud Messaging (FCM), handle chat and call notifications, and integrate VoIP for background call handling.
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- `cometchat-android-v6-core` — install, credentials, `initFromSettings → login`, lifecycle. Assumed here, never repeated.
|
|
16
|
+
- `cometchat-android-v6-calls` — call pushes ride the same channel (ConnectionService path in the docs).
|
|
19
17
|
|
|
20
18
|
## Use this skill when
|
|
19
|
+
"add push notifications", "set up FCM with CometChat", "pushes aren't arriving", "notification badge count", "open the right chat when a notification is tapped".
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
- Setting up VoIP with TelecomManager for native call UI
|
|
25
|
-
- Implementing deep-link navigation from notifications
|
|
26
|
-
|
|
27
|
-
## Do not use this skill when
|
|
28
|
-
|
|
29
|
-
- Just initializing the SDK (use `cometchat-android-v6-core`)
|
|
30
|
-
- Working with UI components (use `cometchat-*-components`)
|
|
31
|
-
|
|
32
|
-
## 1. FCM Setup
|
|
33
|
-
|
|
34
|
-
### 1.1 Gradle Dependencies
|
|
35
|
-
|
|
36
|
-
```kotlin
|
|
37
|
-
// In project-level build.gradle
|
|
38
|
-
plugins {
|
|
39
|
-
id("com.google.gms.google-services") version "4.4.2" apply false
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// In app-level build.gradle.kts
|
|
43
|
-
plugins {
|
|
44
|
-
id("com.google.gms.google-services")
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
dependencies {
|
|
48
|
-
implementation(platform("com.google.firebase:firebase-bom:33.x.x"))
|
|
49
|
-
implementation("com.google.firebase:firebase-messaging")
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
Add `google-services.json` to your app module's root directory.
|
|
54
|
-
|
|
55
|
-
### 1.2 Initialize Firebase
|
|
56
|
-
|
|
57
|
-
```kotlin
|
|
58
|
-
// In Application.onCreate()
|
|
59
|
-
FirebaseApp.initializeApp(this)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### 1.3 Register / unregister the push token (the kit's ONLY public push API)
|
|
63
|
-
|
|
64
|
-
This is the single load-bearing client step. `CometChatNotifications.registerPushToken(...)` binds the FCM token to the logged-in CometChat user; `unregisterPushToken(...)` clears it. The Android `PushPlatforms` constant is **`FCM_ANDROID`** (verified in `com.cometchat.chat.enums.PushPlatforms` — the only Android value). Everything in §2 onward is sample-app glue you control; *this* is the real API.
|
|
21
|
+
## Feature check (the oracle first)
|
|
22
|
+
`features.android-v6.json` → `push-notifications`: **`gradle-package`**, `needs_stitching: true`, `needs_dashboard: true`. So it is never "just code": it needs **(a)** a Firebase project + `google-services.json`, **(b)** an FCM **provider configured in the CometChat Dashboard** (you get a **Provider ID** — you'll need it in code), and **(c)** client wiring. Tell the user all three up front; you cannot do (a)/(b) for them.
|
|
65
23
|
|
|
24
|
+
## Enablement — the ordered path
|
|
25
|
+
1. **Firebase + Dashboard** — create/choose the Firebase project, add the Android app, download `google-services.json` into `app/`. In the CometChat Dashboard → Notifications, add the FCM provider (service-account credentials) and note the **Provider ID**.
|
|
26
|
+
2. **Gradle** — Google services plugin + `com.google.firebase:firebase-messaging` (via the Firebase BoM) alongside your kit + `chat-sdk-android`. Exact coordinates/versions: fetch the docs page (§2) rather than pinning from memory.
|
|
27
|
+
3. **Manifest + service** — the `POST_NOTIFICATIONS` runtime permission (Android 13+), your `FirebaseMessagingService` subclass registered in the manifest, and a notification channel. (docs §3, §5)
|
|
28
|
+
4. **Register the token AFTER login succeeds** — never before; the token binds to the logged-in user:
|
|
66
29
|
```kotlin
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
import com.cometchat.chat.exceptions.CometChatException
|
|
70
|
-
import com.google.firebase.messaging.FirebaseMessaging
|
|
71
|
-
|
|
72
|
-
// Call AFTER CometChatUIKit.login(...) resolves (a token registered before
|
|
73
|
-
// login is not bound to a user). Also call from FCMService.onNewToken when a
|
|
74
|
-
// session already exists (token rotation).
|
|
75
|
-
fun registerPushToken() {
|
|
76
|
-
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
|
|
77
|
-
if (!task.isSuccessful) return@addOnCompleteListener
|
|
30
|
+
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
|
|
31
|
+
if (task.isSuccessful) {
|
|
78
32
|
CometChatNotifications.registerPushToken(
|
|
79
33
|
task.result,
|
|
80
34
|
PushPlatforms.FCM_ANDROID,
|
|
81
|
-
|
|
82
|
-
object : CometChat.CallbackListener<String
|
|
83
|
-
override fun onSuccess(
|
|
84
|
-
override fun onError(e: CometChatException) { /*
|
|
35
|
+
PROVIDER_ID, // from the Dashboard FCM provider
|
|
36
|
+
object : CometChat.CallbackListener<String?>() {
|
|
37
|
+
override fun onSuccess(uid: String?) { /* registered */ }
|
|
38
|
+
override fun onError(e: CometChatException) { /* retry / surface */ }
|
|
85
39
|
}
|
|
86
40
|
)
|
|
87
41
|
}
|
|
88
42
|
}
|
|
89
|
-
|
|
90
|
-
// Call BEFORE CometChatUIKit.logout() — otherwise the logged-out device keeps
|
|
91
|
-
// receiving pushes for the previous user.
|
|
92
|
-
fun unregisterPushToken(onDone: () -> Unit) {
|
|
93
|
-
CometChatNotifications.unregisterPushToken(object : CometChat.CallbackListener<String>() {
|
|
94
|
-
override fun onSuccess(s: String?) { onDone() }
|
|
95
|
-
override fun onError(e: CometChatException) { onDone() } // proceed with logout regardless
|
|
96
|
-
})
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Lifecycle: **register after login resolves** (and on `onNewToken` when a session exists), **unregister before logout**. This mirrors the verified `cometchat-android-v5-push` pattern — the registration API is identical across v5/v6 (it lives in the Chat SDK, not the UI Kit).
|
|
101
|
-
|
|
102
|
-
## 2. FCMService Implementation
|
|
103
|
-
|
|
104
|
-
> **Heads-up — this is a reference pattern.** The classes referenced below (`CometChatVoIP`, `CometChatVoIPConnectionService`, `FCMMessageDTO`, `FCMCallDto`, `FCMService`, `VoIPPermissionListener`, `CometChatVoIPUtils`, `FCMMessageNotificationUtils`) are NOT exported from `com.cometchat:chatuikit-{compose,kotlin}-android:6.x`. They are sample-app glue (derived from the CometChat Android push sample app — note: not present in the v6 kit clone, so treat them as a copy-in/reference pattern) — copy the relevant source files into your project, or use them as a guide for writing your own equivalents. The kit's only public push surface is `CometChatNotifications.registerPushToken(...)` / `unregisterPushToken(...)`; everything below is glue you control.
|
|
105
|
-
|
|
106
|
-
Pattern from `master-app-jetpack/fcm/FCMService.kt` (sample-app code, copy into your project):
|
|
107
|
-
|
|
108
|
-
```kotlin
|
|
109
|
-
class FCMService : FirebaseMessagingService() {
|
|
110
|
-
|
|
111
|
-
companion object {
|
|
112
|
-
var fcmToken: String? = null
|
|
113
|
-
private set
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
override fun onNewToken(token: String) {
|
|
117
|
-
super.onNewToken(token)
|
|
118
|
-
fcmToken = token
|
|
119
|
-
// Store token for later use (e.g., SharedPreferences)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
override fun onMessageReceived(message: RemoteMessage) {
|
|
123
|
-
super.onMessageReceived(message)
|
|
124
|
-
|
|
125
|
-
if (message.data.isEmpty()) return
|
|
126
|
-
|
|
127
|
-
val type = message.data["type"]?.lowercase()
|
|
128
|
-
when (type) {
|
|
129
|
-
"chat" -> handleChatNotification(message)
|
|
130
|
-
"call" -> handleCallNotification(message)
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### 2.1 Chat Notification Handling
|
|
137
|
-
|
|
138
|
-
```kotlin
|
|
139
|
-
private fun handleChatNotification(message: RemoteMessage) {
|
|
140
|
-
val fcmMessageDTO = Gson().fromJson(
|
|
141
|
-
Gson().toJson(message.data),
|
|
142
|
-
FCMMessageDTO::class.java
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
// Mark as delivered for read receipts (only if SDK is initialized)
|
|
146
|
-
if (CometChatUIKit.isSDKInitialized()) {
|
|
147
|
-
CometChat.markAsDelivered(
|
|
148
|
-
fcmMessageDTO.tag!!.toLong(),
|
|
149
|
-
fcmMessageDTO.sender!!,
|
|
150
|
-
fcmMessageDTO.receiverType!!,
|
|
151
|
-
fcmMessageDTO.receiver!!
|
|
152
|
-
)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Show notification if user is NOT in the same chat
|
|
156
|
-
val isUser = fcmMessageDTO.receiverType == CometChatConstants.RECEIVER_TYPE_USER
|
|
157
|
-
val uid = if (isUser) fcmMessageDTO.sender!! else fcmMessageDTO.receiver!!
|
|
158
|
-
|
|
159
|
-
if (uid != currentOpenChatId) {
|
|
160
|
-
// Build and show notification
|
|
161
|
-
FCMMessageNotificationUtils.showNotification(
|
|
162
|
-
this, fcmMessageDTO, intent,
|
|
163
|
-
NOTIFICATION_KEY_REPLY_ACTION,
|
|
164
|
-
NotificationCompat.CATEGORY_MESSAGE
|
|
165
|
-
)
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### 2.2 Call Notification Handling
|
|
171
|
-
|
|
172
|
-
```kotlin
|
|
173
|
-
private fun handleCallNotification(message: RemoteMessage) {
|
|
174
|
-
val sessionId = message.data["sessionId"]
|
|
175
|
-
val callAction = message.data["callAction"]
|
|
176
|
-
|
|
177
|
-
// CRITICAL: Check if SDK is initialized
|
|
178
|
-
if (!CometChatUIKit.isSDKInitialized()) {
|
|
179
|
-
return // Cannot handle call without SDK
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Check VoIP permissions
|
|
183
|
-
if (!CometChatVoIP.hasReadPhoneStatePermission(this) ||
|
|
184
|
-
!CometChatVoIP.hasManageOwnCallsPermission(this) ||
|
|
185
|
-
!CometChatVoIP.hasAnswerPhoneCallsPermission(this)) {
|
|
186
|
-
return
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Check phone account is enabled
|
|
190
|
-
CometChatVoIP.hasEnabledPhoneAccountForVoIP(this, object : VoIPPermissionListener {
|
|
191
|
-
override fun onPermissionsGranted() {
|
|
192
|
-
handleCallFlow(message)
|
|
193
|
-
}
|
|
194
|
-
override fun onPermissionsDenied(error: CometChatVoIPError?) {
|
|
195
|
-
// Cannot show VoIP UI
|
|
196
|
-
}
|
|
197
|
-
})
|
|
198
|
-
}
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## 3. VoIP Integration
|
|
202
|
-
|
|
203
|
-
### 3.1 Required Permissions
|
|
204
|
-
|
|
205
|
-
```xml
|
|
206
|
-
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
|
207
|
-
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
|
|
208
|
-
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
|
|
209
43
|
```
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
44
|
+
5. **Re-register on token refresh** — the same call inside your service's `onNewToken(token)`. **Without this, pushes stop silently after Firebase rotates the token.**
|
|
45
|
+
6. **Unregister on logout — BEFORE `CometChatUIKit.logout()`**:
|
|
213
46
|
```kotlin
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
FCMCallDto::class.java
|
|
218
|
-
)
|
|
219
|
-
|
|
220
|
-
// Initialize VoIP
|
|
221
|
-
CometChatVoIP.init(this, applicationInfo.loadLabel(packageManager).toString())
|
|
222
|
-
|
|
223
|
-
when (callData.callAction) {
|
|
224
|
-
"initiated" -> {
|
|
225
|
-
// Show incoming call UI (only if app is in background)
|
|
226
|
-
if (!isAppInForeground()) {
|
|
227
|
-
voipIncomingCall(callData)
|
|
228
|
-
}
|
|
229
|
-
// If foreground, UIKit's CometChatIncomingCall handles it
|
|
230
|
-
}
|
|
231
|
-
"cancelled", "unanswered" -> {
|
|
232
|
-
// End the native call UI if session matches
|
|
233
|
-
if (CometChatVoIPUtils.currentSessionId == callData.sessionId) {
|
|
234
|
-
CometChatVoIP.telecomManager?.endCall()
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### 3.3 Foreground vs Background Routing
|
|
242
|
-
|
|
243
|
-
| App State | Incoming Call Handler |
|
|
244
|
-
|---|---|
|
|
245
|
-
| Foreground | UIKit's `CometChatIncomingCall` via SDK call listener |
|
|
246
|
-
| Background | VoIP via `TelecomManager` + `CometChatVoIPConnectionService` |
|
|
247
|
-
| Killed | FCM wakes app, but SDK may not be initialized — cannot handle call |
|
|
248
|
-
|
|
249
|
-
### 3.4 Busy Rejection
|
|
250
|
-
|
|
251
|
-
```kotlin
|
|
252
|
-
private fun rejectCallWithBusyStatus(call: Call) {
|
|
253
|
-
CometChat.rejectCall(
|
|
254
|
-
call.sessionId,
|
|
255
|
-
CometChatConstants.CALL_STATUS_BUSY,
|
|
256
|
-
object : CometChat.CallbackListener<Call>() {
|
|
257
|
-
override fun onSuccess(rejectedCall: Call?) {
|
|
258
|
-
rejectedCall?.let {
|
|
259
|
-
CometChatEvents.emitCallEvent(CometChatCallEvent.CallRejected(it))
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
override fun onError(e: CometChatException) { }
|
|
263
|
-
}
|
|
264
|
-
)
|
|
265
|
-
}
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
## 4. AndroidManifest Registration
|
|
269
|
-
|
|
270
|
-
```xml
|
|
271
|
-
<service
|
|
272
|
-
android:name=".fcm.FCMService"
|
|
273
|
-
android:exported="false">
|
|
274
|
-
<intent-filter>
|
|
275
|
-
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
|
276
|
-
</intent-filter>
|
|
277
|
-
</service>
|
|
278
|
-
|
|
279
|
-
<!-- VoIP Connection Service -->
|
|
280
|
-
<service
|
|
281
|
-
android:name=".voip.CometChatVoIPConnectionService"
|
|
282
|
-
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
|
|
283
|
-
android:exported="true">
|
|
284
|
-
<intent-filter>
|
|
285
|
-
<action android:name="android.telecom.ConnectionService" />
|
|
286
|
-
</intent-filter>
|
|
287
|
-
</service>
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
## 5. WebSocket Connection Management
|
|
291
|
-
|
|
292
|
-
From `master-app-jetpack/Application.kt` — manage WebSocket connections based on app lifecycle:
|
|
293
|
-
|
|
294
|
-
```kotlin
|
|
295
|
-
// When app comes to foreground
|
|
296
|
-
CometChat.connect(object : CometChat.CallbackListener<String?>() {
|
|
297
|
-
override fun onSuccess(s: String?) { /* connected */ }
|
|
298
|
-
override fun onError(e: CometChatException) { /* failed */ }
|
|
299
|
-
})
|
|
300
|
-
|
|
301
|
-
// When app goes to background
|
|
302
|
-
CometChat.disconnect(object : CometChat.CallbackListener<String?>() {
|
|
303
|
-
override fun onSuccess(s: String?) { /* disconnected */ }
|
|
304
|
-
override fun onError(e: CometChatException) { /* failed */ }
|
|
47
|
+
CometChatNotifications.unregisterPushToken(object : CometChat.CallbackListener<String?>() {
|
|
48
|
+
override fun onSuccess(s: String?) { /* then log out */ }
|
|
49
|
+
override fun onError(e: CometChatException) { /* surface */ }
|
|
305
50
|
})
|
|
306
51
|
```
|
|
52
|
+
Skipping this leaks notifications to the previous user on a shared device.
|
|
53
|
+
7. **Handle the payload** — message pushes (§9), call pushes via ConnectionService (§10), custom text/parsing (§11), tap-to-open navigation (§12), badge count (§8, needs the Dashboard badge toggle + a badge library). Fetch these sections; don't invent payload keys.
|
|
54
|
+
|
|
55
|
+
## Client token wiring — the rules that matter
|
|
56
|
+
- Registration is **per logged-in user per device**: register after every successful login, unregister before every logout, re-register on refresh.
|
|
57
|
+
- The **Provider ID must match** the Dashboard FCM provider — a wrong/blank ID registers fine and then delivers nothing.
|
|
58
|
+
- Handle `onError` — a failed registration is the single most common cause of "no notifications", and it fails quietly if you ignore it.
|
|
59
|
+
- Foreground behavior is yours: CometChat delivers the push; whether you show a notification while the chat is open is app logic.
|
|
307
60
|
|
|
308
|
-
##
|
|
61
|
+
## Common pitfalls
|
|
62
|
+
Registering before login (token bound to nobody) · no `onNewToken` re-registration (pushes die after rotation) · no unregister on logout · wrong/omitted Provider ID · missing `google-services.json` or the Google-services plugin · missing `POST_NOTIFICATIONS` permission on Android 13+ · no notification channel (notification silently dropped) · testing on an emulator without Play services · assuming the Dashboard provider exists — ask.
|
|
309
63
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
- VoIP requires READ_PHONE_STATE, MANAGE_OWN_CALLS, and ANSWER_PHONE_CALLS permissions — check all three before handling calls
|
|
313
|
-
- `CometChat.markAsDelivered()` requires the SDK to be initialized — skip it if not
|
|
314
|
-
- For push token registration, use `CometChatNotifications.registerPushToken(...)` / `unregisterPushToken(...)` — that is the kit's only public push API. The `CometChatVoIP*` / `FCM*` classes shown above are sample-app glue (`master-app-jetpack`), not part of `chatuikit-{compose,kotlin}`
|
|
315
|
-
- Always manage WebSocket connections based on app lifecycle to avoid battery drain
|
|
64
|
+
## Verify it works
|
|
65
|
+
Compile against the pinned kit (`./gradlew :app:assembleDebug # in YOUR app (npm run verify:fences:android-v6 is a pack-repo gate)`). **Live delivery is a MANUAL device check — it cannot be auto-smoked** (blocked-external; be honest about this): install on a real device with Play services, log in, confirm the registration callback hit `onSuccess`, background the app, send a message from another user → the notification arrives, and tapping it opens the right chat. Then log out and confirm notifications stop. Nothing arriving ⇒ check, in order: registration `onError`, Provider ID, Dashboard provider config, `google-services.json`, notification permission/channel.
|