我应该生成特定于Android GCM注册ID应用程序还是特定于用户?

时间:2015-09-24 12:32:44

标签: android google-cloud-messaging

我正在开发一个具有登录功能的应用程序。我每个应用程序只生成一个gcm注册ID。如果其他用户在同一个应用程序中签名,他将开始接收针对前一个用户的通知。 如何处理这种情况,以便每个用户都能获得针对他/她的通知? 我应该为每个用户生成gcm reg id吗? 处理这种情况的标准方法是什么?

4 个答案:

答案 0 :(得分:7)

您可以尝试以下方法:

  1. 当用户注销时,发送请求以删除服务器上的令牌,并将其删除在您的应用上;
  2. 用户注销后,您只需删除服务器上“用户ID”与“GCM令牌”(或注册ID)的关联即可。当有人再次登录时,您会与该令牌建立新关联。
  3. GCM令牌是特定于应用的,但您在服务器上建立的关联完全取决于您。

    我不能强调它,GCM生成的令牌是 APP SPECIFIC 。如果您的用户登录多个设备,则您的服务器应该处理该问题,并将user ID与多个Registration ID令牌相关联。

      

    GCM服务器向Android应用程序发出的允许的ID   它接收消息。一旦Android应用程序有了   注册ID,它将它发送到第三方应用服务器,   它使用它来识别已注册接收的每个设备   给定Android应用程序的消息。换句话说,一个   注册ID与运行的特定Android应用程序绑定   一个特定的设备。

    从文档中,您的服务器也应该:

      

    在编写使用GCM的客户端应用程序之前,您必须拥有一个   满足以下条件的应用程序服务器:

         
        
    • 能够与您的客户沟通。
    •   
    • 能够将格式正确的请求发送到GCM连接服务器。
    •   
    • 能够处理请求并使用指数后退重新发送它们。
    •   
    • 能够存储API密钥和客户端注册令牌。
    •   
    • 能够生成消息ID以唯一标识它发送的每条消息。每个发件人ID的邮件ID应该是唯一的。
    •   

    编辑:您可以阅读有关GCM here的更多信息。

    如需进一步阅读,您还可以在Device Group Messaging上阅读更多内容。

    您还可以下载一些代码示例here

答案 1 :(得分:5)

您应该按用户存储regID。

这是因为有一些测试用例是user1注销而user2是登录的。在这种情况下,如果你已经存储了特定于regID应用程序但没有与用户绑定,那么user2也会收到通知。

因此,您需要根据用户,应用以及特定设备存储regID。

答案 2 :(得分:1)

当然是每次有人下载你的应用程序时,你的应用程序应该将它们注册到GCM并获得一个注册令牌,这需要发送到你的应用服务器,在你的应用服务器上你需要弄清楚你是谁也发送通知。你可能应该在登录时发送一些登录信息和注册令牌,这样你就可以识别每个人,然后写一些php或Jquery发送给个人或所有用户。您还应该在每次登录时发送reg令牌,因为这些令牌可以在没有警告的情况下发生变化。

您的应用服务器应该能够处理删除未使用的注册令牌并添加新令牌

答案 3 :(得分:0)

  

每个Android设备都会生成一个唯一的GCM注册ID。来自服务器端的推送通知将根据设备ID发送。因此,在登录时,您可以将GCM reg id发送到您的服务器。因此,从服务器端推送通知将发送到设备..,这是实际的功能。

希望这会有所帮助