web-dev-qa-db-fra.com

Gestion des notifications push lorsque l'application est fermée

Lorsque mon application n'est pas en cours d'exécution et qu'elle reçoit une notification push, si je clique sur cette notification, l'application est lancée - mais elle ne demande pas à l'utilisateur de configurer Alert-View que j'ai configuré, lui demandant s'il souhaite afficher la Le contenu de la notification ou non. Il se lance et reste là.

Les notifications push fonctionnent parfaitement lorsque l'application est en cours d'exécution (en tant qu'application active ou en arrière-plan), mais rien ne fonctionne correctement lorsque l'application n'est pas en cours d'exécution.

J'ai essayé de me déconnecter de la commande launchOptions NSDictionary dans l'application: didFinishLaunchingWithOptions: pour voir le chargement de son chargement, mais il apparaît sous la forme "(null)". Donc, il ne contient fondamentalement rien - ce qui n'a pas de sens, car ne devrait-il pas contenir la charge de la Notification?

Quelqu'un a une idée sur la façon de faire fonctionner les notifications push lorsqu'elles arrivent alors que l'application n'était PAS en cours d'exécution?

Je veux dire comment gérer les notifications Push lorsque l'application n'est pas en cours d'exécution. Que se passe-t-il si, si vous recevez de nombreuses notifications et que vous n'avez pas ouvert l'application, vous n'avez pas non plus appuyé sur le panneau de notification du système. Comment préservez-vous ces demandes pour une récupération ultérieure?.

31
Hasmukh D.

Selon votre question, il n'y a aucun moyen de conserver toutes les notifications lorsque vous ouvrez l'application, il est préférable d'appeler une API pour obtenir toutes les notifications selon l'horodatage de votre serveur/serveur principal.

10
Vizllx

1)lorsque l'application est exécutée en arrière-plan et lorsque l'application est exécutée au premier plan} _application:didReceiveRemoteNotification: la méthode sera appelée comme ci-dessous.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if (application.applicationState == UIApplicationStateInactive)
    {
        // opened from a Push notification when the app was on background
        NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]);
    }
    else if(application.applicationState == UIApplicationStateActive)
    {
        // a Push notification when the app is running. So that you can display an alert and Push in any view
        NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]);
    }
}

_ {2) _ {lorsque l'application n'est pas lancée (close)} alors la méthode application:didFinishedLaunchingWithOptions sera appelée.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions != nil)
    {
        // opened from a Push notification when the app is closed
        NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (userInfo != nil)
        {
             NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]);
        }
    }
    else
    {
        // opened app without a Push notification.
    }
}

(3) Il n'y a aucun moyen de supprimer une notification spécifique à partir de. Pour supprimer toutes les notifications de votre application afin qu'elles ne s'affichent pas dans le Centre de notifications lorsque l'utilisateur ouvre l'application depuis l'une d'entre elles, vous devez définir le badge de l'application sur 0.

34
Rahul Patel

L'application ne traite pas la notification Push en arrière-plan. En réalité, le système d'exploitation la réveille lorsque vous appuyez sur la notification. Vous pouvez saisir ce moment de la manière suivante:

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

        if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
      // Your app has been awoken by a notification...
        }
   }

Vous pouvez récupérer les notifications envoyées à votre application à l'aide de la méthode getDeliveredNotifications(completionHandler:) . Notez que cela ne renvoie que les notifications actuellement affichées dans le Centre de notification et non celles qui ont été effacées manuellement par l'utilisateur.

UNUserNotificationCenter.current().getDeliveredNotifications { notifications in

    // notifications: An array of UNNotification objects representing the local
    // and remote notifications of your app that have been delivered and are still
    // visible in Notification Center. If none of your app’s notifications are
    // visible in Notification Center, the array is empty.

    // As said in the documentation, this closure may be executed in a background
    // thread, so if you want to update your UI you'll need to do the following:
    DispatchQueue.main.sync { /* or .async {} */ 
        // update UI
    }
}
4
nyg

Il n'y a aucun moyen de gérer cela à la fin de l'application . Vous devez conserver le nombre de badges non lus sur le serveur . Lorsque l'application est supprimée, la valeur du badge est mise à jour depuis le serveur.

Ainsi, lorsque vous ouvrez l'application à tout moment, vous devez appeler un service Web pour obtenir les notifications requises et mettre à jour les badges de la barre de tabulation (le cas échéant).

3
neo D1

Vous pouvez afficher l'alerte après avoir lancé une application précédemment terminée à partir d'une notification comme celle-ci:

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) { // display the alert }

0
Bogdan Razvan