Trusted entitlements protect your access checks from tampered or stale client-side state. AppActor SDKs expose verification data on CustomerInfo and offerings so your app can decide how strict each access path should be.

Verification states

Verification data does not protect you unless your code checks it. hasActiveEntitlement("premium") answers access state; verification tells you how much to trust that snapshot.

Basic UI gating

For normal UI surfaces, active entitlement checks are enough:

High-trust gating

For expensive content, backend-controlled resources, or abuse-prone actions, require both active access and trusted verification.

Offline decision path

When the network is unavailable, SDKs may expose offline-computed access from trusted local store state.
Treat offline access as resilience, not fresh billing truth. Refresh with getCustomerInfo() when the app returns online.

Fail-open versus fail-closed

Pick the policy per feature:

Mapping failure to watch

Offline entitlement derivation depends on cached product-to-entitlement mappings from offerings. If a product is not attached to premium, a purchase may complete but your access check will not unlock premium. Use this debug order:
  1. Fetch offerings successfully.
  2. Confirm productEntitlements contains the store product.
  3. Confirm the product maps to premium.
  4. Purchase the package.
  5. Refresh customer info.
  6. Check hasActiveEntitlement("premium") and verification.
If the feature is served from your backend, enforce access with Server-side Access Checks, not only from the mobile app.