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

¿Fue útil?

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()
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top