Licensing
A Beekon license is a signed token (a license-format-v1 JWS) the SDK verifies on the device, with no network call. It is purely observational: no license status ever blocks, degrades, or delays the SDK. Without a key, Beekon runs in evaluation mode and works exactly the same.
You only need this section if you’ve been issued a production license and want to surface its status.
Supply a key
Section titled “Supply a key”The license key is the highest-priority channel and overrides any value set in the platform manifest (in.wayq.beekon.license meta-data on Android, BeekonLicenseKey in Info.plist on iOS). A token is bound to your app id and platform, so it’s safe to commit.
Beekon.configure(BeekonConfig.SelfManaged(licenseKey = "eyJ…")) // a license-format-v1 tokentry await Beekon.shared.configure(BeekonConfig.selfManaged(licenseKey: "eyJ…"))Read the status
Section titled “Read the status”licenseStatus is a snapshot; licenseStatusUpdates (Beekon.licenseStatus StateFlow on Android) streams transitions. The status is one of: notDetermined, evaluation, licensed(tier, entitlements), expired, updateEntitlementLapsed, or invalid(reason).
when (val s = Beekon.licenseStatus.value) { is LicenseStatus.Licensed -> Log.d("beekon", "licensed: ${s.tier}") is LicenseStatus.Evaluation -> Log.d("beekon", "evaluation mode") is LicenseStatus.Invalid -> Log.d("beekon", "invalid: ${s.reason}") else -> {}}switch Beekon.shared.licenseStatus {case let .licensed(tier, _): print("licensed: \(tier)")case .evaluation: print("evaluation mode")case let .invalid(reason): print("invalid: \(reason)")default: break}A token carries claims the SDK reads but never enforces: products (covered platforms), app_ids (the bundle it’s bound to), tier (opaque — you define the meaning), entitlements, and an optional exp. For pricing and how to obtain a production license, see getbeekon.com.