10

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

  1. 以“用户 A”身份登录
  2. 注册 GCM(获取注册 ID)发送到服务器端
  3. 向用户 A 广播通知
  4. 注销注销
  5. 以“用户 B”身份登录
  6. 注册 GCM(获取注册 ID - 有时会返回与用户 A 相同的注册 ID,有时返回不同的注册 ID-)
  7. GCM 向用户 A 推送通知(即使用户取消注册)

我不确定如何让应用程序识别登录到设备的用户并将通知仅推送给该特定用户。而不是用户 B 登录并获取用户 A 的通知。任何意见和答案将不胜感激!如果您需要检查我项目中的特定代码,请告诉我。

4

1 回答 1

10

注册 ID 标识特定设备上的特定应用程序。它不知道您的应用程序中的用户登录。因此,当您注销 GCM 时(当用户注销时),您应该调用您的服务器,让它知道用户已注销。

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

用户 A 注销和用户 B 登录后是否获得相同的注册 ID 并不重要(即使您获得了新的注册 ID,旧的注册 ID 仍然可以使用。这就是为什么 GCM 在设备时返回一个规范的注册 ID拥有多个申请的注册 ID)。

编辑 :

让我们考虑一种特殊情况(应该相对少见),用户 A 在您的服务器向其发送通知后注销,但通知仅在用户 B 登录后才由 Google 传递给您的应用程序。处理这种情况的最安全方法是在您的应用程序中接收通知并将其丢弃,对用户 B 不显示任何内容。为了知道何时丢弃收到的通知,您可以将user属性添加到通知数据,并将用户名作为其值。当您在应用程序中处理通知时,请在显示通知之前检查用户属性是否与登录用户匹配。

于 2013-04-11T11:15:09.147 回答