Proje: Okul B2B App · Hub: Okul B2B App — Conventions

App Lock Pattern (useAppLock)

hooks/useAppLock.ts — Uygulama kilitleme yaşam döngüsü yönetimi.

Konfigürasyon

const DEFAULT_CONFIG: AppLockConfig = {
  enabled: false,              // Varsayılan: kapalı
  lockTimeoutMs: 5 * 60 * 1000, // 5 dakika sonra kilitle
  maxFailedAttempts: 5,
  requireBiometric: true,
};

Background Timer Mantığı

// Background'a alındığında
backgroundTimeRef.current = Date.now();
 
// Active'e dönüldüğünde
const timeInBackground = Date.now() - backgroundTimeRef.current;
if (timeInBackground > config.lockTimeoutMs) {
  isLocked = true;
}

5 dakika arka planda kalan uygulama tekrar açıldığında kilit ekranı gösterir.

State

interface AppLockState {
  isLocked: boolean,
  isInitialized: boolean,
  config: AppLockConfig,
  failedAttempts: number,   // 5 başarısız deneme → geçici kilitleme
  lastUnlockTime: number,
}

SecureStorage Anahtarları

  • SECURE_KEYS.APP_LOCK_ENABLED — Kilit etkin mi
  • SECURE_KEYS.BIOMETRIC_ENABLED — Biyometrik etkin mi