1

我有一个在 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。

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

4

1 回答 1

0

回答我自己的问题。

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

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

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

于 2013-08-14T21:19:25.093 回答