【问题标题】:WL.Client.Push.isSubscribed() returns false if app reloaded如果重新加载应用程序,WL.Client.Push.isSubscribed() 将返回 false
【发布时间】:2013-08-13 22:43:11
【问题描述】:

我有一个在 Android 上使用 Push 的简单 Worklight V6 应用程序。当应用程序启动时,它会针对 SampleAppRealm 进行基于表单的登录。然后它会在必要时订阅:

function checkSubscribed() {

    var subscribed = WL.Client.Push.isSubscribed("myPush");
    alert("Is subscribed: " + subscribed);
    return subscribed;
}
WL.Client.Push.onReadyToSubscribe = function() {

    WL.Client.Push.registerEventSourceCallback("myPush", "PushAdapter",
            "MyEventSource", function(props, payload) {
                alert("Received message: " + props.alert);
            });

    if (!checkSubscribed()) {

        WL.Client.Push.subscribe("myPush", {
            onSuccess : function() {
                alert("subscription succeeded!");
            },
            onFailure : function() {
                alert("subscription failed!");
            }
        });
    }
};

这一切都很好。应用启动,登录,onReadyToSubscribe() 触发,注册回调,检查订阅(为假),订阅(成功)

我可以在 Worklight 控制台中看到客户端订阅,如果我调用适配器,我会在应用程序中收到通知。

如果我在手机上点击主页按钮执行其他操作,然后返回应用程序,它仍然知道它已订阅。如果我在应用程序处于后台时推送消息,我会在 Android 通知区域看到它,当我返回它时会在应用程序中看到它。都很好。

问题是当我运行该应用程序时,它已被订阅,我点击了 Android 后退按钮。应用关闭,但管理控制台仍显示订阅的客户端,事实上,如果我在应用关闭的情况下推送消息,它会显示在 Android 通知区域中。 (到目前为止一切顺利)

但是当我启动应用程序时,它会通过身份验证步骤,触发 onReadyToSubscribe(),调用 checkSubscribed() 并且 WLClient.Push.isSubscribed() 返回 false。

如果我在订阅了应用的情况下重启手机,当应用重启时,WLClient.Push.isSubscribed() 返回 false。

如何在应用重启时获得正确的订阅状态?

【问题讨论】:

  • 我的第一个问题是,如果使用 IBM Worklight Getting Started 提供的推送通知示例项目,您是否能够重现相同的行为。

标签: ibm-mobilefirst


【解决方案1】:

回答我自己的问题。

事实证明,问题在于我的应用在启动时显式调用了 WL.Client.login("SampleAppRealm")。未配置环境安全测试的应用描述符环境设置。

当我将安全测试添加到应用程序描述符时,isSubscribed() 在应用程序重新启动后返回正确答案。有趣的是,与 Push 相关的所有其他事情都可以在 WL.Client.login() 触发的身份验证中正常工作

我找不到任何关于应用程序描述符中设置的要求的文档,因此很难确定这是否是用户错误。至少,文档可以在这方面受到打击。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多