【发布时间】:2013-07-10 21:38:10
【问题描述】:
我有一个 Worklight 混合应用程序,其中包含在 android 中运行的基本推送通知。如果应用程序正在运行并且在推送通知时处于焦点状态,那么它的行为与我预期的完全一样。我的应用程序中的通知回调被调用,它会弹出一个 SimpleDialog。 一切都好。
如果我通过单击主页按钮关闭应用程序,并且有新消息到达,我会在 Android 通知区域中看到通知,当我单击 Android 通知列表中的项目时,该项目会从列表(但应用程序不会重新成为焦点)如果我随后从“应用程序”菜单启动我的应用程序,它就位于我离开它的位置并且 SimpleDialog 正在显示。 (我的通知处理程序被调用)大部分都很好,但是当我在 android 通知列表中选择通知时,我希望该应用程序能够成为焦点。
如果我通过单击后退按钮关闭应用程序,并且收到一条新消息,我会在 Android 通知区域中看到通知,当我单击 Android 通知列表中的项目时,该项目会从列表(但应用程序没有重新成为焦点)如果我随后从“应用程序”菜单启动我的应用程序,它会重新启动应用程序(我必须再次登录)并且我的通知处理程序永远不会被调用。 不太好。
如果我在发送通知时强行停止应用程序或关闭手机(但保留订阅),则通知永远不会显示在手机上。当我重新启动手机时,我在 Android 通知区域中看不到它,并且当我启动应用程序时,我的应用程序中的通知处理程序永远不会被调用。 非常糟糕。
这是预期的行为吗?
我正在使用 Worklight 5.0.6.1,并且我在平台 4.2.2 的 Android 模拟器和平台 4.1.2 的物理手机上看到了这种行为
EDT:添加代码。
适配器:
WL.Server.createEventSource({
name : "MyPushEventSource",
securityTest: "MyApp-strong-mobile-securityTest"
});
function submitNotification(userId) {
var userSubscription = WL.Server.getUserNotificationSubscription(
'MyPushNotification.MyPushEventSource', userId);
if (userSubscription == null) {
return {
result : "No subscription found for user :: " + userId
};
}
var notification = WL.Server
.createDefaultNotification("There's work to be done!", 1, {});
WL.Server.notifyAllDevices(userSubscription, notification);
return {
result : "Notification sent to user :: " + userId
};
}
在应用程序中:
WL.Client.Push.onReadyToSubscribe = function() {
var pushSubscribe_Success_Callback = function(response) {
WL.Logger.debug("Enter: pushSubscribe_Success_Callback");
};
var pushSubscribe_Fail_Callback = function(response) {
WL.Logger.debug("Enter: pushSubscribe_Fail_Callback");
};
var pushNotificationReceived = function(props, payload) {
WL.SimpleDialog.show("Notification", props.alert, [
{ text : "OK" }]);
};
WL.Client.Push.registerEventSourceCallback("myPush",
"MyPushNotification", "MyPushEventSource",
pushNotificationReceived);
if (!WL.Client.Push.isSubscribed("myPush")) {
WL.Client.Push.subscribe("myPush", {
onSuccess : pushSubscribe_Success_Callback,
onFailure : pushSubscribe_Fail_Callback
});
}
};
正如我所说,如果应用程序处于焦点位置,这一切都可以顺利进行,所以我知道我的 Google 消息传递帐户和密钥设置正确。但是由于某种原因,如果在发布通知时应用程序没有处于焦点位置,我会看到意想不到的结果。
【问题讨论】:
-
"这是预期的行为吗?" ——当然是“强制停止”部分。
-
我不这么认为。我试过这个。见下文。也许是“强制关闭”部分,但在设备断电时它工作正常。
-
看起来通知代码实际上工作正常,(相同的代码在一个简单的应用程序中表现完美)但我的应用程序中还有其他事情导致我看到的行为.我需要做更多的研究来确定它,但基本的推送通知行为不是问题。
标签: android push-notification ibm-mobilefirst