Free без сети; платные права — из локального кэша после синхронизации.

Free и офлайн

Free

Базовый локальный режим приложения:

  • Работает без интернета
  • Не вызывает createPayment
  • Обычно без серверных entitlements
  • Может быть на пейволе для сравнения (is_free: true)

Free + платный

Покупка добавляет права, не убирает free.

доступ = free-local ∪ активные платные entitlements

Офлайн после покупки

КтоПоведение
ПриложениеПри последнем онлайне сохранить снимок (codes, expires_at, is_lifetime). Offline: free всегда; платное — из кэша до expiry.
Админка / APIТолько онлайн. Отзывы применяются при следующем sync.

Алгоритм клиента

canUse(feature):
  if feature in FREE_LOCAL_SET: return true
  if network:
    snapshot = getMyEntitlements()
    saveCache(snapshot)
    return snapshot.codes.contains(feature)
  cached = loadCache()
  if missing or expired (и не lifetime): return false
  return cached.codes.contains(feature)

SDK даёт сетевые API; кэш — ответственность приложения.