当用户同时从多个设备登录并在同一设备上登录多个帐户时使用GCM

时间:2016-01-19 06:37:39

标签: android google-cloud-messaging chat

我正在使用GCM进行在线聊天应用。但我认为仍有一些领域需要深入挖掘。我知道GCM为每个设备/应用程序提供一个注册ID。如果一个用户注销而另一个用户从同一设备登录,该怎么办?如何确保将消息发送给相关用户。 为了解决这个问题,我每次登录或注册时都会注册用户。当他/她注销时,我将从我的数据库中删除注册ID。我仍然对这种方法有一些疑问,任何信息都会非常有用。

1 个答案:

答案 0 :(得分:2)

来自GCM documentation

  

客户端应用程序应调用这些取消注册和取消订阅   仅在需要停止接收消息时才起作用。的开发者   永远不应该注销客户端应用程序作为注销机制或   用于在用户之间切换,原因如下:

     
      
  • 注册令牌与特定登录无关   用户。如果客户端应用程序取消注册然后重新注册,则应用程序可以   收到相同的注册令牌或不同的注册令牌。
  •   
  • 取消注册和重新注册每个最多可能需要五分钟   传播。在此期间,由于此消息可能会被拒绝   未注册的状态,消息可能会转到错误的用户。
  •   
     

制作   确保消息发送给目标用户:

     
      
  • 应用服务器可以维护当前用户与用户之间的映射   注册令牌。
  •   
  • 然后客户端应用可以检查以确保这一点   它收到的消息与登录用户匹配。
  •   

这意味着:

  • (重新)在应用启动时注册GCM,注销时不注销
  • 登录时将设备令牌存储在数据库中(将令牌映射到帐户)
    • 应该可以为同一帐户存储多个设备令牌
  • 在注销时从数据库中删除设备令牌
  • 要向某个帐户发送通知,请将其发送给为该帐户存储的所有设备令牌
  • 此外,您可以检查通知是否发送给设备本身的登录用户(在通知有效负载中发送帐户ID)