22

Ich entwickle ein Chat-System für Web, Android und iOS. Bei meiner Recherche habe ich Unterschiede in der Handhabung der Push-Benachrichtigungen durch GCM und APNS festgestellt.Push-Benachrichtigungen oder Socket.io ?, oder beide?

Wenn ich eine Push-Benachrichtigung über das GCM an ein Android-Gerät sende, kann das Gerät entscheiden, ob es den Benutzer darüber informiert, oder wenn es nicht notwendig ist, teilt es dem Benutzer dies nicht mit. Es könnte sich lediglich um eine Aktualisierung von Daten handeln, die der Benutzer nicht benachrichtigt werden muss. Wenn ich jedoch eine Push-Benachrichtigung über APNS an ein iOS-Gerät sende, kann das Gerät nicht entscheiden, ob die Benachrichtigung angezeigt werden soll oder nicht. Die Benachrichtigung muss angezeigt werden. Wenn ein iOS-Gerät die Benachrichtigung empfängt, müssen die Benachrichtigungsdaten außerdem die Zeichenfolge enthalten, die dem Benutzer angezeigt wird. Unter Android kann das Gerät diese Zeichenfolge generieren.

Also wollte ich ein System erstellen, das sowohl für iOS und Android, als auch für die Website (API-basiert) funktioniert. Das war, als ich Socket.io fand. Socket.io gibt mir die Freiheit, Daten an das Gerät zu senden (egal ob iOS oder Android), so dass das Gerät entscheidet, ob die vorgenommenen Änderungen angezeigt werden sollen (könnte ein Update eines Benutzers, eine neue Nachricht, eine Einladung sein) oder viele andere "Ereignisse"). Aber bei meiner Recherche fand ich einige Nachteile bei der Verwendung von Socket.io. Das Gerät muss mit dem Socket verbunden sein, damit die Informationen zwischen dem Client und dem Server fließen, aber ein Smartphone verbindet sich tatsächlich in der realen Welt und trennt die Verbindung zu verschiedenen Netzwerken, wodurch die Socketverbindung unterbrochen wird. Wenn die Verbindung offen ist, im Hintergrund, gibt es einen Ping-Pong zwischen dem Server und dem Client, um zu überprüfen, ob die Verbindung noch offen ist und am Ende Mega verbraucht (In meinem Land zahlen wir für jeden Mega, den wir benutzen , wir haben noch keine Pauschale) und auch Baterleben. Ich weiß nicht genau, ob dieser Verbrauch signifikant ist oder nicht.

Auf der Web-Seite muss es mit Socket.io funktionieren, also ist das überhaupt kein Problem.

Schließlich weiß ich die Vor- und Nachteile der beiden Alternativen, und ich fand, dass ich beide Optionen mischen kann und das könnte am Ende meine beste Option sein. Wenn die App beispielsweise geöffnet ist, verwendet sie Socket.io. Wenn sie geschlossen ist, verwenden Sie APNS oder GCM (abhängig vom Betriebssystem des Geräts). Aber ist es eine gute Übung? Oder wird es besser sein, nur mit 1 Lösung zu bleiben, statt beides zu mischen und warum?

Vielen Dank für Ihre Zeit beim Lesen und noch mehr für die Beantwortung.

+2

Das ist eine gute Frage, denn hier muss es ein Gleichgewicht geben. Ich bin inspiriert, nachdem ich das hier gelesen habe, weil ich gerade die Benachrichtigungen in einer App erstelle. Ich werde node.js socket.io verwenden, um zuerst festzustellen, ob sie online sind. Ist dies der Fall, verwenden Sie socket.io, um Benachrichtigungen zu senden, oder verwenden Sie Benachrichtigungen für android/ios. Vielen Dank! –

+0

@PDK hast du beide benutzt? – ralphgabb

+1

@ralphspoon Ich musste beide verwenden, ist der beste Weg, wenn Sie das Richtige tun wollen. Aber am Ende war es ein Durcheinander, das System zu handhaben, so dass ich am Ende zu Firebase überwechselte. – PDK

Antwort

8

Sie haben die Vor- und Nachteile genau aufgelistet. Wenn Sie beide verwenden, erhalten Sie mehr Arbeit in Bezug auf Wartung und mehr Komplexität, aber Sie erhalten die Flexibilität, nach der Sie suchen. Es wird auf Ihre Anforderungen herunterkochen.

Auch Sie werden wahrscheinlich feststellen, dass eine Socket.io-Verbindung in einem iOS-Hintergrund-Prozess öffnen wird mühsam sein. iOS ist viel restriktiver in welchen Aufgaben im Hintergrund als Android ausgeführt werden kann.

+0

Vielen Dank für Ihre Antwort, ist gut zu hören, dass ich die richtige Richtung bin. – PDK

Verwandte Themen