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; кэш — ответственность приложения.