Android SDK release notes

Version history of the TrueEngage Android SDK, newest first, with package coordinates, minimum SDK requirements and changes in each release.

Updated 1 Nov 2026 9 min read

Every version of the Android SDK, newest first. For setup, see Android SDK.

1.0.0 — 1 November 2026

Package Requirements
io.trueengage:trueengage-android:1.0.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • First stable release. No API breaks: everything that worked in the previous release works unchanged. Includes the SDK Logger.

0.10.0 — 1 November 2026

Package Requirements
io.trueengage:trueengage-android:0.10.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • SDK logger. Start a session in Developers > SDK Logger, scan the QR code or type the code, and the app's TrueEngage log lines appear in the console while the session lasts. It works with test and live keys; a live session is limited to info level and 30 minutes. Lines are scrubbed on the device before they are sent (emails, phone-like numbers, tokens, app keys), and the device shows a Toast when a session starts and ends. Add an intent-filter for your app's own URL scheme so the QR code can open the app, or pass the code to TrueEngage.startLoggerSession(code).
  • Kill switch. TEConfig.remoteLogger = false (default true) refuses pairing entirely, for a release build that must never log remotely.

0.9.0 — 30 October 2026

Package Requirements
io.trueengage:trueengage-android:0.9.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Styled push text. A push can show bold, italic, underline, line breaks and coloured text in its title and message, including the expanded text. The SDK checks the markup against the same allow-list as the server, so links, images and scripts are never shown. If the styled text is missing or unusable, the notification shows the plain title and message, which are also what the click payload, callbacks and inbox carry. No code change needed. iOS and Web show plain text. → Push notifications
  • Bottom sheets and full-width images. In-app messages support the bottom_sheet layout, full-width images and tappable images. → Create an in-app message

0.8.1 — 24 October 2026

Package Requirements
io.trueengage:trueengage-android:0.8.1 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Ad identifiers cleared. When the user limits ad tracking, the advertising id is reset, you pass null to setAdvertisingIdentifier() or setFirebaseAppInstanceId(), or you call optOut("tracking") or optOut(), the SDK tells TrueEngage to delete the stored id. A reset sends the clear and the new id together. Sent only for ids the SDK reported earlier. No code change needed. → When ad identifiers are cleared

Improvements

  • Opt-out clear is not lost. It is queued before the opt-out takes effect, survives flushOnOptOut = false, and the background flush sends it even while opted out. reset() keeps a pending clear.

0.8.0 — 22 October 2026

Package Requirements
io.trueengage:trueengage-android:0.8.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Ad click capture. When a link that opens the app, or the install referrer, carries utm_*, gclid, gbraid, wbraid, gad_source, gad_campaignid, fbclid or fbp, the SDK records one touch. A link with none of them records nothing. Stops while tracking is opted out. → See where each user came from
  • Firebase id for GA4. setFirebaseAppInstanceId(id) adds your Firebase app instance id to later touches, so GA4 can match app events. → Send events to Google Analytics 4
  • Advertising id. The SDK reads the Google advertising id only if your manifest declares com.google.android.gms.permission.AD_ID and the user has not limited ad tracking. It clears a stored id when the user limits tracking or opts out. → See where each user came from
  • Web install links. A Play Store link built by the Web SDK storeLink keeps its campaign values in the install referrer, so the install keeps its source.
  • Play referrers. An install referrer that contains te_anon plus ad parameters now emits $acquisition. It was previously dropped.
  • Release order. Install touches from smart links are matched by TrueEngage, so ship this version after the matching server release.

Improvements

  • Reserved event. $acquisition is sent by the SDK only. track() rejects it.

0.7.0 — 21 October 2026

Package Requirements
io.trueengage:trueengage-android:0.7.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • In-app messages. Modals, banners, cards and bottom sheets built in the console are fetched after initialize() and shown when their event or screen trigger fires. Self-handled campaigns are not drawn: you receive the message and show it yourself. → In-app campaigns
  • Cards feed. TrueEngage.cards gives you a persistent inbox of cards with a synchronous unread count, and mark read, clicked and dismissed actions. You draw the UI. Opting out of in-app stops fetching, showing and stats.
  • Verified identity. identify(id, attrs, token), setIdentityToken and setIdentityTokenProvider send a signed token your backend issues, so messages and cards with personal data reach only proven users. → Verify your users
  • Session caps. In-app session caps now persist across process restarts.

0.6.0 — 19 October 2026

Package Requirements
io.trueengage:trueengage-android:0.6.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Push action buttons. Buttons from a template show as notification actions. A tap records Push Clicked with the button id and label, and opens the button link. → Push notifications
  • Push sound. A template sound plays a file in res/raw. → Push notifications

Fixes

  • Push payloads. A JSON null in the push data is treated as missing, so such a push no longer fails. Build of 21 October.

0.5.0 — 18 October 2026

Package Requirements
io.trueengage:trueengage-android:0.5.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Referral links. createLink makes a short smart link for in-app content. It needs in-app links turned on in Smart Links settings. → Links API and webhooks
  • Referrer on deep links. onDeepLink carries the referrer when the opened link was created in an app. → Links API and webhooks

0.4.0 — 18 October 2026

Package Requirements
io.trueengage:trueengage-android:0.4.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

0.3.0 — 13 October 2026

Package Requirements
io.trueengage:trueengage-android:0.3.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Opt-in device location. requestLocationPermission() asks for location and updateLocation() reads and syncs a fix now. The SDK turns a fix into a city and region on the device and sends them with your events, so users on mobile networks get a real city. → Device location
  • Location settings. TEConfig.locationPrompt (manual by default, or auto) and locationRefreshHours (default 4) control when the SDK asks and how often it refreshes. → Device location
  • Carrier code. Every batch now carries the SIM or network operator code (deviceMccMnc) when the device reports one. → Device location
  • Location permission events. The SDK records Location Permission Granted and Location Permission Denied when the user decides, and again if they change the choice in Settings. It does not record them for apps that never declared the permission. → Device location

Improvements

  • Your app declares the permission. The library does not add ACCESS_FINE_LOCATION to your manifest, so apps that don't use location don't inherit the permission or the Google Play disclosure. → Device location
  • Push images load safely. Push images are limited in download time and size and are decoded at the size they are shown, so large images no longer risk running a low-memory device out of memory. A push whose image can't load still shows without it. Build of 14 October. → Push notifications

Fixes

  • Package and runtime versions match. The published package version could differ from the version the code reported. They are now the same, so one version string always means one build. Build of 14 October.

0.2.0 — 11 October 2026

Package Requirements
io.trueengage:trueengage-android:0.2.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Country from the device. Each batch includes deviceCountry, read from the registered network, then the SIM, then the device locale. The server uses it when the request address is a VPN, a proxy or a carrier address in another state. It needs no new permission and shows no prompt. → Device location
  • setRegion(). A typed setter for the user's state or province, next to setCity and setCountryCode. Set it when your app knows better than the network. → Events and identity

This version does not read the device's location. Location arrives, opt-in, in 0.3.0.

0.1.0 — 19 September 2026

Package Requirements
io.trueengage:trueengage-android:0.1.0 minSdk 23 · compileSdk 35 · Kotlin with JVM 17 target

What's new

  • Event tracking. Events are stored in a durable queue and sent in ordered, compressed batches with retries and background flushing. → Events and identity
  • Identity. Anonymous users, identify, logout and reset, and user attributes with typed setters for email, phone, name and more. → Events and identity
  • Sessions and automatic events. 30-minute sessions with App Opened, Session Started, Session Ended, App Installed, App Updated and Screen Viewed. → Events and identity
  • Push notifications. FCM token registration, the notification permission request, and Push Received, Push Clicked and Push Dismissed events. → Push notifications
  • Remote config. Settings fetched hourly and cached on the device, including a switch to block named events. → Android SDK
  • Consent. optOut and optIn per scope, persisted across launches, and optOutByDefault. → Consent
  • Debugging. enableValidation() and debugInfo(). → Android SDK

Improvements

Added on 9 October 2026, still reported as 0.1.0:

  • Push receipts with another push library. A broadcast receiver records Push Received for every TrueEngage push even when another library's messaging service handles the message. It only records and never shows a notification. → Push notifications
  • trackPushClicked(data). Record taps yourself when your app shows or routes the notification. Receipts and clicks are recorded once per message. → Push notifications
  • display = false. Pass it to PushHandler.handle to record a push without showing it. → Push notifications