Skip to main content

Changelog

The SDK runs its own semver clock: 0.x while pre-stable, 1.0 when confident. A breaking change in the backend surface also forces an SDK major.

0.1.1​

Rebuild of 0.1.0 on Kotlin 2.2.21; public surface unchanged (binary-compatibility verified against 0.1.0). Shipped class metadata drops from 2.4.0 to 2.2.0, fixing consumption from Kotlin toolchains that read metadata ≤ 2.3.0 — concretely, Flutter 3.38–3.41 apps (KGP 2.2.20) failed with "compiled with an incompatible version of Kotlin" on OptoLinkData. Also readable by AGP 9's built-in Kotlin 2.2.10, unblocking Flutter's Built-in-Kotlin plugin migration.

Compatible with OptoLink backend v2.1.0+.

Install: implementation("com.optomatica:optolink-android:0.1.1") from Maven Central.

0.1.0​

Initial release.

  • OptoLink.initialize(context, config): idempotent, concurrency-safe; runs the once-per-install deferred match and never throws on network failure.
  • App Links and custom-scheme handling: handleIntent(intent) from onCreate and onNewIntent (intents arriving before initialization finish are parked, latest wins), surfaced on the links: Flow<OptoLinkData> hot stream (replay 1, never errors).
  • Deferred deep linking: one bulk POST /match with clipboard token, Google Play install referrer, and the five-field fingerprint; resolveDeferredLink() re-runs the match manually and returns OptoLinkData?.
  • Device identity: UUID v4 deviceId, persisted in SharedPreferences; setIdentity / clearIdentity bind it to an end user; trackEvent reports events.
  • Config: OptoLinkConfig (CLIENT-tier apiKey, orgKey, baseUrl, timeout: 10.seconds, maxRetries: 2, clipboardEnabled, optional logger).
  • Error model: sealed OptoLinkException pair: OptoLinkApiException (status, requestId, details, retryAfterSeconds, raw) and OptoLinkConnectionException.
  • Retry matrix: /match and link resolution retry on connection errors, 429 (sleeping the body-communicated retryAfterSeconds), and 5xx; events never retry on 5xx; the session ping is fire-and-forget.
  • Logging: OptoLinkLogLevel.INFO (alongside WARNING/ERROR) — the SDK logs its decision trail at INFO (init summary with a redacted key, match attempt/response, per-rung deferred-leg decisions, per-attempt request lines, link emissions, telemetry successes) for live-test observability.
  • OptoLinkData.score: Int? — the backend's matchScore (present only on FINGERPRINT_SCORED matches) surfaces instead of being dropped; null everywhere else.
  • Kotlin-first public API (explicit API mode, binary-compat baseline); two dependencies — OkHttp 5.x and the Google Play Install Referrer library (kotlin-stdlib + coroutines platform-exempt); minSdk 23.

Compatible with OptoLink backend v2.1.0+.

Install: implementation("com.optomatica:optolink-android:0.1.0") from Maven Central.