Docs

Changelog

What changed in each release of lander-android.

Upgrade by changing the version of link.golander:lander-android in your Gradle file.

0.1.0

First release of the native Android SDK, with the same behavior as the Flutter SDK 0.3.0.

  • Lander.initialize in Application.onCreate: validates the publishable key (rejects sk_ keys and never echoes the key), creates a random install ID (UUID v4, stored in noBackupFilesDir) and reports the launch with POST /v1/sdk/init in the background, with the Play Install Referrer on first launch. Never throws on network errors.
  • Lander.handleIntent: App Links and custom scheme URLs from onCreate and onNewIntent. Each intent is read once, so rotation, process death and reopening from Recents never deliver a link twice.
  • Lander.deepLinks (a Flow) and Lander.addDeepLinkListener (Java): links are buffered until collected and delivered in arrival order, the launch link is delivered once, duplicates within two seconds are dropped, and unknown links (404) or network failures still deliver the raw URL.
  • Lander.getInitialLink: the launch link, or a deferred link on first launch. A link that opened the app wins over a deferred one.
  • Deferred deep links from the Play Install Referrer (DETERMINISTIC, install_referrer). A failed first launch report is retried when the app returns to the foreground, before claimHandoff and before events are sent.
  • Lander.claimHandoff for authenticated handoffs, with one Idempotency-Key across retries.
  • Lander.createLink: short links via POST /v1/sdk/links, retried with one Idempotency-Key and at most 10 seconds of total retry wait.
  • Lander.trackEvent: persistent offline queue, batches of up to 100, exponential backoff with jitter and Retry-After, deduplication by client generated event ID, flushed when the app goes to the background, held until the install is registered.
  • install_id_conflict creates a fresh install ID; install_not_found on events registers the install again and keeps the events.
  • Request timeouts (10 s), UTF-8 responses whatever the Content-Type, and a 2xx response that is not JSON treated as invalid_response.
  • Callback overloads of every suspending call for Java.
  • Example app: Acme Shop.

On this page