2013-07-22 61 views
4

對於我正在使用的應用程序,我需要集成Google Cloud Messaging。在玩過一些不同的例子之後,我能夠發送和接收關於我的設計的通知。
但是,我遇到了一個有趣的情況。據我所知(如果我錯了,請糾正我),registration_id是每個設備和每個應用程序發出的。GCM:僅針對當前用戶登錄的應用程序發送通知

我正在使用的應用程序支持登錄功能。當應用程序安裝並且用戶第一次登錄(讓它成爲「UserA」)時,我向GCM請求registration_id,然後將它發送到我的服務器。

現在設想UserA註銷並將其設備登錄到某個UserB。換句話說,UserB使用UserA的設備登錄。

問題是,如果UserA同時收到通知,UserB將能夠攔截它。如果UserB收到通知,他將無法收到通知。
這似乎很正常,因爲registration_id是每個設備和每個應用程序,但它對我的情況似乎並不合理。

所以我問我是否有辦法讓registration_id取決於某些用戶ID(除了設備和應用程序)?或者我怎麼能讓登錄的用戶只接收他自己的通知?

+0

[GCM與登錄系統]可能的重複(http://stackoverflow.com/questions/15946586/gcm-with-login-system) – Eran

回答

4

是的,您的每臺設備都有一個Google註冊ID。

但是,您可以隨時在自己的服務器上註冊和取消註冊用戶,這些用戶實際上會向GCM發送消息,並且GCM會將此消息發送給已註冊的設備。

爲您的Server定義一些接口,如registerOnServer和unRegisteronServer,爲此接口上的每個用戶發送一些唯一值。

因此,在您的情況下,當A使用登錄時,首先在GCM上完成註冊並使用registerOnServer inteface在您的服務器上註冊用戶,並且在用戶登錄時將與他有關的通知發送給GCM以發送給裝置。

當A註銷時,使用unRegisterServer註銷他,並且不要從您的服務器向GCM發送任何消息,因爲A未註冊。

因此,現在如果B使用相同的設備登錄,請在您的服務器上註冊併發送他的消息。

這將解決您的問題!

+0

這似乎是一個合理的解決方案。但是,即使沒有互聯網連接,我們也有要求讓用戶註銷。這使事情變得複雜一些,因爲服務器會認爲用戶仍然登錄,並且會發送通知。 –

+2

如果沒有互聯網連接,您將無法收到通知,因此在您的應用程序中有一個廣播接收器,用於監聽互聯網狀態以及互聯網可用時,請檢查用戶是否已註銷並從服務器取消註冊。 – Nargis

+0

不錯的想法,但是請注意當用戶B登錄到初始設備並且現在登錄到另一個設備時,會出現什麼情況,哪個設備現在應該接收通知。 –

相關問題