Worklight 6.2 - 推送通知 - 是不是可以更改 userSubscription.userId?
Posted
技术标签:
【中文标题】Worklight 6.2 - 推送通知 - 是不是可以更改 userSubscription.userId?【英文标题】:Worklight 6.2 - Push Notification - Is it possible to change userSubscription.userId?Worklight 6.2 - 推送通知 - 是否可以更改 userSubscription.userId? 【发布时间】:2015-04-13 10:17:51 【问题描述】:我正在使用 Worklight 6.2 尝试让推送通知适用于我们的应用程序。
我们的应用使用基于适配器的身份验证。
用户无需登录即可浏览应用的前几页。
我遇到的问题是用户登录后,userSubscription 中的userId 不是Worklight 控制台中Device 选项卡下为设备列出的userId。
我做了一些调查......
应用启动后,我可以看到 GCM 句柄注册日志。 此时我可以收到广播通知。
然后,我触发 registerEventSourceCallback。
从适配器服务器日志中,我看到 userSubscription 中的 userId 是 “用户 ID”:“1856115d-e9e5-4f9c-8a16-05e58399ee90”。除非我重新安装应用程序,否则每次都是一致的。我猜这是持久性cookie id?
我确认我可以使用上面的 userId 但不能使用我的客户用户 ID 发送/接收单播通知。
我想知道我的应用(基于适配器的身份验证)和演示应用(基于应用的身份验证)在推送通知订阅方面有什么区别?
我的登录步骤是否有问题导致订阅使用持久性 cookie userId?
任何提示表示赞赏。
更新...
我可以通过注册 eventsourcecallback 和订阅来实现单播(我不知道如何以任何其他方式获取 userId)。而userId是随机生成的长id。使用的适配器方法是来自演示应用程序的 submitNotification(userId, notificationText)。
对于正确的单播步骤(我认为),我可以将 WL.Server.sendMessage() 与 notification.target = userIds: [the-long-userId] 一起使用。在 Worklight 控制台中,在登录之前,设备的 UserId 列是空的。登录后,UserId 列正确填充了我的虚拟 userId (123_456)。但是,在登录后,尝试使用 userId 123_456 发送单播会在服务器日志中返回“未找到设备”。
如何在登录后更新订阅用户 ID?所以我可以只使用单播的默认行为,而不是订阅事件源。
【问题讨论】:
你提到广播和单播,然后你提到事件源回调。这些之间没有关系...除了广播之外,您是否还尝试实现基于事件源的通知?广播不需要身份验证... 如果可能,我希望拥有所有 3 个(广播、单播、事件源)。 请编辑您的问题并仅保留与问题实际相关的信息。 抱歉,编辑问题被打断了。 1. 广播按原样在登录前/登录后工作。没关系。 2. 单播仅在我注册 eventsourcecallback 后工作(我有不同的处理程序)前/后登录。而userId是随机生成的长id。 3. 在 eventSourceCallback 注册和订阅 action 后,Eventsource 推送工作。我希望首先让 2 工作......所以问题是......如何在登录后更新订阅用户 ID?我不想创建新订阅,因为这意味着我会收到两次相同的广播消息。 对更新 userId 进行了一些调查...除非设备取消注册并使用新的 userId 再次注册,否则 userId 不会更新。 Push Hybrid 示例中基于表单的登录 (developer.ibm.com/mobilefirstplatform/documentation/…) 让我们指定 userId。 【参考方案1】:所以...找出问题所在。
问题是我在适配器中创建了一个事件源而没有指定安全测试。
在 WL.Server.createEventSource() 中包含 securityTest 后,订阅表的 userId 字段从随机生成的字段正确更新为我登录的 userId。
【讨论】:
以上是关于Worklight 6.2 - 推送通知 - 是不是可以更改 userSubscription.userId?的主要内容,如果未能解决你的问题,请参考以下文章
Worklight 6.2:成功发送标签推送通知,但在 android 设备上未收到