如何处理推送通知时,应用程序恢复?如何处理推送通知时,应用程序恢复?(How to handle P

2019-05-12 07:58发布

试图处理使用推送通知PushPlugin 。 以下是我的代码。

onNotificationGCM: function(e) {
    switch( e.event )
    {
        case 'registered':
            if ( e.regid.length > 0 )
            {
                console.log("Regid " + e.regid);
                //alert('registration id = '+e.regid);
                sDeviceId = e.regid;
                //alert(sDeviceId);
            }
            break;

        case 'message':
            // this is the actual push notification. its format depends on the data model from the push server
            alert('message = '+e.message);
            alert('message = '+e.message+' msgcnt = '+e.msgcnt);
            if ( e.foreground )
            {
                alert("Notification Received");

            }
            else
            {  // otherwise we were launched because the user touched a notification in the notification tray.
                if ( e.coldstart )
                {
                    alert("coldstart");
                }
                else
                {
                    alert("other than coldstart");
                }
            }
            break;

        case 'error':
            alert('GCM error = '+e.msg);
            break;

        default:
            alert('An unknown GCM event has occurred');
            break;
    }
}

所以一切工作。

  • 当应用程序在前台我收到警报。

  • 当点击收到消息时通知应用程序打开和我收到警报。(冷启动)

  • 当应用程序在后台,然后通知单击应用程序进来前景和我收到警报。

但是,当我把应用背景,当我把应用前推送通知到达时没有点击通知我没有得到任何alert.So如何处理这种情况?

Answer 1:

我所面临的同样的问题。 简单地说, PushPlugin现在不支持此功能。 但是你可以很容易修改,以满足您的需求

怎么现在的工作

当通过插件的收到消息GCMIntentService , 的onMessage被调用。 这种方法获取所有传递给它的附加参数,它们保存在extras 。 在此之后,如果应用程序是在前台,这个功能只需通过extras调用你sendExtras 。 否则,它调用createNotification ,这实际上会在状态栏中的通知。

你的问题

从我从你的问题的理解,如果让在状态栏的通知后,你打开你的应用,而无需触及该通知没有收到警报。

这是发生了什么:

  1. GCMIntentService接收到消息
  2. 由于您的应用程序是在background ,PushPlugin调用createNotification
  3. 当您启动应用程序,它会毫无戒备,因为你尚未触及的通知状态栏

您会收到警报,如果你感动了通知,因为这样的通知,意图将唤醒你的应用程序。 当你的应用醒来时,它看起来对缓存的演员 ,然后再次调用它们传递给你的应用程序sendExtras

解决方案

我没有测试,但我坚信,如果您编辑插件,以sendExtras之前(或之后)你叫createNotification ,数据将您的应用程序缓存无论你触摸通知或滑开。

protected void onMessage(Context context, Intent intent) {
    Log.d(TAG, "onMessage - context: " + context);
    // Extract the payload from the message
    Bundle extras = intent.getExtras();
    if (extras != null)
    {
        // if we are in the foreground, just surface the payload, else post it to the statusbar
        if (PushPlugin.isInForeground()) {
            extras.putBoolean("foreground", true);
            PushPlugin.sendExtras(extras);
        }
        else {
            extras.putBoolean("foreground", false);
            // Send a notification if there is a message
            if (extras.getString("message") != null && extras.getString("message").length() != 0) {
                createNotification(context, extras);
            }
        }
    }
}

修改上面的部分:

protected void onMessage(Context context, Intent intent) {
    Log.d(TAG, "onMessage - context: " + context);
    Bundle extras = intent.getExtras();
    if (extras != null)
    {
        if (PushPlugin.isInForeground()) {
            extras.putBoolean("foreground", true);
        }
        else {
            extras.putBoolean("foreground", false);
            if (extras.getString("message") != null && extras.getString("message").length() != 0) {
                createNotification(context, extras);
            }
        }
        // call sendExtras always
        PushPlugin.sendExtras(extras);
    }
}


Answer 2:

当应用程序在后台也许你需要通知playload保存到 ,然后在应用程序的事件从阅读并显示警告消息。

这里有一个类似的问题链接



文章来源: How to handle Push notification when application is resumed?