Releases: AppGlance/appglance-android
Releases · AppGlance/appglance-android
Release list
1.0.1
Fixed
- The
installevent, and anything else tracked before the app first reaches the foreground, now
carries the samesession_idthe firstsession.startcarries. The coming session's id is
minted at configure whenever the next foreground will start a new session, and persisted until
asession.startadopts it, so even a launch that never reaches the foreground hands it to the
next one. It used to be minted only at the first foreground, which left those early events
without a session and made the server create a second session row on every first launch. - Calling
configureagain while the app is in the foreground (the documented way to apply a
consent change) resumes the session immediately. The replacement client used to stay inactive
until the app was backgrounded and reopened. - A device whose build fingerprint is just
unknown(some OEM and custom ROM builds) is no
longer classified as an emulator on that alone. The hardware and product checks still catch
real emulators that report it.
Added
- Configuration validation at construction:
heartbeatIntervalat least 15 seconds,
maxBatchSizebetween 1 and 500,flushIntervalandsessionTimeoutpositive. A zero
interval was a tight send loop; failing fast with a clear message beats misbehaving quietly. - Exponential backoff between automatic delivery retries after a transient failure, jittered and
capped at 60 seconds, honoring a numericRetry-Afteron 429 as the floor. A queue past
maxBatchSizeused to retry on every new event with no throttle. An explicitflush()still
sends immediately, and the first successful send resets the backoff.
Changed
- Environment detection checks the debuggable flag before the emulator heuristics, the order the
platform contract lists. A debuggable build on an emulator is now taggeddebugrather than
emulator; both are kept out of your numbers by default, so nothing changes unless you send
from one withdebug = true.
1.0.0
First public release, feature-equivalent with the Swift SDK 1.0.0 and sharing its wire format.
Added
AppGlance.configure(context, apiKey[, debug]), orconfigure(context, Configuration)for
full control: intervals,enabledEnvironments,environmentfor beta channels,
trackAppLifecycle,debug,endpoint.track,trackScreen,identify,setUserProperties,reset,setActive,flush;
AppEnvironment,Signal,UserProperty.- A random install id in
SharedPreferences(inside Auto Backup, so a reinstall on the same
account usually keeps it).installis recorded exactly once, first, stamped at configure. - Sessions and presence via
ProcessLifecycleOwner, with asession_idon every event and the
same five-minute timeout the dashboard uses; a heartbeat every 60 s while foregrounded; a flush
on background. The device's region setting as the country (collectsCountry); and anything you
track. - Optional user properties, merged and clamped to the server's limits (20 keys, 40 / 200
characters), sent asuser.identifyonly on change;reseton sign-out. - Environments: every event is tagged
production,beta,emulatorordebug(stored by the
ingest beside the Apple tiers). Emulator runs and debuggable builds are detected; a Play testing
track is opt-in viaenvironment = AppEnvironment.BETA.enabledEnvironmentsdefaults to
{PRODUCTION, BETA}. - Debug mode (
debug = true): the current build sends whatever its environment (the tag stays
truthful, so those events appear under All in the dashboard and never in Live) and logs to
logcat. Without it, a gated build logs one line explaining why nothing is sent. - Delivery: events are persisted to
noBackupFilesDiras they are tracked, sent oldest-first in
slices of 100 through one serial sender, and retried after transient failures. Every event
carries a client-mintedevent_idand the ingest ignores replays. Presence pings, which the
server folds into rollups on arrival, are re-sent only when it provably never saw them -
including after a process killed mid-request, since the on-disk queue never holds an in-flight
ping. - Calls apply strictly in call order on one background thread; calls made before
configure, or
before the user's first unlock under Direct Boot, are held (up to 200) and replayed. - Permanent
4xxresponses drop the slice instead of retrying forever;413halves it. minSdk 21, one dependency (androidx.lifecycle:lifecycle-process), explicit-API mode,
ktlint-clean.