android - GCM : Send notifications only for the current user logged in application

标签 android google-cloud-messaging

对于我正在使用的应用程序,我需要集成 Google Cloud Messaging。在尝试了一些不同的示例之后,我能够在我的设备上发送和接收通知。
但是,我遇到了一个有趣的情况。据我所知(如果我错了请纠正我),registration_id 是按设备和应用程序发布的。

我正在使用的应用程序支持登录功能。安装应用程序并且用户首次登录时(假设为“UserA”),我从 GCM 请求 registration_id,然后将其发送到我的服务器。

现在假设 UserA 注销并将他的设备交给某个 UserB 登录。换句话说,UserB 使用 UserA 的设备登录。

问题是,如果同时 UserA 收到通知,UserB 将能够拦截它。如果 UserB 收到通知,他将无法收到通知。
这看起来很正常,因为 registration_id 是按设备和按应用程序分配的,但对我来说这似乎不合理。

所以我想问是否有办法让 registration_id 依赖于某些用户 ID(除了设备和应用程序之外)?或者我怎样才能使登录用户只收到他自己的通知?

最佳答案

是的,您确实为每台设备的应用程序拥有一个谷歌注册 ID。

但您始终可以在您自己的服务器上注册和取消注册用户,该服务器实际上会将消息发送到 GCM,GCM 会将其发送到已注册的设备。

为你的服务器定义一些接口(interface),比如 registerOnServer 和 unRegisteronServer ,在这个接口(interface)上为每个用户发送一些唯一的值。

因此,在您的情况下,当 A 使用 Log ins 时,首先在 GCM 上完成 regitration,并使用 registerOnServer 界面在您的服务器上注册用户,当用户登录时,将与他有关的通知发送到 GCM 以发送到设备。

当 A 注销时,使用 unRegisterServer 取消注册他,并且不要从您的服务器向 GCM 发送任何消息,因为 A 未注册。

所以,现在如果 B 使用同一台设备登录,请在您的服务器上注册他并发送他的消息。

这将解决您的问题!

关于android - GCM : Send notifications only for the current user logged in application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786680/

相关文章:

android - 在另一个 recyclerView 中添加 recyclerView

android - android :name really required? 中的前导点

安卓。如何从不同的 Activity 中获取上下文

android - Google App Engine 示例应用抛出 503

Android:AltBeacon 未检测到信标

android - App连接云端用了多少手机流量

android TextView 值

GCM 的 Android 客户端未收到回显推送通知

android - 如果用户已经注册,直接启动 Activity

java - 其他用户如何使用我的 GCM 应用程序?