IBM Worklight 5.0.6.1 - 关闭手机/应用程序时未获得推送通知

时间:2013-07-10 21:38:11

标签: android push-notification ibm-mobilefirst

我有一个Worklight混合应用程序,在android中使用基本推送通知。如果应用程序在推送通知时正在运行并处于焦点,则其行为与我期望的完全相同。我的应用程序中的通知回调被调用,它弹出一个SimpleDialog。 一切都好

如果我通过单击主页按钮关闭应用程序,并且有新消息到达,我会在Android通知区域中看到通知,当我点击Android通知列表中的项目时,该项目将被解除列表(但应用程序没有回到焦点)如果我然后从应用程序菜单启动我的应用程序,它就坐在我离开它的位置,并显示SimpleDialog。 (我的通知处理程序被调用)非常好,但我期望在我在android通知列表中选择通知时,应用程序会成为焦点。

如果我通过单击后退按钮关闭应用程序,并且有新消息到达,我会在Android通知区域中看到通知,当我点击Android通知列表中的项目时,该项目将被解除列表(但应用程序没有回到焦点)如果我然后从应用程序菜单启动我的应用程序,它会启动应用程序新的(我必须再次登录),我的通知处理程序永远不会被调用。 不太好

如果我强制停止应用程序,或者在发送通知时关闭手机(但保留订阅),则通知永远不会显示在手机上。当我重新启动手机时,我在Android Notification区域没有看到它,并且当我启动应用程序时,我的应用程序中的通知处理程序从未被调用。 非常糟糕

这是预期的行为吗?

我正在使用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消息传递帐户和密钥。但出于某些原因,如果在发布通知时应用程序不在焦点上,我会看到意想不到的结果。

2 个答案:

答案 0 :(得分:7)

行。我花了很长时间才弄清楚这一点,所以如果有人跟进,这就是问题所在:

我通过打开[android project] /res/values/strings.xml并更改app_name的值来重命名该应用程序。

这会导致应用程序在选择推送通知时无法启动。

我通过将app_name更改回其原始值并为友好名称添加名为app_label的新String来解决此问题。然后我进入AndroidManifest.xml,并将android:label =“@ string / app_name”的2个实例更改为:android:label =“@ string / app_label”和sha-zam!我的应用程序有一个友好的名称,然后单击启动它的通知。

为了更好的衡量,我将strings.xml中的push_notification_title修改为友好名称,这改善了通知的显示,并没有打破应用程序的启动。

答案 1 :(得分:0)

所有四种情况都符合我的预期 使用Worklight v5.0.6.1和the accompaning PushNotifications project进行测试。

使用GCM密钥和GCM ID设置项目后,部署适配器和应用程序并在运行Android 4.2.2的Galaxy S4上启动应用程序:

  1. 我已登录,订阅并发送通知
  2. 我已登录,订阅,点按“主页”按钮将应用程序发送到后台并发送通知
  3. 我已登录,已暂停,点按“后退”按钮以关闭应用并发送通知
  4. 我已登录,订阅,关闭了应用,关闭了设备

    1. 当应用程序位于前台时,显示收到通知的对话框
    2. 当应用程序在后台时,我收到了通知栏中的通知。点击它会将应用程序带到前台,并显示收到通知的对话框
    3. 应用程序关闭时,我收到了通知栏中的通知。点击后启动应用程序,登录收到的通知对话框后显示
    4. 打开设备,等待它连接到网络,我在通知栏中收到通知。点击它启动应用程序,登录后显示收到通知的对话框

    5. 如果这是您自己编写的推送通知应用,我建议您查看代码。您可以使用示例应用作为指导。