2016-04-21 66 views
3

每當添加新事件時,都會向用戶發送推送通知。如果在行中添加十個事件,則將向用戶發送十個推送通知,這是一種令人討厭的行爲。如何顯示累計推送通知,而不是顯示同時出現的多個通知?

我想要這樣:如果在行中添加了十個事件,或者在時間上添加了非常接近的對象,則只會向每個用戶發送一個推送通知,說:"#{event.name} and 19 others events added that match your interests."

這是我到目前爲止已經完成:

增加了射門last_sent_notificationusers表。每次添加新事件時,都會檢查創建的事件是否在last_sent_notification的2分鐘半徑內,並且會發出通知。

如果新創建的事件在last_sent_notification的2分鐘半徑內,則會創建一個後臺作業,等待2分鐘用於其他即將發生的事件,並在2分鐘後觸發。如果在2分鐘等待期間創建新事件,則通知將考慮在2分鐘等待期間創建的所有事件。

這個問題的唯一缺點是:在添加事件時,通知不會立即發送。會有2分鐘的延遲。

有什麼設計模式或最佳解決方案可以更好地完成這項工作嗎?

+0

只需按照文檔:http://developer.android.com/training/wearables/notifications/stacks.html – NSimon

+0

@NicolasSimon它是在服務器端需要它。 –

+0

那麼你到底在做什麼? – e4c5

回答

1

對於您使用Collapsible messages來說,這將會簡單得多,而這正是爲這種場景設計的。

的可摺疊消息將被遞送 給設備,其可以由包含相同合攏鍵若它尚未新 消息被替換的消息。

您只需要設置collapse_key參數即可。

如果這不是你真正想要的,你所尋找的是一個隊列和發送機制。這種事情可以很容易地用redis完成。您當前的服務器端應用程序僅將GCM通知推送到redis隊列中。如果已經有給定用戶的消息,它將被替換。

然後,您需要另一個線程不斷監視redis隊列併發送大於n分鐘的消息。

+0

它是服務器相關還是客戶端相關的東西? –

+0

Arsan ali。這只是將1行代碼添加到您的GCM發件人(也就是服務器應用程序 – e4c5

+0

)中,然後我瀏覽了該文檔。這不是我想要的。這裏寫的是什麼:它會向用戶發送所有通知,但如果所有先前的通知共享相同的'collapse_key',則只有最新的通知纔會顯示在用戶的手機上。 –