Comment répondre à la vue de notification push si l'application est déjà en cours d'exécution en arrière-plan

J'ai quelque chose d'assez simple que je veux faire. J'attache une donnée personnalisée à certaines notifications push que je gère dans

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

Je cherche le UIApplicationLaunchOptionsRemotenotificationkey et hey presto il est là.

Cette méthode est appelée, si mon application est lancée pour la première fois. Comment puis-je lire cette même clé si mon application s'exécute déjà en arrière-plan lorsque la notification arrive et que l'utilisateur appuie sur le bouton' View ' sur le notification? Je veux les envoyer à un contrôleur de vue particulier avec ces données ouvertes, comme je le fais si l'application est lancée pour la première fois à partir de la notification.

45
demandé sur rustyshelf 2011-02-24 04:45:11

2 réponses

Consultez application:didReceiveRemoteNotification:fetchCompletionHandler: dans iOS 7 et versions ultérieures.


La méthode application:didReceiveRemoteNotification: est appelée si votre application est en cours d'exécution au premier plan. Il est également appelé si votre application s'exécute en arrière-plan et que l'utilisateur s'engage avec votre notification push (rendant ainsi votre application active).

Donc, la vraie question Est de savoir comment déterminer si l'application était au premier plan ou si elle a été rendue active par l'utilisateur s'engageant avec votre notification push.

, Il ressemble à cette réponse à la question didReceiveRemoteNotification quand en arrière-plan a la clé:

Vous pouvez dire si votre application a été mise au premier plan ou non dans application:didReceiveRemoteNotification: en utilisant ce bit de code:

- (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
répondu gerry3 2017-05-23 10:30:45

Pour détecter si l'application a été activée par notication à distance, essayez ceci:

- (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
répondu user523234 2014-07-31 15:47:55