如果重新加载应用程序,WL.Client.Push.isSubscribed() 将返回 false
Posted
技术标签:
【中文标题】如果重新加载应用程序,WL.Client.Push.isSubscribed() 将返回 false【英文标题】:WL.Client.Push.isSubscribed() returns false if app reloaded 【发布时间】: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 提供的推送通知示例项目,您是否能够重现相同的行为。 【参考方案1】:回答我自己的问题。
事实证明,问题在于我的应用在启动时显式调用了 WL.Client.login("SampleAppRealm")。未配置环境安全测试的应用描述符环境设置。
当我将安全测试添加到应用程序描述符时,isSubscribed() 在应用程序重新启动后返回正确答案。有趣的是,与 Push 相关的所有其他事情都可以在 WL.Client.login() 触发的身份验证中正常工作
我找不到任何关于应用程序描述符中设置的要求的文档,因此很难确定这是否是用户错误。至少,文档可以在这方面受到打击。
【讨论】:
以上是关于如果重新加载应用程序,WL.Client.Push.isSubscribed() 将返回 false的主要内容,如果未能解决你的问题,请参考以下文章