easyapns notifications personnelles à  un utilisateur

Salut à  tous,



j'ai une appli qui nécessite une connexion de l'utilisateur ( à  l'ouverture de l'appli => login/mdp ).



Je voudrai ajouter les notifications push à  mon appli dans le but d'envoyer des notifications personnelles à  chaque utilisateur (suivant les évolutions de son compte). Seulement je rencontre des problèmes dans la conception du service.



Je veux utiliser easyapns qui me semble pratique.



Cependant, mon probème est que l'enregistrement du device se passe à  l'ouverture (application:(application:didFinishLaunchingWithOptions:), mais à  ce moment la l'utilisateur peut ne pas être connecté à  son compte. Deux problèmes :



1 - Au niveau de mon provider, quand je vais créer une notification, je ne pourrai pas savoir à  quel deviceToken correspond un utilisateur.



2 - si l'utilisateur se déconnecte de son compte (et/ou qu'un autre utilisateur se connecte sur le même iPhone directement après la déconnexion du précédent) comment faire pour ne plus envoyer les notifications de l'ancien utilisateur et prévenir le provider que c'est le nouvel utilisateur qui utilise ce deviceToken?





merci

Réponses

  • CéroceCéroce Membre, Modérateur
    Un deviceToken identifie un terminal. Point.

    Si c'est Bernadette qui s'est connectée mais que c'est Gérard qui utilise l'iPhone au quotidien, Gérard verra donc les notifications de Bernadette.
  • oui, mais si Gérard qui a pris l'iPhone de Bernadette, qui s'est déconnecté de l'appli, puis reconnecté avec son compte (Gérard) immédiatement, il recevra toujours les notifications de Bernadettes. ca pose problème
  • Ben normalement le DeviceToken identifie le terminal ça on est d'accord par contre c'est le développeur qui définie si le téléphone est a Gérard ou a Bernadette il suffirait surement juste d'ajouter une condition a l'envoie des push pour voir a qui appartient ce téléphone a ce moment la pour voir si oui ou non on envoie le message et si on devrait pas en envoyer un autre après pour moi ça se fera quasi intégralement dans le back office de l'application.
  • justement c'est ça le problème, pour passer la notif, il faut définir le deviceToken, hors ce n'est peut être plus le même compte qui est actif sur l'application, et donc celui qui est connecté au moment ou la notif part peu recevoir des infos d'un autre utilisateur
  • AliGatorAliGator Membre, Modérateur
    Bah c'est à  l'envoi qu'il faut conditionner alors.

    Tu enverras toujours la notif au même téléphone, pas à  un téléphone différent, donc tu utiliseras le même deviceToken dans les deux cas, que ce soit pour envoyer les notifications de Benadette à  Bernadette quand c'est elle qui s'est connectée pour la dernière fois sur cet iPhone, et pour envoyer les notifications de Gérard à  l'iphone quand c'est Gérard qui s'est connecté en dernier.



    C'est au niveau du serveur qu'il faut regarder dans ta base quel utilisateur a été associé à  ton deviceToken la dernière fois, et n'envoyer la notification à  l'iPhone que si cette notification est destinée à  l'utilisateur en question, par exemple.



    Donc à  chaque fois dans ton application qu'un utilisateur se connecte, tu dois envoyer une requête à  ton serveur déjà  pour effectuer la connexion (vérifier le mot de passe, connecter l'utilisateur à  son compte, retourner les infos de compte, etc), bah à  ce moment là  tu en profites pour associer dans ta base MySQL sur ton serveur ledit utilisateur qui vient de se connecter avec le deviceToken dudit device (quitte à  envoyer ce deviceToken dans ta requête de login si besoin). Comme ça à  tout moment côté serveur tu peux savoir dans ta base MySQL quel utilisateur s'est connecté en dernier avec tel téléphone.
  • C'est tellement beau les explications quand on prend le temps de les donner image/wink.png' class='bbc_emoticon' alt=';)' /> C'est en gros ce que je voulais dire entre deux coups de fils du patron. Enfin ça me parait être loin d'être infaisable.
  • CéroceCéroce Membre, Modérateur
    Tout le monde s'est compris. Le problème est insoluble: tant que Bernadette ne se sera pas connectée avec un autre terminal, Gérard recevra les notifications de Bernadette.



    D'ailleurs, votre idée n'est pas si bonne que ça, parce que si Bernadette se connecte avec le même terminal, alors le tokenID sera associé à  Bernadette, et plus avec Gérard, qui ne recevra alors plus les notifications. On aura donc le problème inverse. Cependant, cette solution est meilleure en terme de confidentialité.
  • 'Céroce' a écrit:


    Tout le monde s'est compris. Le problème est insoluble: tant que Bernadette ne se sera pas connectée avec un autre terminal, Gérard recevra les notifications de Bernadette.



    D'ailleurs, votre idée n'est pas si bonne que ça, parce que si Bernadette se connecte avec le même terminal, alors le tokenID sera associé à  Bernadette, et plus avec Gérard, qui ne recevra alors plus les notifications. On aura donc le problème inverse. Cependant, cette solution est meilleure en terme de confidentialité.




    Oui, mais c'est ce qui est recherché, si Bernadette se connecte avec l'iPhone de Gérard, Gérard ne sera donc plus connecté et ne doit donc plus recevoir les notifications.



    De toute façon, ça ne reste pas simple image/smile.png' class='bbc_emoticon' alt=':)' />
  • Bon, en fait je pense rajouter dans les tables apns_devices et apns_messages (pour ceux qui ont déjà  utilisé easyapns) une nouvelle entrée "user_id". Donc à  chaque fois qu'un utilisateur se connectera je mettrai son identifiant utilisateur dans cette entrée dans apns_device. Et lorsque j'ajouterai un message je préciserait également l'identifiant de l'utilisateur.



    Donc avant d'envoyer une notif, je vérifirai que l'identifiant de l'utilisateur précisé dans le message correspond bien à  l'identifiant actif sur le device avec le device_token souhaité.



    Je m'y perd un peu...image/smile.png' class='bbc_emoticon' alt=':)' />
  • AliGatorAliGator Membre, Modérateur
    Moi de mon côté j'ai fait l'inverse, dans ma table user (qui contient le userID, le login, le md5 du mdp, le nom/prénom, etc, etc...) j'ai un champ "deviceID" qui correspond à  la primary key des tables des easyapns.

    Quand l'utilisateur se connecte, je remplis ce champ. Quand il se déconnecte, je vide ce champ.



    Quand quelqu'un commente un post d'un utilisateur, je veux envoyer une notification à  son iPhone si l'utilisateur est connecté. Donc je récupère le deviceID associé à  l'utilisateur, ce qui me permet d'accéder à  la bonne entrée dans apns_devices et je peux envoyer la notif comme d'hab. Si l'utilisateur s'est déconnecté, il n'y a plus de deviceID en face de son nom dans ma table user, donc j'envoie pas de notif.
  • En effet, je vais réfléchir de cette façon ! merci de m'avoir mis sur une piste
Connectez-vous ou Inscrivez-vous pour répondre.