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.BusyIndicator 文本
IBM Worklight 6.0 - 无法访问 Worklight 服务器