我使用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。
如何在应用重启时获得正确的订阅状态?
答案 0 :(得分:0)
回答我自己的问题。
事实证明问题是我的应用程序在启动时显式调用了WL.Client.login(“SampleAppRealm”)。未配置环境安全测试的应用程序描述符环境设置。
当我将安全测试添加到应用程序描述符时,isSubscribed()会在重新启动应用程序后返回正确的答案。有趣的是,与Push有关的所有其他工作都很好,只需通过WL.Client.login()
触发的身份验证我无法找到有关应用程序描述符中的设置的此要求的任何文档,因此很难确定这是否是用户错误。至少,文档可能会在这个领域被打破。