android - IBM Worklight 5.0.6.1 - 手机/应用程序关闭时未收到推送通知

标签 android push-notification ibm-mobilefirst

我有一个 Worklight 混合应用程序,它具有在 Android 中运行的基本推送通知。如果应用程序正在运行并且在推送通知时处于焦点状态,那么它的行为完全符合我的预期。我的应用程序中的通知回调被调用,它弹出一个 SimpleDialog。 一切顺利

如果我通过单击主页按钮关闭应用程序,并且有新消息到达,我会在 Android 通知区域中看到通知,当我单击 android 通知列表中的项目时,该项目会从列表(但该应用程序没有重新聚焦)如果我随后从“应用程序”菜单启动我的应用程序,它会位于我离开它的位置并且显示 SimpleDialog。 (调用了我的通知处理程序)大部分情况下都很好,但我希望当我在 android 通知列表中选择通知时,该应用程序会成为焦点。

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

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

这是预期的行为吗?

我使用的是 Worklight 5.0.6.1,我在 4.2.2 平台的 Android 模拟器和 4.1.2 平台的实体手机上看到了这种行为

美国东部时间:添加代码。

适配器:

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 消息传递帐户和 key 。但出于某种原因,如果在发布通知时应用未处于焦点状态,我会看到意想不到的结果。

最佳答案

好的。我花了足够长的时间才弄明白这一点,所以万一有人跟进,这就是问题所在:

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

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

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

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

关于android - IBM Worklight 5.0.6.1 - 手机/应用程序关闭时未收到推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581341/

相关文章:

javascript - 为什么下面的按钮 switch case javascript 不起作用?

android - 当数据在android中完成加载时如何防止Webview向上滚动

java - 使用 Web 服务在 Android 上推送通知

ios - 如何处理点击推送通知 ios

ios - 模拟器上的设备 token 请求没有响应

ibm-mobilefirst - IBM Worklight - Apple 的 App Store 指南允许直接更新吗?

android - 如何包装textview自动调整大小的内容

Android wifi地理围栏/后台位置查询

ios - 如何使用 FCM 为富文本通知创建有效负载

tomcat - IBM Worklight v6.0- "Error creating bean with name ' taskManager' 在 URL 中定义”