我目前正在执行的GCM与登录系统的应用程序。 我想通知发送到基于该登录到应用程序(一个设备,多个用户)用户的应用程序。 我经历这些过程。
- 登录为“用户A”
- 注册GCM(获得注册ID)发送到服务器端
- 广播通知了用户A
- 注销注销
- 登录为“用户B”
- 寄存器GCM(获得注册ID -occasionally取回相同的注册ID与用户A,有时返回不同的注册ID-)
- GCM推送通知给用户A(即使用户未寄存器)
我不知道如何让应用程序识别登录到设备的用户和推送通知到只有特定的用户。 相反,用户B的登录,并得到用户A的通知。 任何意见和答案,将不胜感激! 如果您需要检查从我的项目的特定代码,请不要让我知道。
注册ID识别特定设备上的特定应用程序。 它有你的应用程序中对用户的登录毫不知情。 因此,当您注销GCM(当用户注销时),你应该打电话给你的服务器,让它知道该用户已注销。
这将让你的服务器知道这个用户注销,并且服务器将停止发送GCM消息吧。
如果你得到了相同的注册ID用户A后(即使你得到一个新的注册ID,旧的可能仍然工作注销和用户B登录为什么GCM返回一个规范的注册ID,没关系,这是当设备具有用于应用程序多于一个注册ID)。
编辑:
让我们考虑其中后您的服务器发送它的通知,但该通知得到由谷歌输送到后,才在用户B登录您的应用程序用户A登录了特殊情况下(这应该是比较少见的)。最安全的方式来处理这种情况是收到通知您的应用程序并将其丢弃,深藏不露用户B.为了知道什么时候丢弃收到的通知,你可以添加一个user
属性与用户名作为其值设为您的通知数据。 当你处理应用中的通知,检查用户属性显示在通知之前匹配登录的用户。