Connecter Firebase Crashlytics

StatHall lit en lecture seule les issues de crashs d’un projet Firebase Crashlytics via l’export BigQuery. L’authentification se fait par service account JSON (GCP) avec des rôles BigQuery read-only — pas de login/mot de passe.

Aucune écriture côté Firebase. Aucune notification sortante. Le service account sert uniquement à requêter BigQuery en lecture.


Avant de commencer

Pré-requisDétail
Projet FirebaseCrashlytics activé sur au moins une app (Android et/ou iOS)
Projet GCPMême projet que Firebase (ou projet “jumeau” configuré côté Firebase)
Rôle minimumroles/bigquery.dataViewer + roles/bigquery.jobUser + roles/firebase.viewer
Infos à récupérerProject ID Firebase + fichier JSON du service account

Étape 1 — Activer l’export BigQuery côté Firebase

  1. Ouvre la console Firebase → sélectionne le projet.
  2. Menu latéral → Crashlytics → onglet Integrations.
  3. Clique Link à côté de BigQuery.
  4. Coche les apps (Android + iOS) à exporter. Confirme.
  5. Firebase crée un dataset firebase_crashlytics dans ton projet GCP, avec une table par app/plateforme :
    • firebase_crashlytics.com_example_app_ANDROID
    • firebase_crashlytics.com_example_app_IOS

⏱️ Délai d’export : les premières rows apparaissent ~10 min après activation, puis en streaming continu.

💸 Coût : l’export BigQuery est gratuit (Firebase prend en charge le coût d’ingestion). Seules les requêtes StatHall sur BQ sont facturées — quelques cents/mois en pratique.


Étape 2 — Créer un service account GCP

  1. Console GCP → IAM & Admin → Service AccountsCreate service account.
  2. Nom : stathall-crashlytics-reader. Description : “Lecture read-only des data Crashlytics pour StatHall”.
  3. Grant this service account access : ajoute ces 3 rôles :
    • BigQuery Data Viewer (roles/bigquery.dataViewer)
    • BigQuery Job User (roles/bigquery.jobUser)
    • Firebase Viewer (roles/firebase.viewer)
  4. Clique Done (pas besoin de User role access).

Étape 3 — Télécharger la clé JSON

  1. Ouvre le service account créé → onglet KeysAdd key → Create new key.
  2. Format JSONCreate. Le fichier stathall-crashlytics-reader-XXXXX.json est téléchargé.
  3. Conserve-le en sécurité — StatHall le chiffre en base (Fernet) dès que tu l’enregistres ; tu ne pourras pas le re-télécharger.

Étape 4 — Saisir dans StatHall

Dans l’onglet Sources de la config d’une app :

  1. Project ID Firebase : le project id (pas le number). Visible en haut de la console Firebase ou dans l’URL https://console.firebase.google.com/project/<ton-project-id>.
  2. Service account JSON : bouton Choisir un fichier → sélectionne le .json téléchargé à l’étape 3.
  3. Clique Tester la connexion. StatHall fait un GET https://firebase.googleapis.com/v1beta1/projects/<ton-project-id> avec le JWT signé par le SA pour valider l’accès.
  4. Enregistrer.

Le sync automatique démarre dans les 15 min (cadence sync-firebase-crashes : */15 min).


Vérification

Après 15-30 min, vérifie :

Quoi
StatHall → CrashsLes issues Crashlytics apparaissent avec un badge firebase
StatHall → Sources → Firebase CrashlyticsDernier test : OK
Beat logssync-firebase-crashes exécuté sans erreur

Dépannage

SymptômeCause probableFix
403 — le service account n'a pas accèsRôles manquantsAjoute roles/bigquery.dataViewer + roles/bigquery.jobUser + roles/firebase.viewer
404 — projet introuvableMauvais project ID (number au lieu du slug)Récupère le slug depuis la console Firebase, pas le numéro
Aucune issue ingérée après 30 minBQ export pas encore activé ou pas de crashs récentsVérifie l’étape 1 — la carte BigQuery doit afficher “Linked”
Access Denied: BigQuery BigQuery: Permission denied on resource projectLe SA vient d’un autre projet GCPCrée le SA dans le MÊME projet que Firebase

Sécurité

Le fichier JSON du service account contient une clé privée RSA : traite-le comme un secret. StatHall le chiffre en base (Fernet) dès l’enregistrement ; l’export /account/export RGPD ne le renvoie jamais en clair. Pour révoquer, supprime la clé depuis la console GCP → IAM → Service Accounts → Keys.