11

我正在研究一种需要支持允许多个用户的应用程序的推送架构。这意味着多个用户可以使用他们的凭据登录应用程序。我遇到的问题是,如果用户 A 允许推送通知,然后注销,然后用户 B 登录并开始获取用户 A 的推送通知,该怎么办?

处理此类事情的一些最佳实践是什么?我的一个想法是你可以记住最后一个登录的用户,并且只向“登录”用户显示推送通知。您必须在消息有效负载中发送某种用户上下文,以便可以根据登录用户对其进行检查。然而,这感觉有点时髦。

还有其他人遇到过这个吗?这似乎是一个非常相关的问题,尤其是对于家庭倾向于共享设备的平板电脑。

4

3 回答 3

4

我们通过向 APSN 注册设备、获取设备令牌并通过 ws 将其发送到我们的服务器来实现这一点。

在服务器端,设备令牌仅与最后登录的用户相关联。

New app
User A (first ever user) uses IPAD A
Register with APSN, get token
Send token to our servers through ws
Search for token in db, token is new, store it
assign token to USER A

Next user logs into app
Register with APSN, get token
Send token to our servers through ws
Search for token in db, token exists already
Remove connection to USER A
assign token to USER B

SEND Notification to device WITH USERNAME
if username is logged in show it - else dont

仍然不完美,因为它首先发送到主屏幕所以对所有用户

于 2013-07-01T12:09:24.170 回答
1

我认为您的建议在多用户应用程序中是可以接受的。在客户端实现这一点要比在服务器端简单得多。缺点是浪费了额外的带宽来发送不需要的通知。但是绝大多数的使用可能是单用户的,所以这可能并不重要。

另一种方法是跟踪服务器上的登录用户及其当前的 reg_id。这可能更复杂,因为 A 可以在多个设备上登录,然后从设备 1 注销,B 登录到设备 1,等等,您的服务器必须跟踪所有这些。所以可能是另一个表来跟踪“登录用户”与“注册 ID”之间的关系。

如果您讨厌发送不需要的通知,请使用服务器路由。如果您重视 Keep-It-Simple 原则,请选择客户路线。

于 2012-09-21T15:42:49.230 回答
0

假设您的应用程序的用户可以登录多台设备。

我们必须在服务器端制作两个 API:

    func setUserDeviceNotifyToken(userId: Int, deviceToken: String) {}
    func removeUserDeviceNotifyToken(userId: Int, deviceToken: String {}

在您的应用程序端,您必须setUserDeviceNotifyToken在每次登录时调用 API 并removeUserDeviceNotifyToken在每次注销时调用。

在服务器端,您可以跟踪每个用户deviceNotificationToken并发送正确设备的通知。

注意:如果您的服务不支持一个用户的多设备登录,您可以只处理一个updateUserDeviceNotifyToken并传递null删除用户的设备令牌。

注意 2removeUserDeviceNotifyToken :在调用API之前不要让用户注销。

于 2019-06-02T04:47:38.123 回答