Notification reçue
pistonman33
Membre
Bonjour,
Je voulais savoir comment faire pour détecter si le device a reçu une notification sans que l'utilisateur n'ait cliqué dessus et sans que l'application soit active? la notification se trouve juste dans le centre de notification.
Il me semble que l'application What'sApp fait cela pour son accusé de réception.
Bien à vous.
-Michaël
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Hello,
Il y a plusieurs types de notifications:
- Notifications Push
- Locale
- Remote
En fonction de celle que tu veux, et de l'état de ton app il y a différentes possibilités.
Pour un push (avant iOS8), une notification reçue passe par:
- didFinishLaunchingWithOptions
- didReceiveRemoteNotification
Avec iOS8:
- didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler
Je t'invite à faire quelques tests pour répondre à ta question.
Sans faire de tests je dirais que:
- Savoir si on a reçu une notif, app killé, et sans que l'user ai cliqué dessus est impossible (je crois).
- Peut etre que What's app envoie une notif silencieuse pour programmé une locale notif.
Dans mon cas se sont des notifications push. J'ai déjà géré les différents cas d'application active / background et non lancée toujours avec l'intervention de l'utilisateur.
Mais je n'arrive pas à comprendre comment fait l'application What'sApp pour son accusé de réception.
Iphone1 envoie un message à iphone2, celui-ci n'a pas l'application lancée, il reçoit une notification (push je suppose) et iphone1 a un petit V pour dire que l'iphone 2 l'a reçu mais pas nécessairement lu car pas cliqué dessus!
Si quelqu'un pouvait m'éclairer sur ce mystère?
Bien à vous.
Est tu sur que c'est un push et pas une remote qui programme une locale?
Pour être sur, désactive la mise à jour en background pour cette app.
Ils gèrent ca dans leur backend et ca envoie une push non ?
Oui mais si l'app est killée et que l'user ne clique pas dessus c'est pas sur que ça déclenche l'app.
Pourquoi voudrais tu que ca déclenche l'app ?
Merci Niclou, c'est bien ça sur what'sApp si tu désactive l'actualisation en Background l'accusé de réception ne se met plus tant que l'utilisateur n'a pas cliqué sur la notification ou rentré dans l'application. Ce que je trouvais plus logique mais bon.
Revenons à mon application, j'ai mis en place le background Mode pour les remotes notifications et rajouter la fonction
Et j'ai rajouté le paramètre suivant: 'content-available' =>'1' dans mes notifications via mon serveur APNS et cela fonctionne très bien!
Par contre je suppose que je suis obligé de déplacer mon code se trouvant dans didReceiveRemoteNotification et didFinishLaunchingWithOptions vers cette nouvelle fonction?
Quelles sont les avantages d'une notification push qui ne se trouve pas dans une notification remote?
Bien à vous
La solution c'est :
- iPhone1 envoie un message à iPhone2. Le serveur envoie donc une notification à iPhone2 qui voit l'alerte
- Si iPhone2 ouvre l'appli suite à la notification, elle note en local que la notif a été lue. Et éventuellement même elle envoie une requête au WebService pour indiquer que le message a été lu
- Si iPhone2 n'ouvre pas l'appli bah le message n'est pas lu.
C'est exactement comme pour ton mail. Tant que tu n'as pas ouvert le message, il est marqué "non lu" et le badge sur l'icône est bien là . Quand tu ouvres l'application mail et va lire le message, ça indique au serveur de mail que le mail est lu et ça enlève le badge. Si tu ignores la notif mais que tu ouvres l'application plus tard (et pas suite à la notification) pas de problème, l'application Mail demande au WebService s'il y a des nouveaux messages non lus et les affiche dans l'appli. Le server est au courant de si le mail est lu ou pas tout simplement parce que l'appli a appelé un WebService "markAsRead" si l'utilisateur a déjà ouvert/lu le message, et n'a pas appelé ce WebService pour mettre à jour le serveur sinon, s'il n'a jamais ouvert le message.