在没有 WLClient::connect() 的情况下接收 GCM 推送

Posted

技术标签:

【中文标题】在没有 WLClient::connect() 的情况下接收 GCM 推送【英文标题】:receive GCM push without WLClient::connect() 【发布时间】:2014-10-31 15:25:00 【问题描述】:

我们可以在没有WLClient::connect() 的情况下使用WLPush::subscribe() 吗?

背景 我正在使用 IBM Worklight 框架开发一个 android 本机应用程序(离线版本 - 应用程序可以在没有 Internet 的情况下工作),并且我正在实现推送通知。据我了解,我们需要WLPush::subscribe() 才能收到通知。但是我们不能直接调用 subscribe() 方法,它必须在 Callback OnReadyToSubscribeListener 中。建立连接后将调用侦听器。

面临的问题是:

    应用已注册到 GCM 应用已终止 设备收到推送通知,我已经可以看到通知了。

但我无法获得WLEventSourceListenerinvoked... 因为我需要在subscribe 之前获得connect!这对我来说没有任何意义 - 因为我们已经在客户端控制台 (DDMS) 中显示了通知。

我知道我可能:

覆盖GCMIntentService 强制WLClient::connect() 触发TIMING

谁能提供更好的解决方案?

10 月 31 日更新

我在使用“WL Android原生推送”示例项目,发现不连接就无法获取到回调WLEventSourceListener调用。

重现步骤:

    启动示例客户端 点击“连接”连接服务器 连接返回成功,点击“订阅”订阅 在 Eclipse IDE 中,右键单击推送适配器以向客户端发送推送 在客户端,它接收推送消息(显示在 DDMS 控制台日志中)并调用WLEventSourceListener。 杀死应用程序 重新发送推送 推送消息显示在 DDMS 控制台日志中,并在通知栏中显示通知。 单击通知时启动应用程序。 再次单击连接按钮时会调用WLEventSourceListener

问题来了。在步骤 9 中,推送消息到达客户端,但在步骤 10 中,必须调用 connect 才能调用 WLEventSourceListener。有没有办法在不连接的情况下获取消息?

【问题讨论】:

【参考方案1】:

为了订阅推送通知,应用程序需要连接到 Worklight Server。因此,虽然应用程序也可以离线工作,但它至少需要“在线”一次,并在连接到 Worklight Server 时完成订阅过程。

Worklight 服务器分派通知,然后通过 Google 的 GCM 服务,最终将其发送到注册的设备。

然后,listener 的目的是将收到的通知传递给应用程序,打开它并让应用程序逻辑处理(显示)它。

事件源通知 绑定到用户 - 这就是 IBM 提供的示例应用程序的实现方式 - 这意味着只有在用户登录后,发送给该用户的通知将显示用户。登录通常需要对用户进行身份验证,这是针对 Worklight Server 完成的,这意味着需要连接

例如,假设有 2 个用户使用相同的设备。用户 #1 收到通知,但用户 #2 当前正在使用该设备。如果用户 #2 将在没有身份验证的情况下打开应用程序,则用户 #2 将收到实际上是为用户 #1 发送的通知。


这带来了以下问题:

    您的应用程序的场景是什么? 您的情况是否需要身份验证?

如果不需要身份验证,那么您需要查看广播标签 通知类型。这些通知类型将允许调用回调没有连接要求

注意:对于上述通知类型,您必须至少使用 Worklight 6.2。 你可以在这里阅读更多关于这些的信息:http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.dev.doc/admin/c_push_notification.html

【讨论】:

感谢您的回复和编辑。我了解,客户端至少应连接一次以注册 GCM 服务。而且“我也不相信它需要连接到工作灯服务器才能接收到达设备的通知”。但我找不到“获取到达通知”的 API。这就是我问这个问题的原因。我将使用教程示例代码做更多的实验。稍后再谈。 见幻灯片 #26 @public.dhe.ibm.com/software/mobile-solutions/worklight/docs/… 非常感谢您的耐心和解答。

以上是关于在没有 WLClient::connect() 的情况下接收 GCM 推送的主要内容,如果未能解决你的问题,请参考以下文章

在没有库的情况下制作矩阵/在列表中没有任何内容的情况下插入嵌套列表

在没有隐藏溢出的情况下,transitionend 事件在 FireFox 中没有持续触发

有没有办法在没有大括号的 tsx typescript 代码中进行评论?

在没有池的情况下自动释放 - 没有启动新线程

在没有可可的情况下集成 Firebase 没有这样的模块“Firebase”?

有没有办法在没有活动的情况下使用 Viewpager 实现 TabLayout?