2011-05-23 11 views
7

Estoy escribiendo una aplicación que implica autenticación en la pantalla inicial y permite el acceso a datos confidenciales en pantallas posteriores. Cuando el iPhone está bloqueado, ya sea con el botón de bloqueo o mediante el bloqueo automático, me gustaría que la aplicación se cierre solo como medida de seguridad. ¿Hay alguna manera de que pueda hacer esto?¿Cómo cierro mi aplicación de iPhone cuando la pantalla se bloquea?

Respuesta

10

Su UIApplicationDelegate recibirá el mensaje

– applicationWillResignActive: 

cuando se bloquea la pantalla, y

– applicationDidBecomeActive: 

cuando vuelve. Sin embargo, también podría recibir estos mensajes en otras situaciones (como recibir una llamada telefónica, el usuario cierra la aplicación en iOS 4.0 y posterior) y no conozco una manera de distinguir el motivo.

Una mejor experiencia de usuario en mi opinión sería volver a mostrar la autenticación cuando vuelva la aplicación. De esta forma, el usuario no se confundirá cuando el teléfono se desbloquee, y la aplicación que tenía se cerró misteriosamente.

+0

gracias, es bueno saber los métodos específicos que se envían en estas casos. – Andrew

2

Si mal no recuerdo, la aplicación se pone a dormir cuando el teléfono está bloqueado.

Desde la introducción de la multitarea, Apple cambió el comportamiento para que su aplicación reciba un mensaje específico cuando se desbloquea/cambia.

Yo sugeriría que simplemente escuchara eso y luego pidiera autenticación de nuevo en este punto.

No creo que solo puede salir de su aplicación (ni debe), no sé cualquier aplicación que solo se mata ...

Lo siento por ser no demasiado específica aquí, pero espero que ahora sabrá dónde llevar ...

3
  1. "Cerrar su aplicación" va en contra de las directrices de Apple. Si bien algunas aplicaciones realmente lo hacen, es una de las cosas que puede hacer que tu aplicación sea rechazada. Fue contra las pautas de Apple antes de la multitarea y ahora es más importante debido a la multitarea. La experiencia del usuario es cuando vuelven al teléfono y a su aplicación después de un bloqueo o de estar en otra aplicación, su aplicación aún debería estar ejecutándose. "Cerrar su aplicación" llevaría al usuario a creer que su aplicación se ha bloqueado y es probable que escriban revisiones a tal efecto.

  2. Si su deseo es proteger la información en la aplicación cuando el usuario se va "lejos", entonces debe mirar UIApplicationDelegate Protocol Reference. En particular, applicationDidEnterBackground: (donde debe desconectar al usuario) y applicationDidBecomeActive: (donde debe hacer que el usuario vuelva a iniciar sesión).

Como última nota, es posible que desee por defecto a "cierre de sesión automático", pero dar al usuario una opción de configuración para mantenerlos registran en si así lo desean. No es tan difícil, y los pocos que lo deseen pueden aprovechar el entorno.

+1

De hecho, leí en alguna parte que era una mala práctica tener una aplicación de iPhone cerca, pero lo ignoré como una opinión personal. Estoy empezando a ver a partir de la multitud de respuestas a esta pregunta que, además de ser grosero y ambiguo (no hay manera de que el usuario sepa la diferencia entre un cese controlado y un crash), está prácticamente prohibido por Apple. – Andrew

6

Para aclarar cualquier confusión, acabo de ejecutar algunas pruebas, en un dispositivo con iOS 4.3.2:

Al iniciar la aplicación, la aplicación se envía: aplicación: didFinishLaunchingWithOptions: applicationDidBecomeActive:

Cuando se pulsa el botón de inicio, su aplicación es enviado:

applicationWillResignActive: 
applicationDidEnterBackground: 

Cuando relanzar esa misma aplicación más tarde, se envía su aplicación:

applicationWillEnterForeground: 
applicationDidBecomeActive: 

Cuando presiona el botón de bloqueo, su aplicación es enviado:

applicationWillResignActive: 

Al desbloquear, su aplicación es enviado:

applicationDidBecomeActive: 

Cuando se recibe una llamada, la aplicación se envía a:

applicationWillResignActive: 

Si Don no responda esa llamada, se envía su aplicación a:

applicationDidBecomeActive: 

Cuando se recibe una llamada, la aplicación se envía a:

applicationWillResignActive: 

Si contesta la llamada, su aplicación es enviado a:

applicationDidEnterBackground: 

Al colgar esa llamada, su aplicación es enviado :

applicationWillEnterForeground: 
applicationDidBecomeActive: 

yo diría que cuando se obtiene una applicationWillResignActive: a continuación, debe cerrar la sesión, de autenticarse, bloquear o descartar su información confidencial, y cuando llegue una applicationDidBecomeActive: continuación, volver a autenticarse . Ese es llamado en el lanzamiento, vuelve del fondo y desbloquea el dispositivo.

Además, estos dos métodos pueden ser interesante para usted, pero que en realidad no ayudará al caso específico que le interesa:

- (void)applicationProtectedDataWillBecomeUnavailable:(UIApplication *)application 

- (void)applicationProtectedDataDidBecomeAvailable:(UIApplication *)application 
+0

Yo también recomendaría no salir de la aplicación cuando el dispositivo se bloquee. Este no es un comportamiento amigable para el usuario. – mahboudz

+1

Gracias, como un programador bastante nuevo, todavía me estoy acostumbrando a equilibrar la utilidad con la facilidad de uso. Esto ayuda mucho! – Andrew

Cuestiones relacionadas