带有登录系统的 GCM

Posted

技术标签:

【中文标题】带有登录系统的 GCM【英文标题】:GCM with login system 【发布时间】:2013-04-11 10:35:44 【问题描述】:

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

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

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

【问题讨论】:

this 最后有注册和注销的解决方案。回复晚了,但可能对某人有帮助。 【参考方案1】:

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

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

在用户 A 注销和用户 B 登录后获得相同的注册 ID 并不重要(即使您获得了新的注册 ID,旧的注册 ID 可能仍然有效。这就是 GCM 返回规范注册 ID 的原因当设备有多个应用程序的注册ID时)。

编辑:

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

【讨论】:

我同意这一点。但是,当 GCM 处于挂起状态时,例如 10 个通知发送到设备并且用户尝试从系统注销时,它可能是可能的。当用户成功注销时,GCM 可能尚未发送所有通知。到目前为止,这是我关心的问题 感谢您的反馈。根据您的编辑答案,我想我明白了。 如果你没问题,我也发布了另一个关于 GCM 的问题。你介意看看吗? @IssacZH。当然,我也回答了这个问题。 嗨 @Eran 我已经按照您提到的那样完成了,即使用 GCM 用户数据将检查 userId 并显示/丢弃通知,但现在如果用户 A 在用户 B 之后登录,那么用户 A 的消息被丢弃了,那么用户 A 将如何获得那些被丢弃的通知。

以上是关于带有登录系统的 GCM的主要内容,如果未能解决你的问题,请参考以下文章

带有 Angular JS 的 mySQL 数据库的用户登录系统?

对于带有登录系统的 Web 应用程序,我是不是需要 OAuth 服务器实现?

GCM,注册 ID 和处理用户登录/注销

使用java绕过带有rest api的keycloak登录系统并生成领域/应用程序URL

是否需要网站(服务器)来处理 gcm 操作,如上传附件、登录等

是否可以使用 gcm css 以现有 xmpp 用户登录?