带登录系统的GCM

时间:2013-04-11 10:35:45

标签: android push-notification google-cloud-messaging

我目前正在使用登录系统将GCM实施到应用程序中。我想根据登录到应用程序的用户(一个设备,多个用户)向应用程序发送通知。我经历了这些过程。

  1. 以“用户A”身份登录
  2. 注册GCM(获取注册ID)发送到服务器端
  3. 向用户A广播通知
  4. 退出取消注册
  5. 以“用户B”身份登录
  6. 注册GCM(获取注册ID - 偶尔返回与用户A相同的注册ID,有时返回不同的注册ID - )
  7. 向用户A发送GCM推送通知(即使用户取消注册)
  8. 我不确定如何让应用程序识别登录到设备的用户并仅将通知推送给该特定用户。而不是用户B登录并获得用户A的通知。任何评论和答案将非常感谢!如果您需要检查我项目中的特定代码,请告诉我们。

1 个答案:

答案 0 :(得分:10)

注册ID标识特定设备上的特定应用程序。它不了解您的应用程序中的用户登录。因此,当您取消注册GCM(用户注销时)时,您应该致电服务器以告知用户已注销。

这将让您的服务器知道此用户已注销,服务器将停止向其发送GCM消息。

如果您在用户A注销并且用户B登录后获得相同的注册ID,则无关紧要(即使您获得新的注册ID,旧注册ID仍然有效。这就是GCM返回规范注册ID的原因当设备有多个应用程序的注册ID时。)

编辑:

让我们考虑特殊情况(这应该是相对罕见的),用户A在服务器向其发送通知后退出,但只有在用户B登录后,Google才会将通知发送到您的应用程序。最安全的方法来处理此问题case是在您的应用程序中接收通知并丢弃它,向用户B显示任何内容。为了知道何时丢弃收到的通知,您可以在通知数据中添加user属性,并将用户名作为其值。在应用程序中处理通知时,请在显示通知之前检查用户属性是否与登录用户匹配。