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

时间:2014-10-31 15:25:01

标签: android push-notification ibm-mobilefirst

我们可以WLPush::subscribe()没有WLClient::connect()吗?

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

面临的问题是:

  1. 该应用已注册GCM
  2. 该应用已终止
  3. 设备收到推送通知,我已经可以看到通知。
  4. 但是我无法调用WLEventSourceListener ...因为我需要在connect之前subscribe!这对我没有任何意义 - 因为我们已经在客户端控制台(DDMS)中显示了通知。

    我知道我可能会:

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

    有人可以提供更好的解决方案吗?

    于10月31日更新

    我正在使用“WL Android native push”示例项目,发现在没有连接的情况下调用WLEventSourceListener是不可能的。

    重现的步骤:

    1. 启动示例客户端
    2. 单击“连接”以连接到服务器
    3. 连接成功返回,点击“订阅”即可订阅
    4. 在Eclipse IDE中,右键单击推送适配器以将推送发送到客户端
    5. 在客户端,它接收推送消息(显示在DDMS控制台日志上)并调用WLEventSourceListener
    6. 杀死应用
    7. 重新发送推送
    8. 推送消息显示在DDMS控制台日志中,并在通知栏中显示通知。
    9. 单击通知时启动应用程序。
    10. 再次点击连接按钮时调用WLEventSourceListener
    11. 这是一个问题。在步骤9中,推送消息到达客户端,但是在步骤10中,必须调用connect以调用WLEventSourceListener。有没有办法在没有连接的情况下获取消息?

1 个答案:

答案 0 :(得分:1)

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

Worklight Server会调度通知,然后通过Google的GCM服务,最终将其发送到注册的设备。

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

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

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


这提出了以下问题:

  1. 您申请的方案是什么?
  2. 您的案例是否需要身份验证?
  3. 如果不需要身份验证,则需要查看广播标记通知类型。这些通知类型允许在没有连接要求的情况下调用

    注意:对于上述通知类型,您必须至少使用Worklight 6.2 您可以在此处详细了解这些内容:http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.dev.doc/admin/c_push_notification.html