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)fromonCreateandonNewIntent(intents arriving before initialization finish are parked, latest wins), surfaced on thelinks: Flow<OptoLinkData>hot stream (replay 1, never errors). - Deferred deep linking: one bulk
POST /matchwith clipboard token, Google Play install referrer, and the five-field fingerprint;resolveDeferredLink()re-runs the match manually and returnsOptoLinkData?. - Device identity: UUID v4
deviceId, persisted in SharedPreferences;setIdentity/clearIdentitybind it to an end user;trackEventreports events. - Config:
OptoLinkConfig(CLIENT-tierapiKey,orgKey,baseUrl,timeout: 10.seconds,maxRetries: 2,clipboardEnabled, optional logger). - Error model: sealed
OptoLinkExceptionpair:OptoLinkApiException(status,requestId,details,retryAfterSeconds,raw) andOptoLinkConnectionException. - Retry matrix:
/matchand link resolution retry on connection errors,429(sleeping the body-communicatedretryAfterSeconds), and5xx; events never retry on5xx; the session ping is fire-and-forget. - Logging:
OptoLinkLogLevel.INFO(alongsideWARNING/ERROR) — the SDK logs its decision trail atINFO(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'smatchScore(present only onFINGERPRINT_SCOREDmatches) surfaces instead of being dropped;nulleverywhere 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.