Comment Facebook Messenger supprime-t-il les notifications push de l'écran de locking si vous les avez lues sur le bureau?

Lorsque je reçois un message sur Facebook, je reçois une notification push sur un écran de locking (iOS). Ensuite, j'ai lu ce message sur le bureau. Juste après, cette notification push disparaît sans aucune interaction avec le téléphone. Comment puis-je implémenter moi-même la même chose pour supprimer les notifications obsolètes?

La deuxième utilisation pourrait être l'assemblage de notifications set. Par exemple Instagram vous envoie une poussée quand quelqu'un a aimé votre photo. Après 20 j'aime votre écran de notifications est ruiné et illisible. Mais en utilisant le même principe que Facebook, il semble être possible de supprimer la notification précédente du même genre et créer de nouvelles avec le countur augmenté. Non, "l'user A aimait la photo X, l'user B aimait la photo Y etc", mais "20 users ont aimé la photo Z" à la place.

J'ai vu quelques marches sur des sujets similaires ici, mais toujours pas de réponse jusqu'à présent. Merci!

Voir les améliorations Multitasking et les notifications push silencieuses en particulier. En utilisant le button silencieux, vous pouvez avertir votre application qu'un nouveau contenu est disponible et également download ce contenu et / ou définir le numéro de badge par exemple sans afficher la notification dans le "Centre de notifications". Vous devrez définir UIBackgroundModes avec la valeur de notification à distance pour que cela fonctionne.

Vous pouvez envoyer un push silencieux si l'user a vu le contenu sur une autre plate-forme et effacer le numéro de badge sur votre application iOS.

Un moyen simple d'get cet effet est d'envoyer une notification push normale à votre appareil avec une charge utile contenant uniquement un nombre de badges de 0.

Dans l'exemple de Facebook, ils ont clairement assez de puissance de server pour détecter simplement quand vous avez lu le message sur votre bureau et envoyer une poussée à vos appareils pour s'assurer que la notification n'est plus là.

Je ne dis pas que c'est comme ça que FB le fait mais c'est un path plus simple qui peut ne pas correspondre à vos besoins. Gardez à l'esprit que les tâches en arrière-plan consumnt considérablement la batterie de votre user et doivent être évitées autant que possible.

Il s'agit d'une nouvelle fonctionnalité sur iOS 7 appelée Notification Push silencieuse, une fonctionnalité multitâche.

Ce dont tu auras besoin:

1 – Inscription aux notifications à distance dans didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeNewsstandContentAvailability| UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } 

2 – Implémenter la méthode suivante dans ApplicationDelegate:

  - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { handler(UIBackgroundFetchResultNewData); // Possibl Results: // typedef enum { // UIBackgroundFetchResultNewData, //Download success with new data // UIBackgroundFetchResultNoData, //No data to download // UIBackgroundFetchResultFailed //Downlod Failed // } UIBackgroundFetchResult; } 

3 – Définir UIBackgroundModes dans Application info.plist:

 > <key>UIBackgroundModes</key> <array> > <ssortingng>remote-notification</ssortingng> </array> 

Attention: je n'ai pas essayé, c'est juste une idée!

Dans iOS 7, vous pouvez essayer d'envoyer une notification «contenu disponible» silencieuse à l'user. Cela réveillerait l'application en arrière-plan et vous permettrait d'exécuter du code. En arrière-plan, vous pourriez alors faire

 [[UIApplication sharedApplication] setApplicationBadgeNumber:0]; [[UIApplication sharedApplication] setApplicationBadgeNumber:newBadgeNumber]; 

cela devrait effacer toutes les notifications qui se trouvent dans le centre de notification. Vous pourriez ensuite envoyer une notification locale avec datatables qui sont apparues dans votre dictionary userInfo, et il semblerait que les anciennes soient remplacées par la nouvelle!

Encore une fois, juste une idée …