vybekiit 0.7.29 → 0.7.33
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/dist/bin.js +3407 -2769
- package/dist/global-guidance/language.md +7 -102
- package/dist/global-skills/add-ai/SKILL.md +7 -8
- package/dist/global-skills/add-analytics/SKILL.md +4 -7
- package/dist/global-skills/add-app-clip/SKILL.md +1 -0
- package/dist/global-skills/add-blog/SKILL.md +4 -7
- package/dist/global-skills/add-files/SKILL.md +4 -7
- package/dist/global-skills/add-images/SKILL.md +4 -7
- package/dist/global-skills/add-language/SKILL.md +5 -8
- package/dist/global-skills/add-notifications/SKILL.md +4 -7
- package/dist/global-skills/add-realtime/SKILL.md +4 -7
- package/dist/global-skills/add-search/SKILL.md +4 -7
- package/dist/global-skills/add-signin/SKILL.md +4 -8
- package/dist/global-skills/add-teams/SKILL.md +4 -7
- package/dist/global-skills/aws-cdk/SKILL.md +1 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +1 -0
- package/dist/global-skills/aws-serverless/SKILL.md +169 -32
- package/dist/global-skills/aws-serverless/references/api-gateway.md +17 -0
- package/dist/global-skills/aws-serverless/references/architecture.md +9 -13
- package/dist/global-skills/aws-serverless/references/compute-decision-edge-cases.md +77 -0
- package/dist/global-skills/aws-serverless/references/lambda.md +3 -3
- package/dist/global-skills/aws-serverless/references/orchestration.md +46 -20
- package/dist/global-skills/aws-serverless/references/production.md +1 -1
- package/dist/global-skills/better-auth-best-practices/SKILL.md +1 -0
- package/dist/global-skills/better-auth-security-best-practices/SKILL.md +1 -0
- package/dist/global-skills/building-native-ui/SKILL.md +1 -0
- package/dist/global-skills/buy-domain/SKILL.md +4 -7
- package/dist/global-skills/check-safety/SKILL.md +5 -8
- package/dist/global-skills/claimable-postgres/SKILL.md +1 -0
- package/dist/global-skills/configure-capabilities/SKILL.md +1 -1
- package/dist/global-skills/connect-account/SKILL.md +1 -1
- package/dist/global-skills/create-auth-skill/SKILL.md +1 -0
- package/dist/global-skills/doctor/SKILL.md +1 -1
- package/dist/global-skills/eas-app-stores/SKILL.md +2 -1
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-hosting/SKILL.md +2 -1
- package/dist/global-skills/eas-hosting/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-observe/SKILL.md +2 -1
- package/dist/global-skills/eas-observe/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-simulator/SKILL.md +24 -16
- package/dist/global-skills/eas-simulator/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-simulator/references/controllers.md +11 -7
- package/dist/global-skills/eas-simulator/references/logs-and-crashes.md +101 -0
- package/dist/global-skills/eas-simulator/references/run-your-app.md +8 -8
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +14 -6
- package/dist/global-skills/eas-update/SKILL.md +2 -1
- package/dist/global-skills/eas-update/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-update-insights/SKILL.md +2 -1
- package/dist/global-skills/eas-update-insights/agents/openai.yaml +1 -1
- package/dist/global-skills/eas-workflows/SKILL.md +2 -1
- package/dist/global-skills/eas-workflows/agents/openai.yaml +1 -1
- package/dist/global-skills/email-best-practices/SKILL.md +1 -0
- package/dist/global-skills/email-best-practices/references/sending-reliability.md +17 -22
- package/dist/global-skills/expo-animation/SKILL.md +2 -1
- package/dist/global-skills/expo-api-routes/SKILL.md +1 -0
- package/dist/global-skills/expo-app-clip/SKILL.md +2 -1
- package/dist/global-skills/expo-brownfield/SKILL.md +2 -1
- package/dist/global-skills/expo-cicd-workflows/SKILL.md +1 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +2 -1
- package/dist/global-skills/expo-deployment/SKILL.md +1 -0
- package/dist/global-skills/expo-design-system/SKILL.md +2 -1
- package/dist/global-skills/expo-dev-client/SKILL.md +2 -1
- package/dist/global-skills/expo-dom/SKILL.md +2 -1
- package/dist/global-skills/expo-examples/SKILL.md +2 -1
- package/dist/global-skills/expo-migrate-module/SKILL.md +2 -1
- package/dist/global-skills/expo-module/SKILL.md +2 -1
- package/dist/global-skills/expo-native-ui/SKILL.md +2 -1
- package/dist/global-skills/expo-observe/SKILL.md +1 -0
- package/dist/global-skills/expo-overview/SKILL.md +2 -1
- package/dist/global-skills/expo-project-structure/SKILL.md +2 -1
- package/dist/global-skills/expo-router/SKILL.md +2 -1
- package/dist/global-skills/expo-skill-eval/SKILL.md +1 -0
- package/dist/global-skills/expo-skill-feedback/SKILL.md +1 -0
- package/dist/global-skills/expo-tailwind-setup/SKILL.md +1 -0
- package/dist/global-skills/expo-ui/SKILL.md +2 -1
- package/dist/global-skills/expo-upgrade/SKILL.md +2 -1
- package/dist/global-skills/expo-web-to-native/SKILL.md +2 -1
- package/dist/global-skills/extension-to-functions-codebase/SKILL.md +2 -0
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +162 -76
- package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +37 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +97 -3
- package/dist/global-skills/firebase-ai-logic-basics/references/tts_generation.md +676 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +88 -3
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +91 -3
- package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +6 -1
- package/dist/global-skills/firebase-auth-basics/SKILL.md +12 -6
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +61 -23
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +3 -3
- package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +22 -19
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +2 -2
- package/dist/global-skills/firebase-basics/SKILL.md +8 -2
- package/dist/global-skills/firebase-basics/references/android_setup.md +229 -23
- package/dist/global-skills/firebase-basics/references/ios_setup.md +57 -0
- package/dist/global-skills/firebase-basics/references/web_setup.md +52 -0
- package/dist/global-skills/firebase-crashlytics/SKILL.md +2 -0
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +99 -71
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +1 -0
- package/dist/global-skills/firebase-data-connect/SKILL.md +2 -0
- package/dist/global-skills/firebase-data-connect/reference/config.md +8 -8
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +4 -1
- package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +84 -29
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +8 -3
- package/dist/global-skills/firebase-data-connect/reference/security.md +13 -13
- package/dist/global-skills/firebase-firestore/SKILL.md +18 -7
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +47 -21
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +2 -1
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +63 -27
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +2 -1
- package/dist/global-skills/firebase-hosting-basics/SKILL.md +2 -0
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +3 -1
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +83 -92
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +8 -6
- package/dist/global-skills/firestore-rules-creation/SKILL.md +23 -10
- package/dist/global-skills/go-live/SKILL.md +7 -7
- package/dist/global-skills/harden/SKILL.md +7 -10
- package/dist/global-skills/instrument-feature-flags/SKILL.md +1 -0
- package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -0
- package/dist/global-skills/manifest.json +2 -1
- package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +1 -0
- package/dist/global-skills/mongodb-connection/SKILL.md +1 -0
- package/dist/global-skills/mongodb-mcp-setup/SKILL.md +1 -0
- package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +1 -0
- package/dist/global-skills/mongodb-qe-size-estimation/SKILL.md +224 -0
- package/dist/global-skills/mongodb-query-optimizer/SKILL.md +1 -0
- package/dist/global-skills/mongodb-schema-design/SKILL.md +1 -0
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +1 -0
- package/dist/global-skills/native-data-fetching/SKILL.md +1 -0
- package/dist/global-skills/neon/SKILL.md +34 -5
- package/dist/global-skills/neon-ai-gateway/SKILL.md +44 -14
- package/dist/global-skills/neon-auth/SKILL.md +1 -0
- package/dist/global-skills/neon-functions/SKILL.md +12 -0
- package/dist/global-skills/neon-functions/references/native-binaries.md +188 -0
- package/dist/global-skills/neon-object-storage/SKILL.md +1 -0
- package/dist/global-skills/neon-postgres/SKILL.md +2 -1
- package/dist/global-skills/neon-postgres/references/full-text-search.md +27 -17
- package/dist/global-skills/neon-postgres/references/hybrid-search.md +19 -15
- package/dist/global-skills/neon-postgres/references/lakebase-search-drizzle.md +99 -14
- package/dist/global-skills/neon-postgres/references/vector-search.md +93 -10
- package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -0
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +1 -0
- package/dist/global-skills/onboarding/SKILL.md +14 -13
- package/dist/global-skills/plan-my-idea/SKILL.md +1 -1
- package/dist/global-skills/publish-app/SKILL.md +1 -1
- package/dist/global-skills/publish-extension/SKILL.md +1 -1
- package/dist/global-skills/resend/SKILL.md +5 -15
- package/dist/global-skills/resend/references/domains.md +1 -1
- package/dist/global-skills/resend/references/installation.md +3 -3
- package/dist/global-skills/resend/references/sending/best-practices.md +3 -3
- package/dist/global-skills/resend/references/sending/single-email-examples.md +3 -3
- package/dist/global-skills/resend/references/webhooks.md +2 -0
- package/dist/global-skills/reset-password/SKILL.md +4 -6
- package/dist/global-skills/save-data/SKILL.md +3 -0
- package/dist/global-skills/sentry-sdk-setup/SKILL.md +1 -0
- package/dist/global-skills/sentry-workflow/SKILL.md +1 -0
- package/dist/global-skills/setup-email/SKILL.md +7 -8
- package/dist/global-skills/setup-payments/SKILL.md +10 -12
- package/dist/global-skills/setup-sms/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +4 -6
- package/dist/global-skills/sign-in-with-google/SKILL.md +14 -13
- package/dist/global-skills/sign-in-with-phone/SKILL.md +5 -7
- package/dist/global-skills/stripe-best-practices/SKILL.md +20 -19
- package/dist/global-skills/stripe-best-practices/references/billing.md +2 -0
- package/dist/global-skills/stripe-best-practices/references/payments.md +1 -1
- package/dist/global-skills/stripe-best-practices/references/tax.md +27 -15
- package/dist/global-skills/supabase/CHANGELOG.md +19 -0
- package/dist/global-skills/supabase/SKILL.md +1 -0
- package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/dist/global-skills/track-errors/SKILL.md +12 -13
- package/dist/global-skills/update-kit/SKILL.md +1 -1
- package/dist/global-skills/upgrading-expo/SKILL.md +1 -0
- package/dist/global-skills/use-dom/SKILL.md +1 -0
- package/dist/global-skills/use-railway/SKILL.md +9 -8
- package/dist/global-skills/use-railway/references/configure.md +34 -1
- package/dist/global-skills/use-railway/references/iac.md +3 -0
- package/dist/global-skills/use-railway/references/tracing.md +97 -44
- package/dist/global-skills/vercel-composition-patterns/SKILL.md +1 -0
- package/dist/global-skills/vercel-react-best-practices/SKILL.md +1 -0
- package/dist/global-skills/vybekiitReferences/backend/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/backend/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/agent/goal-routes.json +229 -0
- package/dist/global-skills/vybekiitReferences/backend/agent/mcp-setup.md +11 -2
- package/dist/global-skills/vybekiitReferences/backend/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/language.md +7 -102
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/deploy-railway-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/backend/platform-skills/mongodb-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/extension/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/goal-routes.json +239 -0
- package/dist/global-skills/vybekiitReferences/extension/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/agent/ui-sources.md +11 -8
- package/dist/global-skills/vybekiitReferences/extension/language.md +7 -92
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/browser-automation-vybekiit.md +9 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/extension/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/AGENTS.md +27 -12
- package/dist/global-skills/vybekiitReferences/mobile/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/goal-routes.json +279 -0
- package/dist/global-skills/vybekiitReferences/mobile/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/tech-references.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/agent/ui-sources.mobile.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/language.md +7 -93
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/i18n-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/mobile/platform-skills/ui-port-from-web-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/spa/AGENTS.md +11 -3
- package/dist/global-skills/vybekiitReferences/spa/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/goal-routes.json +267 -0
- package/dist/global-skills/vybekiitReferences/spa/agent/mcp-setup.md +10 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/spa/agent/ui-sources.md +11 -8
- package/dist/global-skills/vybekiitReferences/spa/language.md +7 -11
- package/dist/global-skills/vybekiitReferences/web/AGENTS.md +15 -30
- package/dist/global-skills/vybekiitReferences/web/agent/goal-index.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/agent/goal-routes.json +366 -0
- package/dist/global-skills/vybekiitReferences/web/agent/mcp-setup.md +11 -2
- package/dist/global-skills/vybekiitReferences/web/agent/session-bootstrap.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/language.md +7 -102
- package/dist/global-skills/vybekiitReferences/web/platform-skills/ai-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/analytics-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/assets-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/better-auth-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/browser-automation-vybekiit.md +9 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/cms-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/compliance-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-github-pages-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-railway-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/deploy-vercel-vybekiit.md +2 -2
- package/dist/global-skills/vybekiitReferences/web/platform-skills/env-secrets-vybekiit.md +1 -0
- package/dist/global-skills/vybekiitReferences/web/platform-skills/extend-capabilities-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/i18n-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/jobs-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/kv-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/lemon-squeezy-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/mongodb-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/notifications-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/observability-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/paypal-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/realtime-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/registrar-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/search-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/sentry-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/seo-vybekiit.md +1 -3
- package/dist/global-skills/vybekiitReferences/web/platform-skills/supabase-vybekiit.md +1 -1
- package/dist/global-skills/vybekiitReferences/web/platform-skills/tenancy-vybekiit.md +1 -1
- package/dist/global-skills/web-to-native/SKILL.md +1 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +5 -4
- package/dist/global-skills/workers-best-practices/references/configuration.md +1 -1
- package/dist/global-skills/workers-best-practices/references/platform-apis.md +5 -5
- package/dist/global-skills/workers-best-practices/references/runtime-patterns.md +1 -1
- package/dist/global-skills/wrangler/SKILL.md +28 -25
- package/dist/global-skills/xcode-project-setup/SKILL.md +2 -0
- package/package.json +10 -8
|
@@ -1,41 +1,247 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Firebase Android Setup Guide
|
|
2
2
|
|
|
3
3
|
______________________________________________________________________
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Prerequisites
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
1. **Firebase CLI**: Make sure the Firebase CLI is available and authenticated.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
For detailed instructions about the Firebase CLI, see
|
|
10
|
+
`firebase_basics/references/local-env-setup`. Here are high-level
|
|
11
|
+
instructions for setting up the Firebase CLI.
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
1. Ensure the Firebase CLI is available:
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
```bash
|
|
16
|
+
npx -y firebase-tools@latest --version
|
|
17
|
+
```
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
1. Login to the CLI:
|
|
20
|
+
|
|
21
|
+
- local:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx -y firebase-tools@latest login
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- remote servers:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx -y firebase-tools@latest login --no-localhost
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
1. **Android project**: Create or use an existing Android project in an
|
|
34
|
+
Android-development IDE.
|
|
35
|
+
|
|
36
|
+
______________________________________________________________________
|
|
37
|
+
|
|
38
|
+
## 1. Check if the Android project is connected to a Firebase Project
|
|
39
|
+
|
|
40
|
+
Check if the Android project already has a `google-services.json` file in its
|
|
41
|
+
**module (app-level)** root directory.
|
|
42
|
+
|
|
43
|
+
### `google-services.json` file is present
|
|
44
|
+
|
|
45
|
+
If the Android project already has a `google-services.json` file, do NOT create
|
|
46
|
+
a new Firebase project or re-register the app — skip steps 2 through 4 below.
|
|
47
|
+
Instead, verify the existing Firebase setup within the codebase and fix anything
|
|
48
|
+
that is missing:
|
|
49
|
+
|
|
50
|
+
- The `google-services.json` file is in the **module (app-level)** root
|
|
51
|
+
directory: `app/google-services.json`
|
|
52
|
+
|
|
53
|
+
- The Google services Gradle plugin (`google-services`) is added to *both* the
|
|
54
|
+
project-level and module (app-level) Gradle build files. If it is missing from
|
|
55
|
+
either file, add it by following step 5 below.
|
|
56
|
+
|
|
57
|
+
### `google-services.json` file is NOT present
|
|
58
|
+
|
|
59
|
+
If the Android project does NOT already have a `google-services.json` file, then
|
|
60
|
+
proceed with the remaining steps in this guide.
|
|
61
|
+
|
|
62
|
+
______________________________________________________________________
|
|
63
|
+
|
|
64
|
+
## 2. Create a new Firebase project or use an existing one
|
|
65
|
+
|
|
66
|
+
Check if there's an existing Firebase Project available for use with the Android
|
|
67
|
+
project:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx -y firebase-tools@latest projects:list
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
- **If existing Firebase Project:** Ask the human user if they want to use the
|
|
74
|
+
existing project.
|
|
75
|
+
|
|
76
|
+
- **If no existing Firebase Project or human user does not want to use an
|
|
77
|
+
existing project:** Create a new Firebase Project.
|
|
78
|
+
|
|
79
|
+
Provide a required unique PROJECT_ID and an optional PROJECT_DISPLAY_NAME:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx -y firebase-tools@latest projects:create <UNIQUE_PROJECT_ID> --display-name <PROJECT_DISPLAY_NAME>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
*Example:*
|
|
20
86
|
|
|
21
|
-
|
|
87
|
+
```bash
|
|
88
|
+
npx -y firebase-tools@latest projects:create my-cool-app-20260330 --display-name MyCoolApp
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
______________________________________________________________________
|
|
92
|
+
|
|
93
|
+
## 3. Register the Android project
|
|
94
|
+
|
|
95
|
+
Register the app module (package name) of the Android project with the Firebase
|
|
96
|
+
project. Provide an optional APP_DISPLAY_NAME and required PACKAGE_NAME:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npx -y firebase-tools@latest apps:create ANDROID <APP_DISPLAY_NAME> --package-name <PACKAGE_NAME> --project <PROJECT_ID>
|
|
100
|
+
```
|
|
22
101
|
|
|
23
|
-
Link your Android app module (package name) to your project. Notice that the
|
|
24
|
-
display name is passed as a positional argument at the end:
|
|
25
|
-
`npx -y firebase-tools@latest apps:create ANDROID '<APP_DISPLAY_NAME>' --package-name '<PACKAGE_NAME>' --project <PROJECT_ID>`
|
|
26
102
|
*Example:*
|
|
27
|
-
`npx -y firebase-tools@latest apps:create ANDROID 'MyApplication' --package-name 'com.example.myapplication' --project my-cool-app-20260330`
|
|
28
103
|
|
|
29
|
-
|
|
104
|
+
```bash
|
|
105
|
+
npx -y firebase-tools@latest apps:create ANDROID MyApplication --package-name com.example.myapplication --project my-cool-app-20260330
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
NOTE: A package name is often referred to as an *application ID* within an
|
|
109
|
+
Android project. Find an app's package name in the module (app-level) Gradle
|
|
110
|
+
file, usually `app/build.gradle.kts`.
|
|
111
|
+
|
|
112
|
+
______________________________________________________________________
|
|
113
|
+
|
|
114
|
+
## 4. Obtain and save `google-services.json`
|
|
115
|
+
|
|
116
|
+
1. Fetch the Firebase configuration file (`google-services.json`) using the
|
|
117
|
+
Firebase Android APP_ID (which is printed in the output of the previous
|
|
118
|
+
`apps:create` command):
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npx -y firebase-tools@latest apps:sdkconfig ANDROID <APP_ID> --project <PROJECT_ID>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
1. Save the configuration file within the **module (app-level)** root directory
|
|
125
|
+
of the Android project: `app/google-services.json`
|
|
126
|
+
|
|
127
|
+
______________________________________________________________________
|
|
128
|
+
|
|
129
|
+
## 5. Add the `google-services` plugin
|
|
130
|
+
|
|
131
|
+
> [!IMPORTANT] **[AGENT] RESOLVING THE PLUGIN VERSION DETERMINISTICALLY** Never
|
|
132
|
+
> guess or hardcode a memorized out-of-date plugin version. Before adding
|
|
133
|
+
> dependencies, you MUST query the latest available versions directly from the
|
|
134
|
+
> Google Maven Repository:
|
|
135
|
+
>
|
|
136
|
+
> ```bash
|
|
137
|
+
> # Find the latest Google services Gradle plugin version
|
|
138
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/gms/google-services/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
139
|
+
> ```
|
|
140
|
+
|
|
141
|
+
These changes are made to the Android project's Gradle files.
|
|
142
|
+
|
|
143
|
+
### Project-level `build.gradle.kts` (`<project>/build.gradle.kts`)
|
|
144
|
+
|
|
145
|
+
Add the latest version of the Google services Gradle plugin to the `plugins`
|
|
146
|
+
block:
|
|
147
|
+
|
|
148
|
+
```kotlin
|
|
149
|
+
plugins {
|
|
150
|
+
// ... other plugins
|
|
151
|
+
|
|
152
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
153
|
+
id("com.google.gms.google-services") version "<latest_plugin_version>" apply false
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Module (app-level) `build.gradle.kts` (`<project>/<app-module>/build.gradle.kts`)
|
|
158
|
+
|
|
159
|
+
Add the Google services Gradle plugin to the `plugins` block:
|
|
160
|
+
|
|
161
|
+
```kotlin
|
|
162
|
+
plugins {
|
|
163
|
+
// ... other plugins
|
|
164
|
+
id("com.google.gms.google-services")
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
______________________________________________________________________
|
|
169
|
+
|
|
170
|
+
## 6. App Check (Debug Token Persistence)
|
|
171
|
+
|
|
172
|
+
When using App Check on Android emulators or local development,
|
|
173
|
+
`DebugAppCheckProviderFactory.getInstance()` generates a UUID token and stores
|
|
174
|
+
it in `SharedPreferences`. Wiping emulator data, clearing app storage, or fresh
|
|
175
|
+
installs generate a new UUID in Logcat, causing debug token churn in the
|
|
176
|
+
Firebase Console.
|
|
177
|
+
|
|
178
|
+
> [!WARNING] **CRITICAL: Never Hardcode or Commit Debug Tokens** App Check debug
|
|
179
|
+
> tokens allow clients to bypass attestation and access backend resources
|
|
180
|
+
> without a genuine device. **Never hardcode debug token strings in
|
|
181
|
+
> build.gradle.kts, Java, or Kotlin files, and never commit tokens to version
|
|
182
|
+
> control.** If a token is compromised, revoke it immediately in the Firebase
|
|
183
|
+
> Console.
|
|
184
|
+
|
|
185
|
+
To persist a stable debug token across emulator resets and testing without
|
|
186
|
+
committing secrets:
|
|
187
|
+
|
|
188
|
+
1. Obtain or generate a stable UUID debug token and register it in the Firebase
|
|
189
|
+
Console under **Security > App Check > Apps > Manage debug tokens**.
|
|
190
|
+
|
|
191
|
+
1. Store the token in your project's gitignored `local.properties`:
|
|
192
|
+
|
|
193
|
+
```properties
|
|
194
|
+
# In local.properties (ensure this file is in your .gitignore!)
|
|
195
|
+
APP_CHECK_DEBUG_TOKEN=<YOUR_DEBUG_TOKEN>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
1. Inject the secret in `app/build.gradle.kts` for instrumentation/testing:
|
|
199
|
+
|
|
200
|
+
```kotlin
|
|
201
|
+
val localProperties = java.util.Properties().apply {
|
|
202
|
+
val localPropertiesFile = rootProject.file("local.properties")
|
|
203
|
+
if (localPropertiesFile.exists()) {
|
|
204
|
+
load(localPropertiesFile.inputStream())
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
val appCheckDebugToken = localProperties.getProperty("APP_CHECK_DEBUG_TOKEN")
|
|
208
|
+
?: System.getenv("APP_CHECK_DEBUG_TOKEN") ?: ""
|
|
209
|
+
|
|
210
|
+
android {
|
|
211
|
+
defaultConfig {
|
|
212
|
+
// For normal emulator runs (injects into AndroidManifest)
|
|
213
|
+
manifestPlaceholders["firebaseAppCheckDebugSecret"] = appCheckDebugToken
|
|
214
|
+
|
|
215
|
+
// For instrumentation tests
|
|
216
|
+
if (appCheckDebugToken.isNotEmpty()) {
|
|
217
|
+
testInstrumentationRunnerArguments["firebaseAppCheckDebugSecret"] = appCheckDebugToken
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
1. In your application or activity, install the debug provider for debug builds:
|
|
224
|
+
|
|
225
|
+
```kotlin
|
|
226
|
+
if (BuildConfig.DEBUG) {
|
|
227
|
+
Firebase.appCheck.installAppCheckProviderFactory(
|
|
228
|
+
DebugAppCheckProviderFactory.getInstance()
|
|
229
|
+
)
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
______________________________________________________________________
|
|
30
234
|
|
|
31
|
-
##
|
|
235
|
+
## Verification plan
|
|
32
236
|
|
|
33
|
-
|
|
237
|
+
### Manual verification
|
|
34
238
|
|
|
35
|
-
|
|
239
|
+
Validate that the Firebase Project was created and the Firebase Android App was
|
|
240
|
+
registered successfully:
|
|
36
241
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
242
|
+
```bash
|
|
243
|
+
npx -y firebase-tools@latest projects:list
|
|
244
|
+
npx -y firebase-tools@latest apps:list --project <PROJECT_ID>
|
|
245
|
+
```
|
|
40
246
|
|
|
41
247
|
______________________________________________________________________
|
|
@@ -111,3 +111,60 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
```
|
|
114
|
+
|
|
115
|
+
## 4. App Check (Debug Token Persistence)
|
|
116
|
+
|
|
117
|
+
When using App Check in local development or the iOS Simulator, the Firebase iOS
|
|
118
|
+
SDK generates a new UUID debug token whenever `NSUserDefaults` is erased (such
|
|
119
|
+
as during a simulator reset or fresh install). This causes debug token churn and
|
|
120
|
+
invalidates tokens previously registered in the Firebase console.
|
|
121
|
+
|
|
122
|
+
> [!WARNING] **CRITICAL: Never Hardcode or Commit Debug Tokens** App Check debug
|
|
123
|
+
> tokens allow clients to bypass attestation and access backend resources
|
|
124
|
+
> without a genuine device. Treat them as sensitive secrets. **Never commit
|
|
125
|
+
> debug tokens into version control or hardcode them directly into source
|
|
126
|
+
> code.** If a token is compromised, revoke it immediately in the Firebase
|
|
127
|
+
> Console.
|
|
128
|
+
|
|
129
|
+
To persist a stable debug token across simulator resets without committing
|
|
130
|
+
secrets:
|
|
131
|
+
|
|
132
|
+
1. Obtain or generate a stable UUID debug token and register it in the Firebase
|
|
133
|
+
Console under **Security > App Check > Apps > Manage debug tokens**.
|
|
134
|
+
|
|
135
|
+
1. Supply `AppCheckDebugToken` via your local environment instead of hardcoding
|
|
136
|
+
it in code:
|
|
137
|
+
|
|
138
|
+
- **Xcode Scheme Environment Variables (Recommended):**
|
|
139
|
+
|
|
140
|
+
- Select **Product > Scheme > Edit Scheme...** (or `Cmd + <`).
|
|
141
|
+
- Navigate to **Run > Arguments > Environment Variables**.
|
|
142
|
+
- Add `AppCheckDebugToken = <YOUR_DEBUG_TOKEN>`.
|
|
143
|
+
- *Tip:* Keep your personal scheme unshared or ensure user scheme data
|
|
144
|
+
(`xcuserdata/`) is included in `.gitignore` so your personal debug token
|
|
145
|
+
is not committed.
|
|
146
|
+
|
|
147
|
+
- **In Code (Only with Secure / Gitignored Loading):** If setting the
|
|
148
|
+
environment variable in code before initializing
|
|
149
|
+
`AppCheckDebugProviderFactory`, load the token dynamically from a
|
|
150
|
+
gitignored local file or build configuration—never hardcode the raw token
|
|
151
|
+
string:
|
|
152
|
+
|
|
153
|
+
```swift
|
|
154
|
+
#if DEBUG
|
|
155
|
+
// ⛔️ DO NOT hardcode literal tokens: setenv("AppCheckDebugToken", "secret-uuid", 0)
|
|
156
|
+
// ✅ SAFE: Load dynamically from a gitignored local file, xcconfig, or process environment
|
|
157
|
+
// Note: loadGitIgnoredDebugToken() is a placeholder for your custom helper (e.g., reading from a gitignored plist)
|
|
158
|
+
if let debugToken = loadGitIgnoredDebugToken() {
|
|
159
|
+
setenv("AppCheckDebugToken", debugToken, 0)
|
|
160
|
+
}
|
|
161
|
+
let providerFactory = AppCheckDebugProviderFactory()
|
|
162
|
+
AppCheck.setAppCheckProviderFactory(providerFactory)
|
|
163
|
+
#endif
|
|
164
|
+
|
|
165
|
+
FirebaseApp.configure() // Must be called AFTER setting the App Check provider factory
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Setting this environment variable avoids invalidating tokens registered in the
|
|
169
|
+
Firebase console by ensuring a consistent debug token is reused across simulator
|
|
170
|
+
resets and fresh app installs.
|
|
@@ -75,3 +75,55 @@ async function getUsers() {
|
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
```
|
|
78
|
+
|
|
79
|
+
## 5. App Check (Debug Token Persistence)
|
|
80
|
+
|
|
81
|
+
When developing locally with App Check on Web, setting
|
|
82
|
+
`self.FIREBASE_APPCHECK_DEBUG_TOKEN = true` generates a temporary UUID token in
|
|
83
|
+
the browser console and stores it in browser storage (IndexedDB). Clearing site
|
|
84
|
+
data, using incognito/private browsing, or switching browsers causes debug token
|
|
85
|
+
churn and invalidates console registration.
|
|
86
|
+
|
|
87
|
+
> [!WARNING] **CRITICAL: Never Hardcode or Commit Debug Tokens** App Check debug
|
|
88
|
+
> tokens allow clients to bypass attestation and access backend resources
|
|
89
|
+
> without a genuine client. Treat them as sensitive secrets. **Never commit
|
|
90
|
+
> debug tokens to version control or hardcode raw token strings in client
|
|
91
|
+
> files.** If a token is compromised, revoke it immediately in the Firebase
|
|
92
|
+
> Console.
|
|
93
|
+
|
|
94
|
+
To persist a stable debug token across browser resets without leaking secrets:
|
|
95
|
+
|
|
96
|
+
1. Obtain or generate a stable UUID debug token and register it in the Firebase
|
|
97
|
+
Console under **Security > App Check > Apps > Manage debug tokens**.
|
|
98
|
+
|
|
99
|
+
1. Add the token to a local, gitignored environment file (e.g. `.env.local`):
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# In .env.local (ensure this file is in your .gitignore!)
|
|
103
|
+
NEXT_PUBLIC_APP_CHECK_DEBUG_TOKEN="<YOUR_DEBUG_TOKEN>"
|
|
104
|
+
# Or for Vite:
|
|
105
|
+
# VITE_APPCHECK_DEBUG_TOKEN="<YOUR_DEBUG_TOKEN>"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
1. Configure your code before initializing App Check:
|
|
109
|
+
|
|
110
|
+
```javascript
|
|
111
|
+
import { initializeAppCheck, ReCaptchaEnterpriseProvider } from "firebase/app-check";
|
|
112
|
+
|
|
113
|
+
if (typeof self !== "undefined") {
|
|
114
|
+
if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
|
|
115
|
+
// ✅ SAFE: Load dynamically from Next.js environment variable; fallback to true to auto-generate
|
|
116
|
+
self.FIREBASE_APPCHECK_DEBUG_TOKEN =
|
|
117
|
+
process.env.NEXT_PUBLIC_APP_CHECK_DEBUG_TOKEN || true;
|
|
118
|
+
} else if (typeof import.meta !== "undefined" && import.meta.env?.DEV) {
|
|
119
|
+
// ✅ SAFE: Load dynamically from Vite environment variable; fallback to true to auto-generate
|
|
120
|
+
self.FIREBASE_APPCHECK_DEBUG_TOKEN =
|
|
121
|
+
import.meta.env.VITE_APPCHECK_DEBUG_TOKEN || true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const appCheck = initializeAppCheck(app, {
|
|
126
|
+
provider: new ReCaptchaEnterpriseProvider("/* reCAPTCHA site key */"),
|
|
127
|
+
isTokenAutoRefreshEnabled: true,
|
|
128
|
+
});
|
|
129
|
+
```
|
|
@@ -3,7 +3,9 @@ name: firebase-crashlytics
|
|
|
3
3
|
description: Comprehensive guide for Firebase Crashlytics, including provisioning and SDK usage. Use this skill when the user needs help setting up Crashlytics, adding crash reporting, or using the Crashlytics SDK in their application.
|
|
4
4
|
compatibility: This skill is best used with the Firebase CLI, but does not require it. Firebase CLI can be accessed through `npx -y firebase-tools@latest`.
|
|
5
5
|
metadata:
|
|
6
|
+
author: Google LLC
|
|
6
7
|
category: CloudObservabilityAndMonitoring
|
|
8
|
+
disable-model-invocation: true
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
# Crashlytics
|
|
@@ -1,80 +1,98 @@
|
|
|
1
|
-
# Firebase Crashlytics Android Setup Guide
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
1
|
+
# Firebase Crashlytics - Android Setup Guide (Kotlin)
|
|
2
|
+
|
|
3
|
+
This guide describes the SDK setup and basic usage patterns for Firebase
|
|
4
|
+
Crashlytics in an Android app using Kotlin DSL (`build.gradle.kts`) and Kotlin
|
|
5
|
+
code.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
IMPORTANT: Before specifically working with Firebase Crashlytics, make sure to
|
|
10
|
+
use the skill and reference `firebase_basics/references/android_setup` to ensure
|
|
11
|
+
the following is done.
|
|
12
|
+
|
|
13
|
+
- The Firebase CLI is available and authenticated.
|
|
14
|
+
- An Android project exists and is registered with a Firebase Project.
|
|
15
|
+
- The Android project has a Firebase config file (`google-services.json`) and
|
|
16
|
+
the Google services Gradle plugin (`google-services`).
|
|
17
|
+
|
|
18
|
+
______________________________________________________________________
|
|
19
|
+
|
|
20
|
+
## 1. Add dependencies to Gradle build files
|
|
21
|
+
|
|
22
|
+
> [!IMPORTANT] **[AGENT] RESOLVING THE SDK & PLUGIN VERSIONS DETERMINISTICALLY**
|
|
23
|
+
> Never guess or hardcode a memorized out-of-date SDK or plugin version. Before
|
|
24
|
+
> adding dependencies, you MUST query the latest available versions directly
|
|
25
|
+
> from the Google Maven Repository:
|
|
26
|
+
>
|
|
27
|
+
> ```bash
|
|
28
|
+
> # Find the latest Firebase Android BoM version
|
|
29
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-bom/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
30
|
+
>
|
|
31
|
+
> # Find the latest Crashlytics Gradle plugin version
|
|
32
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-crashlytics-gradle/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
33
|
+
>
|
|
34
|
+
> # Find the latest firebase-crashlytics version
|
|
35
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-crashlytics/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
36
|
+
>
|
|
37
|
+
> # Find the latest firebase-crashlytics-ndk version
|
|
38
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-crashlytics-ndk/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
39
|
+
> ```
|
|
40
|
+
>
|
|
41
|
+
> If the dependency is already declared, fetch the exact resolved version
|
|
42
|
+
> currently active in the workspace's build graph:
|
|
43
|
+
>
|
|
44
|
+
> ```bash
|
|
45
|
+
> ./gradlew -q :app:dependencyInsight --dependency firebase-crashlytics --configuration releaseRuntimeClasspath
|
|
46
|
+
> ```
|
|
47
|
+
|
|
48
|
+
These changes are made to the Android project's Gradle files.
|
|
27
49
|
|
|
28
50
|
### Project-level `build.gradle.kts` (`<project>/build.gradle.kts`)
|
|
29
51
|
|
|
30
|
-
Add the latest version of the Crashlytics Gradle plugin to the `plugins` block
|
|
31
|
-
Fetch the
|
|
32
|
-
[latest version from the Google Maven repository](https://maven.google.com/web/index.html?q=firebase-crashlytics-gradle#com.google.firebase:firebase-crashlytics-gradle)
|
|
33
|
-
before adding this.
|
|
52
|
+
Add the latest version of the Crashlytics Gradle plugin to the `plugins` block:
|
|
34
53
|
|
|
35
54
|
```kotlin
|
|
36
55
|
plugins {
|
|
37
56
|
// ... other plugins
|
|
57
|
+
|
|
58
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
38
59
|
id("com.google.firebase.crashlytics") version "<latest_plugin_version>" apply false
|
|
39
60
|
}
|
|
40
61
|
```
|
|
41
62
|
|
|
42
|
-
###
|
|
63
|
+
### Module (app-level) `build.gradle.kts` (`<project>/<app-module>/build.gradle.kts`)
|
|
43
64
|
|
|
44
|
-
1. Add the Crashlytics plugin to the `plugins` block:
|
|
65
|
+
1. Add the Crashlytics Gradle plugin to the `plugins` block:
|
|
45
66
|
|
|
46
67
|
```kotlin
|
|
47
68
|
plugins {
|
|
48
69
|
// ... other plugins
|
|
70
|
+
|
|
49
71
|
id("com.google.firebase.crashlytics")
|
|
50
72
|
}
|
|
51
73
|
```
|
|
52
74
|
|
|
53
|
-
1. Add the Firebase Crashlytics dependency to the `dependencies` block
|
|
54
|
-
recommended to use the Firebase Bill of Materials (BoM) to manage SDK
|
|
55
|
-
versions. Fetch the
|
|
56
|
-
[latest version from the Google Maven repository](https://maven.google.com/web/index.html?q=firebase-bom#com.google.firebase:firebase-bom)
|
|
57
|
-
before adding this.
|
|
75
|
+
1. Add the Firebase Crashlytics dependency to the `dependencies` block:
|
|
58
76
|
|
|
59
77
|
```kotlin
|
|
60
78
|
dependencies {
|
|
61
79
|
// ... other dependencies
|
|
62
80
|
|
|
63
|
-
//
|
|
81
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
64
82
|
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
65
83
|
|
|
66
|
-
// Add the
|
|
84
|
+
// Add the dependency for the Firebase Crashlytics library
|
|
85
|
+
// When using the BoM, don't specify versions in Firebase library dependencies
|
|
67
86
|
implementation("com.google.firebase:firebase-crashlytics")
|
|
68
|
-
implementation("com.google.firebase:firebase-analytics")
|
|
69
87
|
}
|
|
70
88
|
```
|
|
71
89
|
|
|
72
|
-
|
|
90
|
+
______________________________________________________________________
|
|
73
91
|
|
|
74
|
-
|
|
92
|
+
## 2. *Optional:* Install the NDK SDK to capture native crashes
|
|
75
93
|
|
|
76
|
-
If
|
|
77
|
-
|
|
94
|
+
If the Android project uses native code (C/C++), or includes a library with
|
|
95
|
+
native code, configure Crashlytics to report native crashes.
|
|
78
96
|
|
|
79
97
|
App-level `build.gradle.kts` (`<project>/<app-module>/build.gradle.kts`)
|
|
80
98
|
|
|
@@ -83,23 +101,27 @@ App-level `build.gradle.kts` (`<project>/<app-module>/build.gradle.kts`)
|
|
|
83
101
|
```kotlin
|
|
84
102
|
dependencies {
|
|
85
103
|
// ... other dependencies
|
|
104
|
+
|
|
105
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
106
|
+
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
107
|
+
|
|
108
|
+
// Add the dependency for the Firebase Crashlytics NDK library
|
|
109
|
+
// When using the BoM, don't specify versions in Firebase library dependencies
|
|
86
110
|
implementation("com.google.firebase:firebase-crashlytics-ndk")
|
|
87
111
|
}
|
|
88
112
|
```
|
|
89
113
|
|
|
90
|
-
1. Enable the `nativeSymbolUpload` flag in
|
|
91
|
-
will automatically upload symbol files for
|
|
114
|
+
1. Enable the `nativeSymbolUpload` flag in the `buildTypes` configuration. This
|
|
115
|
+
will automatically upload symbol files for the native code, which are
|
|
92
116
|
required to symbolicate native crash reports.
|
|
93
117
|
|
|
94
118
|
```kotlin
|
|
95
|
-
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension
|
|
96
|
-
|
|
97
119
|
android {
|
|
98
120
|
// ... other config
|
|
99
121
|
buildTypes {
|
|
100
122
|
getByName("release") {
|
|
101
123
|
// ...
|
|
102
|
-
|
|
124
|
+
firebaseCrashlytics {
|
|
103
125
|
nativeSymbolUploadEnabled = true
|
|
104
126
|
}
|
|
105
127
|
}
|
|
@@ -107,49 +129,55 @@ App-level `build.gradle.kts` (`<project>/<app-module>/build.gradle.kts`)
|
|
|
107
129
|
}
|
|
108
130
|
```
|
|
109
131
|
|
|
110
|
-
After these changes, Crashlytics will automatically report crashes in
|
|
132
|
+
After these changes, Crashlytics will automatically report crashes in the app's
|
|
111
133
|
native code.
|
|
112
134
|
|
|
113
|
-
|
|
135
|
+
______________________________________________________________________
|
|
136
|
+
|
|
137
|
+
## 3. *Required:* Force a test crash
|
|
114
138
|
|
|
115
|
-
To verify that Crashlytics is correctly
|
|
116
|
-
crash in the app.
|
|
139
|
+
To verify that Crashlytics is correctly set up in the Android project, force a
|
|
140
|
+
test crash in the app.
|
|
117
141
|
|
|
118
|
-
1. Add code to
|
|
142
|
+
1. Add code to the main activity (e.g., in `onCreate`) to trigger a crash a few
|
|
119
143
|
seconds after app startup:
|
|
120
144
|
|
|
121
145
|
```kotlin
|
|
122
146
|
import android.os.Handler
|
|
123
147
|
import android.os.Looper
|
|
124
148
|
|
|
125
|
-
// ... in
|
|
149
|
+
// ... in the Activity's onCreate method or similar startup logic
|
|
126
150
|
Handler(Looper.getMainLooper()).postDelayed({
|
|
127
151
|
throw RuntimeException("Test Crash") // Force a crash after 3 seconds
|
|
128
152
|
}, 3000)
|
|
129
153
|
```
|
|
130
154
|
|
|
131
|
-
1. Run
|
|
155
|
+
1. Run the app on a device or emulator. The app should crash after a short
|
|
132
156
|
delay.
|
|
133
157
|
|
|
134
158
|
1. Restart the app. The Crashlytics SDK will send the crash report to Firebase
|
|
135
159
|
on the next app launch.
|
|
136
160
|
|
|
137
|
-
1. After a few minutes, the crash should be available in
|
|
138
|
-
|
|
139
|
-
|
|
161
|
+
1. After a few minutes, the crash should be available in Firebase.
|
|
162
|
+
|
|
163
|
+
- If the Firebase MCP server is installed, use the `get_report` tool to
|
|
164
|
+
verify that a crash was received.
|
|
165
|
+
- As a fallback, tell the human user to go to the Crashlytics dashboard in
|
|
166
|
+
the Firebase console to verify the new crash report. Provide the human user
|
|
167
|
+
with a constructed Firebase console URL using the Firebase PROJECT_ID and
|
|
168
|
+
the PACKAGE_NAME:
|
|
169
|
+
`https://console.firebase.google.com/u/0/project/PROJECT_ID/crashlytics/app/android:PACKAGE_NAME/issues`
|
|
170
|
+
|
|
171
|
+
1. After verifying that Firebase has received the crash report -- either using
|
|
172
|
+
the `get_report` tool or manually viewing it in the Firebase console --
|
|
173
|
+
remove the code that triggers the test crash.
|
|
140
174
|
|
|
141
|
-
|
|
142
|
-
that a crash was received.
|
|
143
|
-
- As a fallback, visit the Crashlytics dashboard in the Firebase console to see
|
|
144
|
-
the new crash report.
|
|
175
|
+
______________________________________________________________________
|
|
145
176
|
|
|
146
|
-
|
|
147
|
-
the `get_report` tool or manually viewing it in the Firebase console - remove
|
|
148
|
-
the code from step 1 that triggers the crash. This prevents the application
|
|
149
|
-
from always crashing on start up after a delay.
|
|
177
|
+
## Optional additional steps
|
|
150
178
|
|
|
151
|
-
###
|
|
179
|
+
### Add custom debugging information
|
|
152
180
|
|
|
153
|
-
Customize reports to help
|
|
154
|
-
|
|
155
|
-
|
|
181
|
+
Customize reports to help better understand what's happening in the app and the
|
|
182
|
+
circumstances around events reported to Crashlytics. See
|
|
183
|
+
https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt.
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
name: firebase-data-connect
|
|
3
3
|
description: Builds and deploys Firebase SQL Connect (aka Firebase Data Connect) backends with PostgreSQL securely. Use when designing schemas with tables and relations, writing authorized queries and mutations, configuring real-time data updates, or generating type-safe SDKs. Use when you need a relational database with Firebase, or when the user mentions SQL Connect or Data Connect.
|
|
4
4
|
metadata:
|
|
5
|
+
author: Google LLC
|
|
5
6
|
category: Databases
|
|
7
|
+
disable-model-invocation: true
|
|
6
8
|
---
|
|
7
9
|
|
|
8
10
|
# Firebase SQL Connect
|