# What's new in 3.0

SDK 3.0.0 for iOS and Android is a major release. This page covers what changes for your integration. Read [Upgrading from 2.x](/docs/v3.0/getting-started/upgrading-from-2x/) for the steps. The full release notes are in the [`octet-sdk-ios`](https://github.com/octetproof/octet-sdk-ios/blob/main/CHANGELOG.md) and [`octet-sdk-android`](https://github.com/octetproof/octet-sdk-android/blob/main/CHANGELOG.md) changelogs, and the 2.0 docs stay at [/docs/v2.0/](/docs/v2.0/).

## What you may need to change

- **Usage reporting is always on.** The SDK sends one usage record per device per day. It carries no location, no proof data and no user identity, and it never delays a proof. Setting `creditServiceUrl` no longer turns it off. See [Metrics and usage reporting](/docs/v3.0/concepts/metrics/).
- **A pinned `claimedRegion` must be an assigned ISO 3166 code.** Any other value produces no proof.
- **Android: with a debugger attached, the SDK refuses a proof (`TAMPERING`)**, as it already did on iOS. Debugging with a sandbox session (`sandboxBypassToken` set) still works.
- **Android: `BootstrapReason` has a new case, `NewDevicesBlocked`.** A `when (reason)` without an `else` branch no longer compiles. Add the case or an `else` branch.
- **Android: recompile against 3.0.** `AdvancedConfig` and `LicenseStatus` have new constructor parameters. Source using named arguments compiles unchanged.
- **The first proof after `Octet.start` can take up to 30 seconds** while the SDK finishes starting, instead of returning `noFix`. If your app times out its first call, allow for this.
- **If you verify proofs yourself with `octet-verify`, use 1.5.0 or later.**
- **If you turned on certificate pinning with 2.0, upgrade to 3.0**, which carries updated pins.

## New

- **Gateway routing.** `TransportPolicy` (`OctetConfig.advanced.transport`) can send all of the SDK's network calls through a gateway you run, or through Octet's hosted gateway, so your app talks to one domain. Direct mode, the default, is unchanged. See [Gateway routing](/docs/v3.0/concepts/gateway-routing/).
- **Assurance tier on every proof.** `LocationProof.spoofingVerdict` (`spoofing_verdict` in the proof JSON) says how strongly the location was corroborated. Use it to decide what a `YES` is worth. See [`OctetVerdict`](/docs/v3.0/api-reference/octet-verdict/#the-assurance-tier).
- **Require a tier when you verify.** `VerifyOptions.requireVerdict` fails a proof below the tier you ask for, matching `octet-verify --require-verdict`. See [`Octet.verify`](/docs/v3.0/api-reference/octet-verify/).
- **Opt-in `PLAUSIBLE` containment.** With `OctetConfig.advanced.acceptPlausibleContainment` on, `contains(...)` and disc queries can answer from a `PLAUSIBLE` proof. It is off by default. See [Predicates](/docs/v3.0/api-reference/predicates/#plausible-containment).
- **A typed error when your account takes no new devices.** `BootstrapReason.newDevicesBlocked` carries an `upgradeUrl`. Open it exactly as received. Devices that already activated keep working. See [License Types](/docs/v3.0/api-reference/license-types/#bootstrapreason).

## React Native

A React Native wrapper is in progress and not yet published. See [React Native](/docs/v3.0/getting-started/react-native/).
