2016-04-21 2 views
3

Immer wenn ein neues Ereignis hinzugefügt wird, wird eine Push-Benachrichtigung an den Benutzer gesendet. Wenn zehn Ereignisse in einer Zeile hinzugefügt werden, werden zehn Push-Benachrichtigungen an den Benutzer gesendet, ein Verhalten, das lästig ist.Wie wird die kumulative Push-Benachrichtigung angezeigt, anstatt mehrere Benachrichtigungen anzuzeigen, die dazu neigen, gleichzeitig angezeigt zu werden?

Ich möchte es so haben: wenn zehn Ereignisse in Zeile hinzugefügt werden, oder zeitlich sehr nahe beieinander hinzugefügt, wird nur eine Push-Benachrichtigung an jeden Benutzer gesendet werden, sagen: "#{event.name} and 19 others events added that match your interests.".

Hier ist, was ich bisher getan habe:

Added ein Feld last_sent_notification in users Tabelle. Jedes Mal, wenn ein neues Ereignis hinzugefügt wird, wird überprüft, dass das erstellte Ereignis nicht im Umkreis von 2 Minuten von last_sent_notification liegt und eine Benachrichtigung ausgelöst wird.

Wenn ein neu erstelltes Ereignis im Umkreis von 2 Minuten von last_sent_notification liegt, wird ein Hintergrundjob erstellt, der 2 Minuten auf ein anderes bevorstehendes Ereignis wartet und nach 2 Minuten ausgelöst wird. Wenn während der 2-Minuten-Wartezeit ein neues Ereignis erstellt wird, berücksichtigt die Benachrichtigung alle Ereignisse, die während dieser 2-Minuten-Wartezeit erstellt wurden.

Der einzige Nachteil dieses Problems ist: Wenn ein Ereignis hinzugefügt wird, wird die Benachrichtigung nicht sofort gesendet. Es wird eine Verzögerung von 2 Minuten geben.

Gibt es ein Entwurfsmuster oder eine optimale Lösung, die diese Aufgabe besser erfüllen könnte?

+0

Folgen Sie einfach der Dokumentation: http://developer.android.com/training/wearables/notifications/stacks.html – NSimon

+0

@NicolasSimon es ist auf der Server-Seite erforderlich. –

+0

Also, worauf hast du dich am Ende festgelegt? – e4c5

Antwort

1

Es wäre viel einfacher für Sie zu verwenden Collapsible messages, die nur für diese Art von Szenario konzipiert ist.

Zusammenklappbarer Nachricht ist eine Nachricht, die durch eine neue Nachricht ersetzt werden kann, den gleichen Minimierungsschlüssel enthält, wenn sie noch an das Gerät geliefert werden muss.

Alles, was Sie tun müssen, ist den collapse_key Parameter einzustellen.

Wenn dies nicht das ist, was Sie wirklich wollen, suchen Sie einen Warteschlangen- und Sendemechanismus. So etwas kann mit redis ganz leicht gemacht werden. Ihre aktuelle serverseitige App sendet nur GCM-Benachrichtigungen in der Redis-Warteschlange. Wenn für den angegebenen Benutzer bereits eine Nachricht vorhanden ist, wird diese ersetzt.

Dann müssen Sie einen anderen Thread haben, der ständig die Redis-Warteschlange überwacht und Nachrichten sendet, die älter als n Minuten sind.

+0

Ist es Server-bezogene oder Client-bezogene Sachen? –

+0

Arsan ali. Es ist nur eine Frage des Hinzufügens von 1 Codezeile zu Ihrem GCM-Absender aka die Server-App – e4c5

+0

Ich ging durch das Dokument. Es ist nicht was ich will. Was dort geschrieben wird: Es sendet dem Benutzer alle Benachrichtigungen, aber nur die neueste Nachricht wird auf dem Handy des Benutzers angezeigt, wenn alle früheren Benachrichtigungen den gleichen 'collapse_key' teilen. –

Verwandte Themen