IBM Workilght 6.0 - 注销后无法订阅推送通知

Posted

技术标签:

【中文标题】IBM Workilght 6.0 - 注销后无法订阅推送通知【英文标题】:IBM Workilght 6.0 - Cannot subscribe to push notification after logout 【发布时间】:2013-12-31 09:06:06 【问题描述】:

我在使用 android 环境的基于 Worklight 的应用程序中遇到订阅问题。

第一次,当应用程序进行订阅时,一切正常,但是当取消订阅并注销然后尝试再次登录并再次订阅用户时,事情就出错了。

通常情况下,如日志所示,支持通知并且用户取消订阅。但是我收到此错误:

无法订阅,服务器上未更新通知令牌

这是 LogCat:

12-31 09:41:17.220: D/CordovaLog(6293): isSupported : true 12-31 09:41:17.220:D/CordovaLog(6293):isSubscribed:假 12-31 09:41:17.220:E/CPCapp(6293):无法订阅,通知令牌是 未在服务器上更新 12-31 09:41:17.295: D/CPCapp(6293): Clearing 通知订阅。 12-31 09:41:17.300: D/CPCapp(6293): 发送 新的服务器通知令牌 ID。 12-31 09:41:17.300: D/GCMRegistrar(6293):重置 com.CPCapp 12-31 的退避 09:41:17.300: V/GCMRegistrar(6293): 注册应用程序 APP_PACKAGE 发件人 SENDER_NUMBER

我看到这个问题可能与同一问题有关但不确定:IBM Worklight 6.0 - Push subscribing stopped from working

我正在使用 Worklight 6.0、Android 4.1 和 AdapterAuthentication,并将 endUser 作为参数。

【问题讨论】:

您能否使用示例推送通知项目重现相同的行为?登录 > 订阅 > 发送推送 > 取消订阅 > 注销 > 登录 > 订阅。第二次订阅尝试失败还是成功? 我用示例推送通知项目完成了这个过程,并在第二次登录后将此代码放入注销功能WL.Client.logout('PushAppRealm', onSuccess: WL.Client.reloadApp);subscribe按钮仍然disabled 我认为onReadyToSubscribe 没有被调用。这就是用户无法订阅的原因。 【参考方案1】:

基于 cmets,我还使用 push notifications sample project in Worklight 6.1.0 对此进行了测试。

退出和重新登录后应用无法订阅/取消订阅的原因可能与LogCat中出现的这条CordovaPlugin消息有关:

01-02 15:20:13.530:W/CordovaPlugin(27846):尝试发送第二个 ID 的回调:Push66817967 01-02 15:20:13.530: W/CordovaPlugin(27846):结果是: "APA91bHDrNHkbBwVtdrjqHj-KNGnmlMue2heoK7dGIHEnQW6ORJpaFregHRKs9qjUOsuIGue9r3ZfbQvwCQtgGZH9MI7U8gbXmrkrtYgyslHNlQemMjAxK40CuRO78Xw9sTnlrzvEFkA4oZ3PUYLgqmz2"

我已经打开了一个缺陷,它将被调查。

通过执行以下操作,我想出了一种对我有用的解决方法,但请注意:

完成此工作,以便在问题得到解决之前进行最少的应用流测试。

HTML:

<input type="button" id="logoutButton" value="Logout" onclick="logoutFromApp();" />

JavaScript:WL.Client.reloadApp后添加的WL.Client.connect

function logoutFromApp() 
    WL.Client.logout("PushAppRealm", 
        onSuccess: function() 
            WL.Client.reloadApp(); 
            WL.Client.connect(onSuccess: successfulConnect, onFailure: failedConnect);
        ,
        onFailure: function()  
            alert ("Failed logging out");
        
    );


function successfulConnect() 
    WL.Logger.debug ("Connect state: success");


function failedConnect() 
    WL.Logger.debug ("Connect state: failure");

【讨论】:

按照您的建议,我使用 Wireshark 进行了调查,我注意到 JSESSIONID 没有更新,我还通过添加 `WL.Client.connect 尝试了您的代码'但也没有用。 这不应该在生产环境中完成是什么意思? 我上面的代码不是解决方案(它对我有用......);无论如何,请等到我很快更新我的答案... @ghostrider3,请参阅上面我编辑的答案。请告诉我:您是 IBM 客户还是业务合作伙伴? 谢谢@Idan,我是商业伙伴 @ghostrider3,你的公司叫什么名字?谁是客户?它是 IBM 客户吗?

以上是关于IBM Workilght 6.0 - 注销后无法订阅推送通知的主要内容,如果未能解决你的问题,请参考以下文章

从 IBM Workilght Server 获取错误 [它不是函数,它是“对象”。]

IBM Worklight 6.0 - 无法更改默认 WL.BusyIndi​​cator 文本

IBM Worklight 6.0 - 无法访问 Worklight 服务器

使用安全测试的 IBM Worklight 适配器

IBM Worklight 6.0 - 无法将应用程序发布到 Application Center?

IBM Worklight 6.0 - WL.TabBar.addItem 标题参数无法正确使用“null”作为值