Question

Je l'ai mis en œuvre UILocalNotifications dans deux applications différentes maintenant. On utilise les services de localisation, qui signifie que si elle se fait tuer, il (généralement) très redémarrés (il est donc pas aussi grand d'un problème). Cependant, dans une autre application, je planifie un UILocalNotification en fonction du temps. Dans ce cas, je vais avoir un problème majeur.

Si je planifie une notification, l'application est tué, poussé hors de la mémoire, le téléphone est éteint puis à nouveau, je ne peux pas voir les anciennes notifications « automatiquement » lors de l'ouverture de l'application.

Voici le flux de travail que les travaux (application en cours d'exécution en arrière-plan):

  1. Lancer l'application; app notification des horaires; app close; l'application est maintenant en cours d'exécution en arrière-plan
  2. Recevoir une notification locale; ignorer au début; tirer dans le menu déroulant du haut (barre d'état); appuyez sur la notification pour lancer l'application
  3. Résultats:. L'application affiche correctement les informations contenues dans la notification

Voici le flux de travail qui Finalité pas travail (application ne fonctionne plus en arrière-plan):

  1. Lancer l'application; app notification des horaires; app close; l'application est maintenant en cours d'exécution en arrière-plan
  2. manuellement application kill (pour simuler ma situation)
  3. Toujours recevoir une notification locale; ignorer au début; tirer dans le menu déroulant du haut (barre d'état); appuyez sur la notification pour lancer l'application
  4. Résultats: Les lancements app, mais la méthode de didReceiveLocalNotification n'est pas appelé. L'utilisateur pense que l'application ne fonctionne pas.
    Note :. Je ne peux même pas forcer manuellement les informations, car si elles ont reçu plus d'une notification, je ne peux pas dire que l'on ils ont touché à savoir lequel afficher

Y at-il moyen de savoir quelle notification ils ont touché lorsque l'application est pas en cours d'exécution en arrière-plan (et donc ne fonctionne pas le didReceiveLocalNotification method)?

Était-ce utile?

La solution

Dans le 2ème cas, l'utilisateur a quitter (ou tué) l'application, de sorte que lorsque l'utilisateur touche la notification de votre application sera lancée.

Cela peut être manipulé dans le procédé mentionné ci-dessous de appDelegate

didFinishLaunchingWithOptions est invoquée lorsqu'une application est lancée, donc juste vérifier si l'application a été effectivement lancée parce que l'utilisateur a touché la notification (le code ci-dessous):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if (notification) 
    {
        NSLog(@"notification caused app to launch, alert body = %@", notification.alertBody);
        // do what ever action you want to do
        // you could just copy the code from "didReceiveLocalNotification" and paste it here
    }

    return YES;
}

Autres conseils

@Ranjit, cela fonctionnera lorsque l'utilisateur appuyez sur l'icône d'application, car est une méthode déléguée de l'application. Être appelé à chaque fois que l'application a terminé son lancement. (Parce que mon commentaire Can not manque de réputation ...;))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top