[iphone] didReceiveRemoteNotification cuando en el fondo


2 Answers

Pase content-available = 1 con su carga e invocará a didReceiveRemoteNotification incluso en segundo plano. p.ej

{
    "alert" : "",
    "badge" : "0",
    "content-available" : "1",
    "sound" : ""
}
Question

Este tipo de pregunta ha sido formulada varias veces, pero tengo una situación específica en curso.

Cuando mi aplicación está activa y recibo un mensaje PUSH, puedo analizar las cargas útiles personalizadas y demás.

Sin embargo, cuando mi aplicación está en segundo plano y llega el PUSH, el usuario tiene que hacer clic en el botón 'Ver / Abrir' para obtener la didReceiveRemoteNotification llamada a la didFinishLaunchingWithOptions didReceiveRemoteNotification y didFinishLaunchingWithOptions se llama a la didFinishLaunchingWithOptions la didFinishLaunchingWithOptions .

Necesito que mi aplicación decida si deben avisarle al usuario con un UIAlert cuando está en segundo plano o suprimir el mensaje push en función de algunas configuraciones locales.

Cualquier ayuda sería apreciada,




Una cosa a tener en cuenta es que cuando su mensaje llegue al iPhone del usuario y haga clic en "cancelar", excepto el número de la insignia del icono (el sistema operativo se ocupará de ellos), no habría forma de que su la aplicación de fondo para saber sobre este evento push y tomar cualquier acción adicional.




A partir del reciente iOS, creo que 8, si tienes notificaciones remotas habilitadas como modo de fondo, un truco es rastrear si estás ingresando al primer plano como una bandera.

@interface AppDelegate ()

@property (assign, atomic, getter=isEnteringForeground) BOOL enteringForeground;

@end

- (void) applicationWillEnterForeground: (UIApplication *) application
{
    self.enteringForeground = YES;
}

- (void) applicationDidBecomeActive: (UIApplication *) application
{
    self.enteringForeground = NO;
}

- (void) application: (UIApplication *) application didReceiveRemoteNotification: (NSDictionary *) userInfo fetchCompletionHandler: (void (^) (UIBackgroundFetchResult)) completionHandler
{
    const BOOL launchedFromBackground = !(application.applicationState == UIApplicationStateActive);
    const BOOL enteringForeground = self.enteringForeground;

    if (launchedFromBackground && enteringForeground) {
        // The user clicked a push while the app was in the BG
    }
}





Related