Cómo responder a la vista de notificaciones push si la aplicación ya se está ejecutando en segundo plano


Tengo algo bastante simple que quiero hacer. Adjunto un dato personalizado a algunas notificaciones push que manejo en

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Busco el UIApplicationLaunchOptionsRemoteNotificationKey y hey presto ahí está.

Ese método solo se llama si mi aplicación se inicia por primera vez. ¿Cómo leo esa misma tecla si mi aplicación ya se está ejecutando en segundo plano cuando llega la notificación y el usuario presiona el botón' Ver ' en el notificación? Quiero enviarlos a un controlador de vista en particular con esos datos abiertos en él, lo mismo que hago si la aplicación se está iniciando por primera vez desde la notificación.

Author: rustyshelf, 2011-02-24

2 answers

Echa un vistazo a application:didReceiveRemoteNotification:fetchCompletionHandler: en iOS 7 y versiones posteriores.


Se llama al método application:didReceiveRemoteNotification: si la aplicación se está ejecutando en primer plano. También se llama si la aplicación se está ejecutando en segundo plano y el usuario interactúa con la notificación push (lo que activa la aplicación).

Por lo tanto, la verdadera pregunta es cómo determinar si la aplicación estaba en primer plano o si se activó por el usuario que interactúa con su notificación push.

Parece esta respuesta a la pregunta didReceiveRemoteNotification cuando en segundo plano tiene la clave:

Puedes saber si tu app acaba de aparecer en primer plano o no en application:didReceiveRemoteNotification: usando este bit de código:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if ( application.applicationState == UIApplicationStateActive )
        // app was already in the foreground
    else
        // app was just brought from background to foreground
    ...
}
 108
Author: gerry3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:30:45

Para detectar si la aplicación se activó mediante aviso remoto, pruebe esto:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo == NULL)
    {
        NSLog(@"didFinishLaunchingWithOptions user startup userinfo: %@", userInfo);
    }
    else
    {
        NSLog(@"didFinishLaunchingWithOptions notification startup userinfo: %@", userInfo);
    }
}
 -3
Author: user523234,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-31 15:47:55