@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,633 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-flutter-v6-production
|
|
3
|
-
description:
|
|
4
|
-
Production readiness for CometChat Flutter UIKit v6 — server-side auth tokens,
|
|
5
|
-
user management, Android ProGuard/R8, iOS Info.plist, minSdk, release build
|
|
6
|
-
checklist, environment configuration, and security hardening. Use when preparing
|
|
7
|
-
a CometChat Flutter app for production deployment.
|
|
3
|
+
description: "Take a CometChat Flutter integration to production — server-minted auth tokens instead of the Auth Key, secret handling in a Flutter bundle, logout/session hygiene, release build config, and the pre-ship checklist. Triggers: 'production auth cometchat', 'auth token flutter', 'is the auth key safe', 'ship cometchat to production', 'release build cometchat'."
|
|
8
4
|
license: "MIT"
|
|
9
|
-
compatibility: "cometchat_chat_uikit ^6.0.
|
|
5
|
+
compatibility: "Flutter >=3.38.9; cometchat_chat_uikit ^6 (6.1.x, verified 6.1.0); cometchat_sdk ^5.0.6"
|
|
10
6
|
metadata:
|
|
11
7
|
author: "CometChat"
|
|
12
|
-
version: "
|
|
13
|
-
tags: "cometchat flutter production
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat flutter production auth-token security release v6"
|
|
14
10
|
---
|
|
15
11
|
|
|
16
|
-
> **Ground truth:** `
|
|
12
|
+
> **Ground truth:** `loginWithAuthToken` and `logout` are catalog-verified against 6.1.0. Token MINTING is a server-side REST call — its exact endpoint is FETCHED from the REST API docs, never guessed. The dev-vs-prod credential rule is `RULES.md` §4.
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- `cometchat-flutter-v6-core` — install, credentials, `init→login→render`, `lifecycle.md`. This skill ASSUMES it.
|
|
16
|
+
- `cometchat-flutter-v6-patterns` — where config comes from in your build pipeline.
|
|
19
17
|
|
|
20
|
-
|
|
18
|
+
## Use this skill when
|
|
19
|
+
Hardening before release: "is the Auth Key safe to ship", "set up production auth", "what do I check before shipping".
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## 1. Dev Mode vs Production
|
|
25
|
-
|
|
26
|
-
CometChat supports two authentication modes. Understanding the difference is critical before shipping.
|
|
27
|
-
|
|
28
|
-
### Dev Mode (authKey — development only)
|
|
29
|
-
|
|
30
|
-
The `authKey` is embedded in client code and lets any user log in by UID alone. Convenient for prototyping, but **anyone who decompiles your app can impersonate any user**.
|
|
31
|
-
|
|
32
|
-
```dart
|
|
33
|
-
// ✅ Dev mode — fine for prototyping, NEVER ship this
|
|
34
|
-
final settings = (UIKitSettingsBuilder()
|
|
35
|
-
..appId = 'APP_ID'
|
|
36
|
-
..region = 'us'
|
|
37
|
-
..authKey = 'AUTH_KEY' // Client-side secret — dev only
|
|
38
|
-
..subscriptionType = CometChatSubscriptionType.allUsers)
|
|
39
|
-
.build();
|
|
40
|
-
|
|
41
|
-
await CometChatUIKit.init(uiKitSettings: settings);
|
|
42
|
-
|
|
43
|
-
// Login with authKey (SDK uses the key from UIKitSettings internally)
|
|
44
|
-
await CometChatUIKit.login('user_uid',
|
|
45
|
-
onSuccess: (user) => debugPrint('Logged in: ${user.name}'),
|
|
46
|
-
onError: (e) => debugPrint('Login failed: ${e.message}'),
|
|
47
|
-
);
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Production Mode (authToken — server-minted)
|
|
51
|
-
|
|
52
|
-
Your backend generates a short-lived `authToken` for each authenticated user. The client never sees the `authKey`.
|
|
53
|
-
|
|
54
|
-
```dart
|
|
55
|
-
// ✅ Production — authKey is NOT in client code
|
|
56
|
-
final settings = (UIKitSettingsBuilder()
|
|
57
|
-
..appId = 'APP_ID'
|
|
58
|
-
..region = 'us'
|
|
59
|
-
// No authKey here — tokens come from your server
|
|
60
|
-
..subscriptionType = CometChatSubscriptionType.allUsers)
|
|
61
|
-
.build();
|
|
62
|
-
|
|
63
|
-
await CometChatUIKit.init(uiKitSettings: settings);
|
|
64
|
-
|
|
65
|
-
// Login with server-provided token
|
|
66
|
-
final authToken = await yourBackend.getCometChatToken(currentUserId);
|
|
67
|
-
await CometChatUIKit.loginWithAuthToken(authToken,
|
|
68
|
-
onSuccess: (user) => debugPrint('Logged in: ${user.name}'),
|
|
69
|
-
onError: (e) => debugPrint('Login failed: ${e.message}'),
|
|
70
|
-
);
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Rule**: If `authKey` appears anywhere in your production build, you have a security vulnerability.
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## 2. Server-Side Auth Token Flow
|
|
78
|
-
|
|
79
|
-
### How It Works
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
┌──────────┐ 1. Authenticate ┌──────────────┐
|
|
83
|
-
│ Flutter │ ──────────────────────> │ Your Server │
|
|
84
|
-
│ App │ │ (Backend) │
|
|
85
|
-
│ │ 4. Return authToken │ │
|
|
86
|
-
│ │ <────────────────────── │ │
|
|
87
|
-
└──────────┘ └──────────────┘
|
|
88
|
-
│ │
|
|
89
|
-
│ 5. loginWithAuthToken(token) │ 2. Verify user identity
|
|
90
|
-
│ │ 3. POST /auth-tokens
|
|
91
|
-
v v
|
|
92
|
-
┌──────────┐ ┌──────────────┐
|
|
93
|
-
│ CometChat│ │ CometChat │
|
|
94
|
-
│ SDK │ │ REST API │
|
|
95
|
-
└──────────┘ └──────────────┘
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Step 1: Your Backend Generates the Token
|
|
99
|
-
|
|
100
|
-
Your server calls the CometChat REST API with the `authKey` (which stays server-side):
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
curl -X POST "https://<APP_ID>.api-<REGION>.cometchat.io/v3/users/<UID>/auth_tokens" \
|
|
104
|
-
-H "apikey: YOUR_REST_API_KEY" \
|
|
105
|
-
-H "Content-Type: application/json"
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Response:
|
|
109
|
-
```json
|
|
110
|
-
{
|
|
111
|
-
"data": {
|
|
112
|
-
"uid": "user_uid",
|
|
113
|
-
"authToken": "user_uid_1a2b3c4d5e6f7a8b9c0d1e2f",
|
|
114
|
-
"createdAt": 1700000000
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Replace `<APP_ID>` with your CometChat app ID and `<REGION>` with your region code (`us`, `eu`, or `in`). The full host becomes:
|
|
120
|
-
- US: `<APP_ID>.api-us.cometchat.io`
|
|
121
|
-
- EU: `<APP_ID>.api-eu.cometchat.io`
|
|
122
|
-
- IN: `<APP_ID>.api-in.cometchat.io`
|
|
123
|
-
|
|
124
|
-
Use `YOUR_REST_API_KEY` from the CometChat dashboard (API & Auth Keys). Do not confuse it with the client `authKey`.
|
|
125
|
-
|
|
126
|
-
### Step 2: Your Backend Returns the Token to the Client
|
|
127
|
-
|
|
128
|
-
Your Flutter app calls your own backend (after the user authenticates with your auth system), and your backend returns the CometChat `authToken`.
|
|
129
|
-
|
|
130
|
-
### Step 3: Flutter Client Logs In with the Token
|
|
131
|
-
|
|
132
|
-
```dart
|
|
133
|
-
Future<void> loginWithToken(String uid) async {
|
|
134
|
-
// 1. Call YOUR backend to get a CometChat auth token
|
|
135
|
-
final response = await http.post(
|
|
136
|
-
Uri.parse('https://your-api.com/cometchat/token'),
|
|
137
|
-
headers: {'Authorization': 'Bearer ${yourJwt}'},
|
|
138
|
-
body: jsonEncode({'uid': uid}),
|
|
139
|
-
);
|
|
140
|
-
final authToken = jsonDecode(response.body)['authToken'];
|
|
141
|
-
|
|
142
|
-
// 2. Login to CometChat with the token
|
|
143
|
-
CometChatUIKit.loginWithAuthToken(authToken,
|
|
144
|
-
onSuccess: (user) {
|
|
145
|
-
// CometChatUIKit.loggedInUser is now set
|
|
146
|
-
debugPrint('Logged in as ${user.name}');
|
|
147
|
-
},
|
|
148
|
-
onError: (e) {
|
|
149
|
-
debugPrint('CometChat login failed: ${e.message}');
|
|
150
|
-
},
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
**Note**: `loginWithAuthToken` populates `CometChatUIKit.loggedInUser` before calling `onSuccess` — same as `login()` and `init()`. No need to call `getLoggedInUser()` afterward.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## 3. User Management
|
|
160
|
-
|
|
161
|
-
### Creating Users
|
|
162
|
-
|
|
163
|
-
```dart
|
|
164
|
-
final user = User(
|
|
165
|
-
uid: 'user_123',
|
|
166
|
-
name: 'Jane Doe',
|
|
167
|
-
avatar: 'https://example.com/avatar.png',
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
await CometChatUIKit.createUser(user,
|
|
171
|
-
onSuccess: (created) => debugPrint('Created: ${created.uid}'),
|
|
172
|
-
onError: (e) => debugPrint('Create failed: ${e.message}'),
|
|
173
|
-
);
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### Updating Users
|
|
177
|
-
|
|
178
|
-
```dart
|
|
179
|
-
final user = User(
|
|
180
|
-
uid: 'user_123',
|
|
181
|
-
name: 'Jane Smith', // Updated name
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
await CometChatUIKit.updateUser(user,
|
|
185
|
-
onSuccess: (updated) => debugPrint('Updated: ${updated.name}'),
|
|
186
|
-
onError: (e) => debugPrint('Update failed: ${e.message}'),
|
|
187
|
-
);
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Production Warning
|
|
191
|
-
|
|
192
|
-
`createUser()` and `updateUser()` require the `authKey` (set in UIKitSettings). In production:
|
|
193
|
-
|
|
194
|
-
- **Move user creation to your backend** — call the CometChat REST API server-side
|
|
195
|
-
- **Move user updates to your backend** — same approach
|
|
196
|
-
- The Flutter client should only call `loginWithAuthToken()` — never create or update users directly
|
|
197
|
-
|
|
198
|
-
Server-side user creation:
|
|
199
|
-
```bash
|
|
200
|
-
curl -X POST "https://<APP_ID>.api-<REGION>.cometchat.io/v3/users" \
|
|
201
|
-
-H "apikey: YOUR_REST_API_KEY" \
|
|
202
|
-
-H "Content-Type: application/json" \
|
|
203
|
-
-d '{"uid": "user_123", "name": "Jane Doe"}'
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## 4. Android Build Requirements
|
|
209
|
-
|
|
210
|
-
These are required for CometChat UIKit v6 on Android. Without them, debug builds may work but release builds will crash.
|
|
211
|
-
|
|
212
|
-
### gradle.properties
|
|
213
|
-
|
|
214
|
-
Ensure these are in `android/gradle.properties`:
|
|
215
|
-
|
|
216
|
-
```properties
|
|
217
|
-
android.useAndroidX=true
|
|
218
|
-
android.enableJetifier=true
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
`enableJetifier` resolves old Android Support Library conflicts from transitive dependencies in the CometChat SDK.
|
|
222
|
-
|
|
223
|
-
### minSdk 26
|
|
224
|
-
|
|
225
|
-
In `android/app/build.gradle` (Groovy) or `build.gradle.kts` (Kotlin DSL):
|
|
226
|
-
|
|
227
|
-
```kotlin
|
|
228
|
-
// build.gradle.kts
|
|
229
|
-
android {
|
|
230
|
-
defaultConfig {
|
|
231
|
-
minSdk = 26 // Required by cometchat_calls_sdk
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
```groovy
|
|
237
|
-
// build.gradle (Groovy)
|
|
238
|
-
android {
|
|
239
|
-
defaultConfig {
|
|
240
|
-
minSdkVersion 26
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
If your `minSdk` is lower than 26, the build will fail with a manifest merger error referencing `cometchat_calls_sdk`.
|
|
246
|
-
|
|
247
|
-
### ProGuard / R8 Keep Rules
|
|
248
|
-
|
|
249
|
-
Create `android/app/proguard-rules.pro` with these exact contents:
|
|
250
|
-
|
|
251
|
-
```proguard
|
|
252
|
-
# CometChat — prevent R8 from stripping SDK classes used via reflection
|
|
253
|
-
-keep class com.cometchat.** { *; }
|
|
254
|
-
-keep interface com.cometchat.** { *; }
|
|
255
|
-
|
|
256
|
-
# Suppress warnings for Calls SDK classes referenced cross-module
|
|
257
|
-
-dontwarn com.cometchat.calls.CometChatRTCView$CometChatRTCViewBuilder
|
|
258
|
-
-dontwarn com.cometchat.calls.CometChatRTCView
|
|
259
|
-
-dontwarn com.cometchat.calls.CometChatRTCViewListener
|
|
260
|
-
-dontwarn com.cometchat.calls.model.AnalyticsSettings
|
|
261
|
-
-dontwarn com.cometchat.calls.model.RTCCallback
|
|
262
|
-
-dontwarn com.cometchat.calls.model.RTCReceiver
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
Reference the ProGuard file in your release build type. In `android/app/build.gradle.kts`:
|
|
266
|
-
|
|
267
|
-
```kotlin
|
|
268
|
-
android {
|
|
269
|
-
buildTypes {
|
|
270
|
-
release {
|
|
271
|
-
isMinifyEnabled = true
|
|
272
|
-
isShrinkResources = true
|
|
273
|
-
proguardFiles(
|
|
274
|
-
getDefaultProguardFile("proguard-android-optimize.txt"),
|
|
275
|
-
"proguard-rules.pro"
|
|
276
|
-
)
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
Or in `android/app/build.gradle` (Groovy):
|
|
283
|
-
|
|
284
|
-
```groovy
|
|
285
|
-
android {
|
|
286
|
-
buildTypes {
|
|
287
|
-
release {
|
|
288
|
-
minifyEnabled true
|
|
289
|
-
shrinkResources true
|
|
290
|
-
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
**Without these rules, release builds crash with `ClassNotFoundException` for CometChat classes.** Debug builds work fine because R8/ProGuard only runs on release.
|
|
297
|
-
|
|
298
|
-
### Multidex (if targeting API < 21 elsewhere)
|
|
299
|
-
|
|
300
|
-
CometChat requires minSdk 26, so multidex is not needed (it's automatic above API 21). If you have a multi-module setup where another module targets lower, ensure the app module still sets `minSdk = 26`.
|
|
301
|
-
|
|
302
|
-
---
|
|
303
|
-
|
|
304
|
-
## 5. iOS Build Requirements
|
|
305
|
-
|
|
306
|
-
### Info.plist Permissions
|
|
307
|
-
|
|
308
|
-
Add these to `ios/Runner/Info.plist` inside the top-level `<dict>`:
|
|
309
|
-
|
|
310
|
-
```xml
|
|
311
|
-
<!-- Camera access (video calls, sending photos) -->
|
|
312
|
-
<key>NSCameraUsageDescription</key>
|
|
313
|
-
<string>$(PRODUCT_NAME) needs camera access for video calls and sending photos</string>
|
|
314
|
-
|
|
315
|
-
<!-- Microphone access (voice/video calls, audio messages) -->
|
|
316
|
-
<key>NSMicrophoneUsageDescription</key>
|
|
317
|
-
<string>$(PRODUCT_NAME) needs microphone access for voice and video calls</string>
|
|
21
|
+
## Prerequisites & install
|
|
22
|
+
Core done. No new package.
|
|
318
23
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
<string>$(PRODUCT_NAME) needs photo library access to send images</string>
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Without these, the app crashes when the user taps the camera/gallery/mic button — iOS terminates apps that access protected APIs without a usage description.
|
|
325
|
-
|
|
326
|
-
### VoIP Background Mode (for CallKit)
|
|
327
|
-
|
|
328
|
-
If using CometChat calling with CallKit (incoming call notifications when app is backgrounded), add to `Info.plist`:
|
|
329
|
-
|
|
330
|
-
```xml
|
|
331
|
-
<key>UIBackgroundModes</key>
|
|
332
|
-
<array>
|
|
333
|
-
<string>voip</string>
|
|
334
|
-
<string>remote-notification</string>
|
|
335
|
-
</array>
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
Or enable via Xcode: Target → Signing & Capabilities → + Background Modes → check "Voice over IP" and "Remote notifications".
|
|
339
|
-
|
|
340
|
-
### App Transport Security
|
|
341
|
-
|
|
342
|
-
CometChat uses HTTPS by default, so no ATS exceptions are needed. If you're loading user avatars or media from HTTP URLs (not recommended), add:
|
|
343
|
-
|
|
344
|
-
```xml
|
|
345
|
-
<key>NSAppTransportSecurity</key>
|
|
346
|
-
<dict>
|
|
347
|
-
<key>NSAllowsArbitraryLoads</key>
|
|
348
|
-
<true/>
|
|
349
|
-
</dict>
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
**Avoid this in production** — it disables all transport security. Instead, ensure all media URLs use HTTPS.
|
|
353
|
-
|
|
354
|
-
### Minimum iOS Deployment Target
|
|
355
|
-
|
|
356
|
-
In `ios/Podfile`, ensure:
|
|
357
|
-
|
|
358
|
-
```ruby
|
|
359
|
-
platform :ios, '13.0'
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
CometChat UIKit v6 requires iOS 13.0+. If your Podfile has a lower target, `pod install` will fail.
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## 6. Environment Configuration
|
|
367
|
-
|
|
368
|
-
Never hardcode credentials in source code. The `AppCredentials` pattern used in development:
|
|
369
|
-
|
|
370
|
-
```dart
|
|
371
|
-
// ❌ DON'T ship this — credentials visible in decompiled binary
|
|
372
|
-
class AppCredentials {
|
|
373
|
-
static const String appId = '26580020f03ff346';
|
|
374
|
-
static const String region = 'in';
|
|
375
|
-
static const String authKey = '4152b0366478871f0fa8d19a287dd6f5ed5f8eff';
|
|
376
|
-
}
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### Option A: Dart Defines (recommended for simple setups)
|
|
380
|
-
|
|
381
|
-
Pass credentials at build time:
|
|
382
|
-
|
|
383
|
-
```bash
|
|
384
|
-
flutter run \
|
|
385
|
-
--dart-define=COMETCHAT_APP_ID=your_app_id \
|
|
386
|
-
--dart-define=COMETCHAT_REGION=us
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
Read them in code:
|
|
390
|
-
|
|
391
|
-
```dart
|
|
392
|
-
class CometChatConfig {
|
|
393
|
-
static const appId = String.fromEnvironment('COMETCHAT_APP_ID');
|
|
394
|
-
static const region = String.fromEnvironment('COMETCHAT_REGION');
|
|
395
|
-
// No authKey in production builds — use authToken flow
|
|
396
|
-
}
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
For release builds:
|
|
400
|
-
|
|
401
|
-
```bash
|
|
402
|
-
flutter build apk \
|
|
403
|
-
--dart-define=COMETCHAT_APP_ID=your_app_id \
|
|
404
|
-
--dart-define=COMETCHAT_REGION=us
|
|
405
|
-
|
|
406
|
-
flutter build ipa \
|
|
407
|
-
--dart-define=COMETCHAT_APP_ID=your_app_id \
|
|
408
|
-
--dart-define=COMETCHAT_REGION=us
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
### Option B: .env File with flutter_dotenv
|
|
412
|
-
|
|
413
|
-
```bash
|
|
414
|
-
dart pub add flutter_dotenv
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
Create `.env` (add to `.gitignore`):
|
|
418
|
-
|
|
419
|
-
```
|
|
420
|
-
COMETCHAT_APP_ID=your_app_id
|
|
421
|
-
COMETCHAT_REGION=us
|
|
422
|
-
```
|
|
423
|
-
|
|
424
|
-
Load in code:
|
|
425
|
-
|
|
426
|
-
```dart
|
|
427
|
-
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
428
|
-
|
|
429
|
-
Future<void> main() async {
|
|
430
|
-
await dotenv.load(fileName: '.env');
|
|
431
|
-
runApp(const MyApp());
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
class CometChatConfig {
|
|
435
|
-
static String get appId => dotenv.env['COMETCHAT_APP_ID'] ?? '';
|
|
436
|
-
static String get region => dotenv.env['COMETCHAT_REGION'] ?? 'us';
|
|
437
|
-
}
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
**Note**: `.env` files bundled in the app asset can still be extracted. For true secret protection, fetch config from your backend at runtime.
|
|
441
|
-
|
|
442
|
-
### Option C: Flavor-Based Configuration
|
|
443
|
-
|
|
444
|
-
For apps with dev/staging/prod environments:
|
|
445
|
-
|
|
446
|
-
```dart
|
|
447
|
-
enum Environment { dev, staging, prod }
|
|
448
|
-
|
|
449
|
-
class CometChatConfig {
|
|
450
|
-
final String appId;
|
|
451
|
-
final String region;
|
|
452
|
-
final bool useAuthToken; // true for staging/prod
|
|
453
|
-
|
|
454
|
-
const CometChatConfig._({
|
|
455
|
-
required this.appId,
|
|
456
|
-
required this.region,
|
|
457
|
-
required this.useAuthToken,
|
|
458
|
-
});
|
|
459
|
-
|
|
460
|
-
static CometChatConfig of(Environment env) {
|
|
461
|
-
switch (env) {
|
|
462
|
-
case Environment.dev:
|
|
463
|
-
return const CometChatConfig._(
|
|
464
|
-
appId: 'dev_app_id',
|
|
465
|
-
region: 'us',
|
|
466
|
-
useAuthToken: false,
|
|
467
|
-
);
|
|
468
|
-
case Environment.staging:
|
|
469
|
-
return const CometChatConfig._(
|
|
470
|
-
appId: 'staging_app_id',
|
|
471
|
-
region: 'us',
|
|
472
|
-
useAuthToken: true,
|
|
473
|
-
);
|
|
474
|
-
case Environment.prod:
|
|
475
|
-
return const CometChatConfig._(
|
|
476
|
-
appId: 'prod_app_id',
|
|
477
|
-
region: 'us',
|
|
478
|
-
useAuthToken: true,
|
|
479
|
-
);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
---
|
|
486
|
-
|
|
487
|
-
## 7. Release Build Checklist
|
|
488
|
-
|
|
489
|
-
### Authentication
|
|
490
|
-
- [ ] `authKey` is NOT in any client-side code for production builds
|
|
491
|
-
- [ ] Server-side auth token generation is implemented and tested
|
|
492
|
-
- [ ] `CometChatUIKit.loginWithAuthToken()` is used instead of `CometChatUIKit.login()`
|
|
493
|
-
- [ ] User creation/update calls are server-side, not client-side
|
|
494
|
-
|
|
495
|
-
### Android
|
|
496
|
-
- [ ] `minSdk = 26` in `android/app/build.gradle`
|
|
497
|
-
- [ ] `android.enableJetifier=true` in `gradle.properties`
|
|
498
|
-
- [ ] `proguard-rules.pro` created with CometChat keep rules
|
|
499
|
-
- [ ] Release build type references `proguard-rules.pro`
|
|
500
|
-
- [ ] `isMinifyEnabled = true` and `isShrinkResources = true` for release
|
|
501
|
-
- [ ] Release APK/AAB tested on a real device (not just debug)
|
|
502
|
-
- [ ] Push notification provider ID configured (FCM)
|
|
503
|
-
|
|
504
|
-
### iOS
|
|
505
|
-
- [ ] `NSCameraUsageDescription` in Info.plist
|
|
506
|
-
- [ ] `NSMicrophoneUsageDescription` in Info.plist
|
|
507
|
-
- [ ] `NSPhotoLibraryUsageDescription` in Info.plist
|
|
508
|
-
- [ ] VoIP background mode enabled (if using CallKit)
|
|
509
|
-
- [ ] Minimum deployment target is iOS 13.0+
|
|
510
|
-
- [ ] Release build tested on a real device
|
|
511
|
-
- [ ] Push notification entitlements configured (APNs)
|
|
512
|
-
|
|
513
|
-
### Environment
|
|
514
|
-
- [ ] No hardcoded credentials in source code
|
|
515
|
-
- [ ] Credentials passed via dart-define, .env, or flavor config
|
|
516
|
-
- [ ] `.env` files are in `.gitignore`
|
|
517
|
-
- [ ] Production app ID and region are correct (not dev/staging)
|
|
518
|
-
|
|
519
|
-
### CometChat Configuration
|
|
520
|
-
- [ ] `CometChatUIKit.init()` called before any login or component usage
|
|
521
|
-
- [ ] `subscriptionType` set in UIKitSettingsBuilder (or presence events won't fire)
|
|
522
|
-
- [ ] `region` is lowercase (`'us'`, `'eu'`, `'in'`)
|
|
523
|
-
- [ ] Logout properly calls `CometChatUIKit.logout()` and clears local state
|
|
524
|
-
|
|
525
|
-
### Testing
|
|
526
|
-
- [ ] Release build tested end-to-end: init → login → send message → receive message → logout
|
|
527
|
-
- [ ] Tested on both Android and iOS physical devices
|
|
528
|
-
- [ ] Tested with ProGuard/R8 enabled (Android release)
|
|
529
|
-
- [ ] Tested push notifications in production environment
|
|
530
|
-
- [ ] Tested calling features if enabled (audio + video)
|
|
531
|
-
- [ ] Tested app kill → reopen → session restore (cached login via `CometChatUIKit.loggedInUser`)
|
|
532
|
-
|
|
533
|
-
---
|
|
534
|
-
|
|
535
|
-
## 8. Security Hardening
|
|
536
|
-
|
|
537
|
-
### Never Ship authKey in Production
|
|
538
|
-
|
|
539
|
-
The `authKey` allows anyone to:
|
|
540
|
-
- Log in as any user
|
|
541
|
-
- Create users
|
|
542
|
-
- Update user profiles
|
|
543
|
-
|
|
544
|
-
If it's in your APK/IPA, it can be extracted in minutes with standard decompilation tools.
|
|
24
|
+
## The one thing that actually matters: the Auth Key must not ship
|
|
25
|
+
An **Auth Key can log in as ANY user of your app.** Everything core writes for development puts it in `cometchat-settings.json`, which is bundled into the APK/IPA — and a bundle is not a secret. Anyone can extract it.
|
|
545
26
|
|
|
546
|
-
|
|
547
|
-
// ❌ SECURITY VULNERABILITY — authKey in client code
|
|
548
|
-
final settings = (UIKitSettingsBuilder()
|
|
549
|
-
..appId = 'APP_ID'
|
|
550
|
-
..region = 'us'
|
|
551
|
-
..authKey = 'AUTH_KEY_VISIBLE_TO_ATTACKERS')
|
|
552
|
-
.build();
|
|
553
|
-
|
|
554
|
-
// ✅ SECURE — no authKey, use server-minted tokens
|
|
555
|
-
final settings = (UIKitSettingsBuilder()
|
|
556
|
-
..appId = appId // App ID is not secret (it's in network requests anyway)
|
|
557
|
-
..region = region
|
|
558
|
-
..subscriptionType = CometChatSubscriptionType.allUsers)
|
|
559
|
-
.build();
|
|
560
|
-
```
|
|
561
|
-
|
|
562
|
-
### Don't Log Sensitive Data
|
|
563
|
-
|
|
564
|
-
```dart
|
|
565
|
-
// ❌ WRONG — auth tokens in logs
|
|
566
|
-
debugPrint('Token: $authToken');
|
|
567
|
-
debugPrint('User: ${user.toJson()}'); // May contain tokens
|
|
568
|
-
|
|
569
|
-
// ✅ CORRECT — log only non-sensitive identifiers
|
|
570
|
-
debugPrint('Logged in as uid: ${user.uid}');
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
In release builds, consider disabling debug prints entirely:
|
|
574
|
-
|
|
575
|
-
```dart
|
|
576
|
-
// In main.dart for release
|
|
577
|
-
if (kReleaseMode) {
|
|
578
|
-
debugPrint = (String? message, {int? wrapWidth}) {};
|
|
579
|
-
}
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
### ProGuard Obfuscation
|
|
583
|
-
|
|
584
|
-
The ProGuard rules in Section 4 keep CometChat classes intact (required for the SDK to work), but R8 will still obfuscate your own application code. This makes reverse engineering harder.
|
|
585
|
-
|
|
586
|
-
Ensure `isMinifyEnabled = true` is set for release builds — it enables both code shrinking and obfuscation.
|
|
587
|
-
|
|
588
|
-
### Token Expiry and Refresh
|
|
589
|
-
|
|
590
|
-
CometChat auth tokens don't expire by default, but you can configure token expiry in the CometChat dashboard. If you enable expiry:
|
|
27
|
+
**Development (what core wired):** `credentials.authKey` in the settings asset → `CometChatUIKit.login(uid)`. Fine for building; never for release.
|
|
591
28
|
|
|
29
|
+
**Production (what you must move to):**
|
|
30
|
+
1. Your **server** mints a per-user auth token by calling CometChat's REST API with the **REST API Key** (which stays on the server, never in the app).
|
|
31
|
+
2. Your app authenticates the user your normal way, then asks YOUR backend for that token.
|
|
32
|
+
3. The app signs in with the token:
|
|
592
33
|
```dart
|
|
593
|
-
|
|
594
|
-
onSuccess: (user) {
|
|
595
|
-
// Token accepted, proceed
|
|
596
|
-
},
|
|
597
|
-
onError: (e) {
|
|
598
|
-
if (e.code == 'ERR_AUTH_TOKEN_NOT_FOUND' || e.code == 'AUTH_ERR_AUTH_TOKEN_NOT_FOUND') {
|
|
599
|
-
// Token expired or invalid — fetch a new one from your backend
|
|
600
|
-
refreshAndRetryLogin();
|
|
601
|
-
}
|
|
602
|
-
},
|
|
603
|
-
);
|
|
604
|
-
```
|
|
605
|
-
|
|
606
|
-
### Network Security
|
|
34
|
+
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
607
35
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
### Session Management
|
|
615
|
-
|
|
616
|
-
```dart
|
|
617
|
-
// Always logout when user signs out of your app
|
|
618
|
-
Future<void> signOut() async {
|
|
619
|
-
// 1. Logout from CometChat
|
|
620
|
-
CometChatUIKit.logout(
|
|
621
|
-
onSuccess: (_) => debugPrint('CometChat logout success'),
|
|
622
|
-
onError: (e) => debugPrint('CometChat logout failed: ${e.message}'),
|
|
36
|
+
Future<void> signIn(String authTokenFromYourServer) async {
|
|
37
|
+
await CometChatUIKit.loginWithAuthToken(
|
|
38
|
+
authTokenFromYourServer,
|
|
39
|
+
onSuccess: (User user) {},
|
|
40
|
+
onError: (CometChatException e) {},
|
|
623
41
|
);
|
|
624
|
-
|
|
625
|
-
// 2. Clear your own auth state
|
|
626
|
-
await yourAuthService.signOut();
|
|
627
|
-
|
|
628
|
-
// 3. Navigate to login screen
|
|
629
|
-
navigator.pushReplacementNamed('/login');
|
|
630
42
|
}
|
|
631
43
|
```
|
|
632
|
-
|
|
633
|
-
|
|
44
|
+
4. **Remove `credentials.authKey`** from the shipped settings file. Confirm by unzipping the release artifact and grepping for the key — do not take it on trust.
|
|
45
|
+
> Fetch the exact token-minting endpoint from the REST API docs (`../cometchat-flutter-v6-core/references/docs-map.md` → SDK/REST). Never invent a URL or payload.
|
|
46
|
+
|
|
47
|
+
## Session hygiene
|
|
48
|
+
- **Log out properly** — `CometChatUIKit.logout()` on your app's sign-out, and unregister the push token FIRST (`-push`), or the next user of the device receives the previous user's notifications.
|
|
49
|
+
- **One user per session.** `login` no-ops if that UID is already signed in, but switching users requires an explicit logout first.
|
|
50
|
+
- **Token expiry** — a server-minted token can expire; handle the login error by refetching from your backend rather than falling back to the Auth Key.
|
|
51
|
+
|
|
52
|
+
## Release build config
|
|
53
|
+
- **Android** — `minSdk 26` (the docs' 24 is too low — the kit's `cometchat_calls_sdk` dependency pins 26); INTERNET permission; calling adds camera/mic. If you use R8/ProGuard, verify the kit still works in a **release** build, not just debug.
|
|
54
|
+
- **iOS** — deployment target per the docs; usage-description strings for camera/mic/photos, or the OS kills the app on first use.
|
|
55
|
+
- **Settings asset** — a registered asset, so NOT gitignored (a fresh clone / CI `flutter build` fails with *"No file or variants found for asset"*): commit a placeholder (no real Auth Key) and have CI overwrite it at build time with the prod-flavoured file (no Auth Key).
|
|
56
|
+
- **Flavors** — dev and prod should point at different CometChat apps; do not test against production data.
|
|
57
|
+
|
|
58
|
+
## Pre-ship checklist
|
|
59
|
+
1. No Auth Key in the release artifact (verified by inspection, not assumption).
|
|
60
|
+
2. `loginWithAuthToken` is the only login path in prod code.
|
|
61
|
+
3. Logout clears the session **and** unregisters push.
|
|
62
|
+
4. Permission strings present on both platforms.
|
|
63
|
+
5. Release build (obfuscated) actually runs — chat renders, messages send.
|
|
64
|
+
6. Tested against the prod CometChat app, on real devices.
|
|
65
|
+
7. Errors surface to the user rather than being swallowed in an empty `onError`.
|
|
66
|
+
|
|
67
|
+
## Common pitfalls (BAKED)
|
|
68
|
+
- **Shipping the Auth Key** — the single most serious mistake here.
|
|
69
|
+
- **Assuming `--dart-define` is a secret** — it is compiled into the binary, same exposure.
|
|
70
|
+
- **Only testing debug builds** — obfuscation/minification problems appear only in release.
|
|
71
|
+
- **No logout path** → the session persists across users on a shared device.
|
|
72
|
+
- **Swallowing `onError`** → a production auth failure looks like a blank screen.
|
|
73
|
+
- **Minting tokens in the app** — that needs the REST key, which must never be in the client.
|
|
74
|
+
|
|
75
|
+
## Verify it works
|
|
76
|
+
The release artifact contains no Auth Key; sign-in goes through your backend; sign-out clears the session and push; a release build on a real device sends and receives; an expired token produces a clean re-auth rather than a blank screen.
|