web-dev-qa-db-fra.com

Notifications push ou Socket.io?, Ou les deux?

Je développe un système de chat pour le Web, Android et iOS. En faisant mes recherches, j'ai trouvé des différences sur la façon dont GCM et APNS traitent les notifications push.

Si j'envoie une notification push à un appareil Android via le GCM, l'appareil peut décider s'il en informe l'utilisateur ou s'il n'est pas nécessaire, il n'en informe pas l'utilisateur. pourrait être juste une mise à jour des données dont l'utilisateur n'a pas besoin d'être averti. En revanche, si j'envoie une notification push à un appareil iOS via APNS, l'appareil n'est pas en mesure de décider d'afficher ou non la notification. , la notification doit être affichée. En outre, lorsqu'un appareil iOS reçoit la notification, les données de notification doivent contenir la chaîne qui sera affichée à l'utilisateur. Sur Android, l'appareil peut générer cette chaîne.

Donc, je voulais créer un système qui fonctionne de la même manière pour iOS et Android, ainsi que pour le site Web (basé sur l'API). C'est quand j'ai trouvé Socket.io. Socket.io me donne la liberté d'envoyer des données à l'appareil (que ce soit iOS ou Android) afin que l'appareil décide d'afficher ou non les modifications apportées (peut être une mise à jour d'un utilisateur, un nouveau message, une invitation , ou bien d'autres "événements"). Mais, en faisant mes recherches, j'ai trouvé des inconvénients à utiliser Socket.io. L'appareil doit être connecté à la prise pour que les informations circulent entre le client et le serveur, mais un smartphone, dans le monde réel, se connecte et se déconnecte tout le temps à différents réseaux, et cela rompt la connexion de la prise. De plus, en ayant la connexion ouverte, en arrière-plan, il y a un ping-pong entre le serveur et le client pour vérifier que la connexion est toujours ouverte, et cela finit par consommer des mégas (dans mon pays, nous payons pour chaque méga que nous utilisons , nous n'avons pas encore de forfait) et la durée de vie des batteries. Je ne sais pas avec certitude si cette consommation est importante ou non.

Côté web, il doit fonctionner avec Socket.io, donc ce n'est pas du tout un problème.

Enfin, connaissant les avantages et les inconvénients des deux alternatives, j'ai trouvé que je peux mélanger les deux options et que cela pourrait être ma meilleure option. Par exemple, lorsque l'application est ouverte, elle utilise Socket.io et lorsqu'elle est fermée, utilisez APNS ou GCM (selon le système d'exploitation de l'appareil). Mais, est-ce une bonne pratique? Ou sera-t-il préférable de ne coller qu'avec une seule solution au lieu de mélanger les deux et pourquoi?

Merci beaucoup d'avoir pris le temps de lire ceci et encore plus d'avoir répondu.

41
PDK

Vous avez énuméré les avantages et les inconvénients avec précision. L'utilisation des deux vous donnera plus de travail en termes de maintenance, et aussi plus de complexité, mais vous donnera la flexibilité que vous recherchez. Il se résumera à vos besoins.

De plus, vous constaterez probablement qu'avoir une connexion socket.io ouverte dans un processus d'arrière-plan iOS sera gênant. iOS est beaucoup plus restrictif dans les tâches pouvant s'exécuter en arrière-plan qu'Android.

12
bolav