Worklight:没有用户 ID 的推送通知
Posted
技术标签:
【中文标题】Worklight:没有用户 ID 的推送通知【英文标题】:Worklight: Push notification without User ID 【发布时间】:2013-12-12 11:58:58 【问题描述】:请建议,是否可以在没有用户 ID 的情况下发送推送通知?假设我们想向所有下载了我们应用程序的用户发送推送消息。或者由于安全原因,用户 ID 不能存储在数据库中(或在应用程序中使用)。
【问题讨论】:
如果您只想向您应用的所有用户发送通知,您可以display a notification on app startup。只需确保在您的应用中将 connectOnStartup 设置为true
。
【参考方案1】:
您需要一种方法来识别用户。它将归结为您认为是“用户ID”的内容。有一种方法可以在不使用永久用户 ID 的情况下区分用户。您可以使用持久 cookie 领域。如果您将其添加到您的 authenticationConfig.xml 文件中:
<realm name="PersistentCookie" loginModule="WeakDummy">
<className>com.worklight.core.auth.ext.PersistentCookieAuthenticator</className>
</realm>
然后,当用户连接到 Worklight 服务器时,将为用户创建一个基于持久 cookie 的唯一 ID:
"PersistentCookie":"userId":"6410a0f9-98fb-4940-a127-da940c5d7e16","attributes":,"isUserAuthenticated":1,"displayName":"6410a0f9-98fb-4940-a127-da940c5d7e16"
用户或开发者无需进一步交互。只需将类添加到 authenticationConfig.xml 即可生成用户 ID。
您可以使用此 cookie 为用户订阅推送通知。如果出于安全原因,您希望不再通过此 persistentCookieID 识别此用户,那么您只需清除应用程序上的 cookie,就会为该用户生成一个新 ID。如果生成了新的 persistentCookieID,他们将需要重新订阅推送通知。
【讨论】:
感谢您的建议。这看起来不错,但必须在应用程序每次重新启动时重新订阅。 嗯,有一些方法可以减少重新订阅的数量。您可以将此持久性 cookie ID 保存在本地存储中并继续使用它,并且仅在必要时将其清除。您可以重新生成并存储一个新的,并且不绑定到单个用户 ID。 请记住,从持久性 cookie 身份验证器生成的用户 ID 是持久性的,因此您只需在清除 cookie 时重新订阅,而不是在每次应用重启时重新订阅。【参考方案2】:您需要订阅列表以在 Worklight 中发送推送通知,并且适配器(服务器)端 API 以获取所有订阅
WL.Server.getUserNotificationSubscription(eventSource, userId);
所以如果没有 userId,就无法发送推送通知。
我不确定安全问题,因为 userID 只是用于登录应用程序的用户名。如果您的应用程序和事件源都具有 securityTests,那么 Worklight 会自动处理与 userId 一起存储的订阅。
【讨论】:
我可以理解并同意你的观点,但这是我客户的要求。 App里根本没有登录页面。【参考方案3】:从 Worklight 6.2 开始,您可以使用“广播通知”功能向所有用户(订阅或未订阅)发送通知。
更多信息,请参考http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.dev.doc/devref/c_push_notif_broadcast.html
要发送广播通知,您可以使用 WL.Server.sendMessage( applicationId, notificationOptions )。更多信息可以在 http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.dev.doc/devref/c_send_push_notifications.html
【讨论】:
以上是关于Worklight:没有用户 ID 的推送通知的主要内容,如果未能解决你的问题,请参考以下文章