Prerequisites
Three things every consumer app needs before calling Octet.start(...):
- A license key.
- Privacy declarations in your app bundle (iOS
Info.plist) or runtime permission grants (Android). - A minimum platform version.
1. License key
The SDK is gated by a per-developer license key. Request a free key at sdk.octetproof.com/signup.
The key is a PASETO v4.public token shaped like octet_live_v4.public.… (or octet_test_… against staging). Octet signs the key, and the SDK verifies the signature locally before any network call.
A license key is free for up to 1,000 signed proofs per month and renews automatically, with no time limit. There is no per-license device cap; install on as many devices as you need.
2. Platform privacy declarations
iOS: Info.plist keys
Add these to your app's Info.plist. Without them, the iOS runtime crashes on first launch with a privacy-sensitive-data error that names the missing key.
Required
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app uses your location to verify and prove your location
to services that request it.</string>
<key>NSMotionUsageDescription</key>
<string>This app uses motion data to detect when you're stationary or
moving, which improves the confidence of location proofs.</string>
NSMotionUsageDescription is required. The SDK touches CMMotionActivityManager immediately during Octet.start(...), and Apple requires the usage description before any code accesses that API. Read-only access also counts.
The strings are user-facing. The copy above is a safe default. Rewrite in your product's voice if you prefer.
Required only if you enable background location
If your app needs proofs while backgrounded, also add:
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app uses background location to continue generating
location proofs while you're not actively using it.</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
Without these the SDK silently falls back to foreground-only operation when the app is backgrounded. The SDK itself does not crash. Proofs stop generating until the app returns to foreground.
Android: runtime permissions
The SDK's AndroidManifest.xml declares the permissions the on-demand foreground proof flow uses: location, motion, foreground service, internet, and wake-lock. Manifest-merge propagates these into your app, so you do not copy them into your own manifest.
The SDK's manifest declares only the permissions the foreground proof flow uses, so ACCESS_BACKGROUND_LOCATION is not bundled. To generate proofs while the app is backgrounded, declare ACCESS_BACKGROUND_LOCATION in your own manifest.
You still request the runtime permissions from the user:
| Permission | When to request | Notes |
|---|---|---|
ACCESS_FINE_LOCATION |
Before Octet.start(...). |
SDK refuses to start without it. |
ACTIVITY_RECOGNITION |
Before Octet.start(...). |
Android 10+ (API 29+). Motion-classification features degrade gracefully if denied. Request it for full proof confidence. |
ACCESS_BACKGROUND_LOCATION |
After ACCESS_FINE_LOCATION is granted, only if you need background proofs. |
Declare it in your own manifest first. The SDK does not merge it. Android 10+ prompts for it separately. |
3. Minimum platform versions
| Platform | Minimum | Toolchain |
|---|---|---|
| iOS | 16.0 | Xcode 15+, Swift 5.9+ |
| Android | API 30 (Android 11) | Android Studio Hedgehog (2023.1.1)+, JDK 17, Kotlin 2.1+ |
Next: the iOS Quick Start or Android Quick Start.