Просмотр исходного кода

Crashlytics end-to-end bewezen; Bob's netwerk-DNS blokkeerde de uploads

Gemeten op emulator-5554 met een profile-build: crash -> logcat
FirebaseCrashlyticsTestCrash -> herstart -> upload met HTTP 200.

Oorzaak dat er nooit een crash in het dashboard stond: de lokale DNS
(192.168.8.220) antwoordt 0.0.0.0 op crashlyticsreports-pa.googleapis.com,
firebaselogging-pa.googleapis.com en app-measurement.com. Omzeild met
private DNS over TLS naar dns.google.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 6 часов назад
Родитель
Сommit
35c69c7b3f
2 измененных файлов с 66 добавлено и 1 удалено
  1. 33 0
      CLAUDE.md
  2. 33 1
      TASKS.md

+ 33 - 0
CLAUDE.md

@@ -2646,6 +2646,39 @@ verbindingsmelding:
   **nooit** vanuit `initState`/een automatische check — de pagina bouwt het
   widget dan opnieuw op en je hebt een herlaadlus.
 
+**⚠️ Bob's netwerk-DNS (192.168.8.220) BLOKKEERT Google-telemetrie — Crashlytics-
+rapporten komen daardoor nooit aan, vanaf geen enkel toestel op dit netwerk.**
+Gemeten 2026-09-19, en dit verklaart waarom er in twee jaar nooit een crash in
+het Firebase-dashboard is verschenen. De lokale DNS antwoordt met `0.0.0.0` op
+`crashlyticsreports-pa.googleapis.com`, `firebaselogging-pa.googleapis.com` en
+`app-measurement.com`, terwijl `uitgaanskrant.com` en `google.com` gewoon
+resolven. Op de emulator ziet dat er misleidend uit als
+`java.net.ConnectException: Failed to connect to ...googleapis.com/[::]:443` —
+dat lijkt een netwerkstoring, maar het is een DNS-sinkhole.
+- **Snel vaststellen:** `dig +short @192.168.8.220 crashlyticsreports-pa.googleapis.com`
+  (geeft `0.0.0.0`) naast `dig +short @8.8.4.4 <zelfde host>` (geeft een echt IP).
+- **Omzeilen op een emulator/toestel zonder aan de router te komen** — private
+  DNS over TLS rechtstreeks naar Google:
+  ```
+  adb -s <device> shell settings put global private_dns_mode hostname
+  adb -s <device> shell settings put global private_dns_specifier dns.google
+  ```
+  Terugzetten met `private_dns_mode off`. Daarna uploadt Crashlytics wél:
+  `TRuntime.CctTransportBackend: Status Code: 200` in logcat.
+- **`emulator-5554` staat sinds 2026-09-19 op deze private DNS** zodat
+  Crashlytics daar werkt. Houd daar rekening mee bij metingen die juist het
+  gedrag óp Bob's netwerk willen zien.
+- **Gevolg voor elke Crashlytics-/Analytics-meting:** een rapport dat "niet
+  aankomt" is op dit netwerk geen bewijs van een kapotte koppeling. Meet altijd
+  eerst de DNS.
+
+**Crashlytics end-to-end bewezen 2026-09-19** (custom action `crashlyticsTest`,
+profile-build op emulator-5554): crash → `FirebaseCrashlyticsTestCrash` in
+logcat → bij de **volgende** start van de app `Making request to:
+https://crashlyticsreports-pa.googleapis.com/...` → **`Status Code: 200`**. Een
+crashrapport gaat dus pas mee bij de eerstvolgende start, niet op het moment
+van crashen — herstart de app altijd vóór je in het dashboard kijkt.
+
 **Offline-gedrag testen op een emulator, zonder de app aan te passen:**
 ```
 adb -s <device> shell svc wifi disable && adb -s <device> shell svc data disable

+ 33 - 1
TASKS.md

@@ -466,7 +466,39 @@ die twee niet meer los afwerken. Vink hier af.*
 `mijn_aanmeldingen.json` en `aanmelding_kloonbron.json` zijn geplaatst en
 getest. Details staan in het 88-blok hierboven; deze taak is klaar.
 
-### 🆕 66 · Crashlytics-testactie LIGT KLAAR (Claude 2026-09-19) · Eigenaar: Bob (plaatsen + Firebase bekijken)
+### ✅ 66 · Crashlytics — APP-KANT BEWEZEN 2026-09-19 (Claude). Rest: Bob kijkt in de console.
+
+**De keten werkt, end-to-end gemeten** op een profile-build op emulator-5554:
+tik op *Crashtest* → `FirebaseCrashlyticsTestCrash` in logcat, proces weg →
+app opnieuw geopend → `Making request to crashlyticsreports-pa.googleapis.com`
+→ **`Status Code: 200`**. Het rapport is dus daadwerkelijk verstuurd.
+
+🔴 **En meteen de verklaring waarom er nooit een crash in het dashboard stond:
+Bob's netwerk-DNS (192.168.8.220) blokkeert `crashlyticsreports-pa.googleapis.com`
+(antwoordt `0.0.0.0`).** Elk rapport vanaf dit netwerk verdween in een sinkhole.
+De koppeling was al die tijd in orde. Details + de omzeiling staan in
+`CLAUDE.md`. `emulator-5554` staat nu op private DNS (`dns.google`) zodat
+Crashlytics daar werkt — terugzetten met
+`adb shell settings put global private_dns_mode off`.
+
+**Voor Bob, in Firebase:** zie het antwoord in de chat — kort: Crashlytics
+openen, wachten tot de eerste crash het dashboard "activeert", en controleren
+dat het `bundle_id` `com.uitgaanskrant.app` is. Daarna de Crashtest-knop weer
+weghalen.
+
+⚠️ **Bob's huidige knop hangt aan de UITLOG-keten.** De `Duplicate` nam alle
+zeven uitlog-acties mee en `crashlyticsTest` staat er als achtste achter; je
+wordt dus eerst uitgelogd en naar Login gestuurd, en pas daarna crasht hij. Het
+werkt, maar voor een schone stack trace: Actions → Edit → acties 1 t/m 7
+verwijderen (⋮ → Delete Action).
+
+**Nog open (los van deze taak):** `main.dart:44` zet alléén
+`FlutterError.onError`. Er is **geen** `PlatformDispatcher.instance.onError`,
+dus een fout in een async custom action buiten het framework wordt niet
+gerapporteerd. Eén regel, maar `main.dart` is gegenereerd — moet via
+FlutterFlow's Final Actions/custom-code-hook.
+
+### (origineel) 66 · Crashlytics-testactie · Eigenaar: Bob (plaatsen + Firebase bekijken)
 
 `crashlytics_test.dart` — één custom action `crashlyticsTest(String? modus)`,
 argument mag **Unset** blijven (String mag dat; alleen een List-typed argument