Al recibir una UILocalNotification
Determinar si UILocalNotification disparó con la aplicación en primer plano o de fondo
- El método
application:DidReceiveLocalNotification
se llama cuando la aplicación está en primer plano. - Cuando la aplicación está en segundo plano, abre la aplicación y luego llama al
application:DidReceiveLocalNotification
.
¿Cómo puedo determinar cuál de estos escenarios está teniendo lugar? Me gustaría tratarlos de manera diferente.
Si la aplicación estaba en segundo plano, el usuario indicó que deseaba ver el evento. Entonces, en application:DidReceiveLocalNotification
no quiero volver a preguntar, solo quiero llevarlos al evento.
Pero si la aplicación está en primer plano cuando se activa la notificación y llama al application:DidReceiveLocalNotification
, quiero preguntarle al usuario si desea ver el evento.
En esencia Tendría:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
if (appLauncedFromBackground)
// go to event
else
// ask if user wants to view event
}
he pensado en escribir un valor booleano a una NSUserDefault dentro applicationWillEnterForeground:application
y luego leer y reponer dentro application:DidReceiveLocalNotification
. Pero pensé que si había una forma de probarla, esa sería una ruta mucho mejor.
Gracias, Mark
EDITAR * ** * ** * ** * ** * ** * ** * ** * ** * ** * **
Gracias xuzhe, pero eso no va a funcionar en esta situación. Aquí hay un poco más de detalle que puede explicar por qué no funciona y tal vez ayudar a alguien a responder esto por mí:
El UILocalNotification
que estoy configurando aquí es un evento como un evento de calendario que está programado para disparar a un usuario seleccionado Por lo tanto, al programar la notificación, no tendré idea de qué hará el usuario cuando se active la notificación. Estoy utilizando el userInfo de la notificación para almacenar datos sobre el evento que está programado pero establecer un valor como inBackground como se sugiere no funcionará.
Sé que será una de las dos situaciones si el usuario decide que quiere "ver" el evento. (Todo esto supondrá que la aplicación está en segundo plano o en primer plano y NO se cierra).
1 - Si se dispara mientras que la aplicación no se está utilizando & & la aplicación está en el fondo y no dejar de fumar, el IOS notificará al usuario de que ha ocurrido un evento y proporcionar una opción de ir a la aplicación responsable (que es mío en este caso). En ese momento, suponiendo que el usuario diga "sí, llévame a esta aplicación genial", se abrirá la aplicación desde un segundo plano y se llamará a la aplicación: DidReceiveLocalNotification donde puedo obtener toda la notificación userInfo.
2 - El usuario, por casualidad, está en mi aplicación cuando ocurre el evento programado. En ese punto, se vuelve a llamar a la aplicación: método DidReceiveLocalNotification, donde puedo obtener toda la notificación userInfo.
Pero es en este punto que me gustaría saber cuál de los dos escenarios acaba de tener lugar 1 ó 2.
Esperanza este detalle adicional sobre mi uso de la UILocalNotification
ayudará a la hora de responder a esta pregunta. Gracias de antemano - marca
FIN EDITAR * ** * ** * ** * ** * ** * ** * ** * ** * ***
He editado la pregunta para ayudar a explicar mejor. Y gracias, @xuzhe, pero esto no funcionará para mí. No estoy activando LocalNotification, es una UILocalNotification que se programó para que se active en alguna fecha. Por lo tanto, no puedo determinar qué hará el usuario en ese momento. –
Editó la respuesta nuevamente. Puede verificar fácilmente el estado de su Aplicación utilizando la propiedad UIApplicationState. – xuzhe
Muy, muy agradable. Solucionado un problema que tuve durante bastante tiempo. –