如果重新加载应用程序,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的主要内容,如果未能解决你的问题,请参考以下文章

IBM MobileFirst 6.3 在应用程序启动时触发推送事件源回调

实时重新加载表格视图

在 Ionic 中更改 HTML 时避免整页重新加载

重新加载时保持视图状态

尝试重新加载部分时出现断言失败错误

React-native 运行和重新加载应用程序显示空白屏幕