Notification reçue

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


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 



    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{

    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

  • AliGatorAliGator Membre, Modérateur
    Il ne faut pas que tu cherches ça du côté des notifications, genre regarder si on a une notif dans le centre de notifs. C'est pas comme ça qu'on fait (de toute façon on peut pas).

    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.
Connectez-vous ou Inscrivez-vous pour répondre.