Moving to AppGlance
The integration takes about five minutes. The part worth planning is everything around it: what happens to the history you already have, and how you convince yourself the new numbers are right before you switch anything off.
Start here: your history does not come with you
There is no import, and we would rather say so plainly. Firebase and TelemetryDeck both hold your historical events in their own stores, and neither exposes them in a shape we could faithfully re-create, the identity model differs, the sessionisation differs, and the automatic events differ. Anything we imported would be a guess wearing the costume of your old numbers.
So AppGlance starts counting the day you install it. Plan for a gap in year-over-year comparisons, and keep read access to your old tool for as long as that matters to you. If your old data matters a lot, export it before you cancel anything: Firebase can export to BigQuery, and TelemetryDeck has its own export.
Run both at once first
Nothing stops you shipping both SDKs in the same build, and it is the only way to get an honest comparison. Do that for one release cycle. Then compare like for like, and expect the totals to differ, for reasons that are not bugs:
- We count a user as an install, identified by a random UUID kept in the Keychain (Apple) or SharedPreferences (Android). Firebase counts app instances; TelemetryDeck derives an anonymous hash. Reinstall behaviour differs between all three, so "users" will not match.
- Sessions end after five quiet minutes. If your old tool used a different timeout, session counts will differ by construction.
- Debug and Simulator builds do not send by default, so if your old tool did count them, ours will read lower until you ship. That is the intended difference.
- Presence pings and user labels are not events. Heartbeats,
user.identifyanduser.resetare excluded from event counts entirely.
When the shapes of the curves agree, the migration is done. Chasing exact totals is not a good use of your week.
From Firebase Analytics
The call maps almost directly. Firebase's event name becomes the signal; its parameters become metadata.
// Firebase
Analytics.logEvent("purchase_completed", parameters: ["tier": "pro"])
// AppGlance
AppGlance.track("purchase_completed", metadata: ["tier": "pro"])
// Firebase
firebaseAnalytics.logEvent("purchase_completed") { param("tier", "pro") }
// AppGlance
AppGlance.track("purchase_completed", mapOf("tier" to "pro"))
Three differences to plan around:
- You do not need to port screen or session events. Sessions, installs and "active right
now" are automatic. Delete your
screen_viewandsession_startplumbing rather than translating it. - Metadata is strings only, and bounded: 20 keys, keys up to 40 characters, values up to 200. Numeric parameters become strings. This is a deliberate limit, it is what keeps a metadata value from quietly becoming a place personal data ends up.
- There are no audiences, no ad attribution and no BigQuery export. If your Firebase setup leans on those, we are not a replacement for that part and you should say so in your own planning.
From TelemetryDeck
The models are close, because the philosophies are close. A signal is a signal.
// TelemetryDeck
TelemetryDeck.signal("purchase_completed", parameters: ["tier": "pro"])
// AppGlance
AppGlance.track("purchase_completed", metadata: ["tier": "pro"])
The real difference is identity, and it is the reason to switch or not to switch. TelemetryDeck is built so
that you can never resolve a signal back to a person. AppGlance keeps a stable per-install id, so you can open
a single user and see their sessions in order, and you can call identify to attach your own
label to it. If the ability to look at one user is what you want, that is what you are moving for. If you
consider that a feature you would rather not have, TelemetryDeck is the better fit and we would rather you
stayed there. We wrote that comparison out in full.
Take the chance to fix your event names
A migration is the one moment when renaming events costs nothing, because there is no history to break. Two rules that will save you later:
- Names describe what happened, not what it was worth.
purchase_completedwith{"tier": "pro"}, neverpurchase_pro_9_99. A value baked into the name cannot be grouped, filtered or summed, and it means every price change forks your history. - Never put personal data in either half. Not in the name, not in metadata. No emails, no user ids from your own backend, no free text a user typed. Our privacy label tool assumes you followed this; if you did not, its answers stop being true for your app.
Cut-over checklist
- Both SDKs shipping in one release, numbers compared for a full cycle.
- Old data exported, if you will ever want it.
- Event names reviewed once, while renaming is still free.
- Privacy labels regenerated, your App Store answers change when your SDKs change.
- Old SDK removed, and its key revoked in its own dashboard.
Want a hand? [email protected]. If you send us your current event list we will map it to signals and metadata and send it back, it is a short job for us and a tedious one for you. The quickstart also has a paste-in prompt that will do the integration and interview you about your events, which is a reasonable way to do the rename pass.