如果app重新加载,WL.Client.Push.isSubscribed()返回false

时间:2013-08-13 22:43:11

标签: ibm-mobilefirst

我使用Push on Android有一个简单的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。

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

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。

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

当我将安全测试添加到应用程序描述符时,isSubscribed()会在重新启动应用程序后返回正确的答案。有趣的是,与Push有关的所有其他工作都很好,只需通过WL.Client.login()

触发的身份验证

我无法找到有关应用程序描述符中的设置的此要求的任何文档,因此很难确定这是否是用户错误。至少,文档可能会在这个领域被打破。