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.initializeinApplication.onCreate: validates the publishable key (rejectssk_keys and never echoes the key), creates a random install ID (UUID v4, stored innoBackupFilesDir) and reports the launch withPOST /v1/sdk/initin the background, with the Play Install Referrer on first launch. Never throws on network errors.Lander.handleIntent: App Links and custom scheme URLs fromonCreateandonNewIntent. Each intent is read once, so rotation, process death and reopening from Recents never deliver a link twice.Lander.deepLinks(aFlow) andLander.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, beforeclaimHandoffand before events are sent. Lander.claimHandofffor authenticated handoffs, with oneIdempotency-Keyacross retries.Lander.createLink: short links viaPOST /v1/sdk/links, retried with oneIdempotency-Keyand at most 10 seconds of total retry wait.Lander.trackEvent: persistent offline queue, batches of up to 100, exponential backoff with jitter andRetry-After, deduplication by client generated event ID, flushed when the app goes to the background, held until the install is registered.install_id_conflictcreates a fresh install ID;install_not_foundon 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 asinvalid_response. - Callback overloads of every suspending call for Java.
- Example app: Acme Shop.