推送通知数据库管理

push notification DB managment

我即将在我的应用程序中为 android 使用 GCM,为 ios 使用 APNS。

在我的服务器端,我在我的数据库中保存了每次登录的设备 ID 和帐户 ID。

当用户注销时,我会删除该条目,这样用户就不会再收到它(即使它在同一设备上使用不同的帐户登录)

我考虑的场景是当用户在他仍处于登录状态时卸载应用程序。这意味着用户没有完成注销请求,即删除我的数据库上的设备 ID 条目的请求。

现在用户再次安装该应用,但使用不同的帐户登录。

在我的数据库中,我将拥有相同的设备 ID 和 2 个帐户 ID,这意味着用户将收到不属于他的推送通知(他的设备将继续收到之前登录帐户的通知)。

据我所知 android 获得了每个应用程序的设备 ID "instance" 所以我在这里没有问题(即使消息将发送到奇怪的幽灵设备),但是ios 我知道你发送给 apns 的设备 ID 对于每个设备都是唯一的...

底线 -

我是不是搞错了什么?

我考虑的解决方案是将设备超时设置为与登录超时相同(仍然是交错时间会收到来自 2 个帐户的通知)

这个问题看起来仍然很微不足道,那一定是一个更干净的解决方案。

对于 iOS,一种方法是向 NSUserDefaults 添加一个密钥,以检查该应用程序是否在其第一个 运行 上。

在连续的 运行 中,如果出现上述键,您什么都不做,因为这不是您的第一个 运行。如果密钥不存在(安装后第一个 运行),您将发送一个带有 deviceid 的请求,这会从您的服务器数据库中删除当前的 deviceid 及其所有登录条目。您将密钥设置为 true,然后您可以继续正常登录。 这仅在 deviceid 在安装之间不更改时才有效。

我想 Android 也有类似的机制。