apprvd_tracker 0.6.0
apprvd_tracker: ^0.6.0 copied to clipboard
Tiny event tracker for Apprvd.app. Batches events in memory and posts them to Apprvd.app's ingest endpoint for push audiences and tracker KPIs.
0.6.0 #
- Platform, app version and SDK version on every batch.
inittakes optionalplatform('ios','android'or'web') andappVersion, and each batch also carriessdkVersion(Apprvd.sdkVersion). With them, Apprvd.app compares each release with the one before and flags a key event that stopped arriving on the new version. Sent once per batch, not per event; a value left out is omitted, never sent as null.
0.5.1 #
- Fix: one bad param stopped all tracking. Params were only encoded at
flush, so a
DateTimeor an enum made every flush throw and the queue never drained. They are encoded intrack()now, and a value JSON has no type for is sent as itstoString(); a cyclic map drops its own event. - Fix: one oversized event lost its whole batch. The server rejects a batch
over any one event, so
track()now drops an event whose params are over 8 KB as JSON, or whose param name is empty or over 40 characters. - Fix: a bad event name crashed debug builds.
track()no longer asserts: an invalid name (e.g."Sign Up") is dropped with a printed warning in debug builds, silently in release.
0.5.0 #
- Experiments without Remote Config.
Apprvd.variant(key, fallback:)returns which variant of an Apprvd.app test this device gets: a stable FNV-1a bucket of the device id and the test, the same in the Swift and Kotlin SDKs. The config is fetched atinit(configEndpointoverrides the URL), can be cached across launches withexperimentsCache/onExperiments, andexperimentsReadycompletes on the first answer or after 2 s. The first answer per key holds for the session; the first assigned one sends anapprvd_exposureevent.
0.4.0 #
- Renamed from
pulse_tracker, and thePulseclass is nowApprvd: importpackage:apprvd_tracker/apprvd_tracker.dartand callApprvd.track(...). The wire format is unchanged.
0.3.1 #
- Fix: a successful send could delete unsent events. With the queue at its 500 cap, events tracked while a batch was in flight evicted from the head, and the 2xx then removed the first N entries by count, some of them never sent. Sent events are now removed by identity.
0.3.0 #
appInstanceIdoninit(andPulse.setAppInstanceIdfor when it resolves later). PassFirebaseAnalytics.instance.appInstanceId: it is the same value asuser_pseudo_idin the BigQuery export, and it is the only thing that links your Firebase analytics to a tracker event and to a push token. Sent once per batch, not per event.
0.2.0 #
- Fix: a 429 no longer discards the batch. Rate limiting is backpressure, not rejection: the old code treated any non-5xx as final and dropped the events, losing data exactly when the app was producing it fastest. 429 now keeps the batch and retries.
- Honour
Retry-Afteron 429/503 (clamped to 1–300 s, so a missing or hostile header can neither wedge the queue nor licence a hot retry loop). A bare 5xx with no header still just waits for the next tick.
0.1.0 #
- Initial release:
Pulse.init/track/identify/flush, in-memory batching (20 events / 10 s), retry on 5xx and network errors, client-side dedup ids, 500-event queue cap.