多用户应用程序中推送通知的最佳实践?

问题描述 投票:0回答:4

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

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

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

push-notification push apple-push-notifications google-cloud-messaging
4个回答
4
投票

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

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

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

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


1
投票

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

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

如果您讨厌发送不需要的通知,请选择服务器路由。如果您重视“保持简单”原则,请选择客户端路线。


0
投票

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

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

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

在您的应用程序端,您必须在每次登录时调用

setUserDeviceNotifyToken
API,并在每次注销时调用
removeUserDeviceNotifyToken

在服务器端,您可以通过其

deviceNotificationToken
跟踪每个用户并发送正确设备的通知。

注意:如果您的服务不支持单用户多设备登录,您可以只处理一个

updateUserDeviceNotifyToken
,并通过
null
删除用户的设备令牌。

注意2:在调用

removeUserDeviceNotifyToken
API 之前,不要让用户注销。


0
投票

我知道我有点太晚了,但我想我会与其他人分享我的一些经验。

向多个用户推送通知时,必须确保客户端订阅(侦听)特定队列(在本例中为多个队列)。

例如,对于一个名为

top customers
的群组,移动应用程序应主动监听两个频道:

  • customer_id
    (针对单个用户的目标消息)
  • top-customers
    (针对一组用户)

通过遵循此设置,应用程序将立即收到在这些渠道中发布的任何消息。

© www.soinside.com 2019 - 2024. All rights reserved.