iOS - ¿Cómo puedo saber si una notificación local hizo que mi aplicación entrara en primer plano?
-
21-12-2019 - |
Pregunta
Tengo código dentro de mi aplicación del delegado
application:didReceiveLocalNotification:
Método para mostrar una uialertview para esa notificación local, siempre que mi aplicación esté en primer plano.
Si mi aplicación está dentro del fondo cuando llega la notificación local, el usuario se presenta con la notificación y puede iniciar la aplicación seleccionándola. En este caso, mi aplicación llega al primer plano mi aplicación del delegado
applicationWillEnterForeground:
se llama. Posteriormente, aunque mi método didreceivelocalnotificación se llama de nuevo, lo que hace que aparezca una uialertview . Pero realmente el usuario ya ha tenido esa alerta mientras la aplicación estaba en el fondo, por lo que me gustaría volver a mostrar esta alerta.
Puedo ver que si se inicia una aplicación debido a una notificación local, entonces dentro de la
application:didFinishLaunchingWithOptions:
Método Puede inspeccionar las opciones de inicio para una clave
UIApplicationLaunchOptionsLocalNotificationKey
Para saber si una notificación local hizo que se lanzara o no su aplicación, pero parece que no existe tal método para encontrarlo cuando acaba de regresar al primer plano por el usuario que interactúa con una notificación local.
verificando si se ha llamado recientemente o no mi método strong> fuesegues fueseforiofurioforgefornioforgefordoergfordoergues , o quizás algo similar a las respuestas proporcionadas en esta pregunta "ios ¿Cómo juzgar la aplicación está ejecutando primer plano o fondo? me permitirá Compruebe el
[UIApplication sharedApplication].applicationState
desde dentro de mi
application:didReceiveLocalNotification:
método. Esperemos que se reciba lo suficientemente temprano como para que mi ApplicationState todavía no se establecerá en uiaplicationStateactive en este caso.
¿O hay mejores soluciones para esto?
vítores
Solución
En AppDelegate, puede verificar el estado de aplicación cuando la aplicación recibe la notificación
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIApplicationState state = [application applicationState];
// check state here
if(state ==UIApplicationStateBackground ){
}
}
Otros consejos
Solo quería decir que simplemente noté que la respuesta sugerida de la comprobación de la demostración de aplicaciones tiene un poco de un efecto secundario malo que evitará que algo suceda, mientras que el centro de notificación está abierto y en la parte superior de su aplicación. Personalmente, no quería que esto detuviera mis vistas de alerta por ser creadas, así que me acompaño a una alternativa.
Básicamente, simplemente registre la fecha en que mi aplicación fue lanzada por última vez o en primer plano, y luego, siempre que lo prueben las fechas de las notificaciones, comparo su fuego con la fecha de AppraCstard y solo muestre la notificación si se ha producido desde que mi aplicación ha estado en primer plano. Esto corrige el problema con abrir la aplicación de una notificación, pero también permite que las alertas muestren cuando la aplicación no está activa (es decir, detrás del centro de notificación).
Aún no he experimentado ningún problema con este enfoque, aunque, sin embargo, solo he estado probando hoy, por lo que no se ha probado mucho.
Pensé que lo grabaría a menos que alguien más tuviera requisitos similares.
SWIFT 4 SOLUCIÓN:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
{
if UIApplication.shared.applicationState == .background {
//enter code here
}
completionHandler()
}