2012-01-08 14 views
9

La mia app ha l'obbligo di richiedere una password se sono trascorsi più di 60 minuti dall'ultima immissione della password o se l'utente accede all'app dopo aver bloccato il dispositivo.Come si può sapere se l'iphone viene bloccato?

Il problema è sapere quando il dispositivo viene bloccato. Se l'utente sta passando da un'applicazione all'altra, l'app non deve richiedere una password a meno che non siano trascorsi 60 minuti dall'ultima richiesta di password. Se bloccano il dispositivo, richiedi nuovamente anche se sono trascorsi meno di 60 minuti.

Comunicazioni tale applicationWillResignActive non aiutano perché non è possibile determinare se l'applicazione è dimesso attivo dovuta al dispositivo essendo bloccato o il cambio utente a un'altra applicazione.

nella ricerca, ho trovato i messaggi che dicono posso registrarsi per osservare il UIApplicationProtectedDataWillBecomeUnavailable notifica.

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self selector:@selector(protectedDataWillBecomeUnavailable:) 
      name:UIApplicationProtectedDataWillBecomeUnavailable object:nil]; 

Quando torno a questa notifica ho impostare un flag per richiedere la password dell'utente la volta successiva che l'applicazione diventa attivo. Ma i miei test hanno dimostrato che questa notifica è non inviata a meno che il dispositivo non abbia una configurazione di passcode.

Ho scritto codice di prova per osservare tutte le notifiche e non vedo altre notifiche che indichino che il dispositivo si sta bloccando.

C'è un altro modo per sapere quando il dispositivo viene bloccato?

+1

possibile duplicato di [Lock Unlock events iphone] (http: // stackoverflow.it/questions/706344/lock-unlock-events-iphone) –

+0

Probabilmente il motivo, non hai ricevuto le notifiche di cui sopra è a causa di quanto segue: "Questi vengono applicati solo quando un utente ha il proprio dispositivo protetto da passcode, la protezione dei dati è non disponibile nel simulatore. " –

risposta

2

Questa domanda mi ha incuriosito, quindi mi sono guardato un po 'per curiosità. Mentre non appare c'è una comoda notifica inviata, sembra che ci sia un trucco intelligente usando l'accelerometro. Ecco un link a quella:

Lock Unlock events iphone

+0

Grazie! Questa è una tecnica intelligente. Tuttavia, l'app dovrebbe rimanere viva sullo sfondo, che preferirei evitare. – jimmyg

+0

Vero, idealmente verrebbe inviata una notifica simile a UIApplicationProtectedDataWillBecomeUnavailable. –

0

C'è più modo semplice - basta prendere la notifica UIApplicationDidBecomeActiveNotification e misurare il tempo trascorso dall'ultima cattura. Ma è necessario reimpostare il timer quando l'utente tocca l'app. Può essere fatto catturando tutti gli eventi tap nella finestra dell'app. Il tempo tra l'ultimo tocco e UIApplicationDidBecomeActiveNotification ti fornirà un timeout reale. Inoltre, è necessario verificare il tempo tra UIApplicationDidBecomeActiveNotification corrente e recente - potrebbe essere inferiore a tra l'ultimo tocco e UIApplicationDidBecomeActiveNotification.

UIApplicationDidBecomeActiveNotification licenziato quando:

  1. App lancia
  2. App restaurato da sfondo
  3. App essere sbloccato
  4. Telefonata finita

Vale a dire tutte le volte che l'app appare sullo schermo dopo qualche azione.

+0

Grazie. Sarebbe utile se solo mi dicesse se il dispositivo è stato bloccato dall'ultima volta che è stata eseguita l'app. L'app deve richiedere una password se il dispositivo è stato bloccato. Se non è stato bloccato, è necessario verificare se sono trascorsi 60 minuti dall'ultima richiesta di password. Posso gestire il controllo per 60 minuti. Non so se il telefono era stato precedentemente bloccato. – jimmyg

Problemi correlati