旧的推送通知没有出现在Android设备上

时间:2013-10-05 02:31:45

标签: android ios cordova notifications google-cloud-messaging

我正在尝试使用phonegap插件和GCM(Google云消息传递)服务为我的andriod应用集成推送通知。我已基本遵循本教程中客户端http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/的所有步骤,通过phonegap插件注册设备。

  1. 我已经通过git phonegap本地插件添加了phonegap插件,如上面教程的“第1部分:配置你的应用程序以使用PushPlugin”。

  2. 在index.js文件中,我添加了上述教程的“第2部分:使用Google Cloud Messaging服务注册应用程序”中提到的以下方法。

     successHandler: function(result) {
          alert('Callback Success! Result = '+result)
     },
     errorHandler:function(error) {
          alert(error);
     },
     onNotificationGCM: function(e) {
          switch( e.event )
          {
             case 'registered':
                if ( e.regid.length > 0 )
                {
                    console.log("Regid " + e.regid);
                    alert('registration id = '+e.regid);
                }
                break;
    
             case 'message':
                // this is the actual push notification. its format depends on the data model from the push server
                alert('message = '+e.message+' msgcnt = '+e.msgcnt);
             break;
    
             case 'error':
                alert('GCM error = '+e.msg);
                break;
    
             default:
               alert('An unknown GCM event has occurred');
               break;
         }
    }
    
  3. 要从应用程序服务器发送通知,我使用HTTP POST到https://android.googleapis.com/gcm/send,请求正文为json格式。

    {
        “registration_ids” : ["APA....."],
        “data” : {
               “title” : “My Title”,
               “message” : “My Msg”,
               “msgcnt” : “1"
        }
    }
    

    我在设备上正确收到通知。我不确定代码中缺少什么,但我遇到了这些问题。

    1. 在我的设备的通知区域中,我只看到一个接一个地发送多条消息时的最后一条消息。看起来最后一条消息会覆盖旧消息。我希望所有警报在发送时一个接一个地列在设备上。

    2. 设备锁定时,屏幕顶部不会显示通知。

    3. 如何解决这些问题?我是移动开发的新手,我非常感谢你对此的帮助。提前谢谢!

2 个答案:

答案 0 :(得分:0)

用于在设备锁定时获取通知。

公共抽象类WakeLocker {         private static PowerManager.WakeLock wakeLock;

    public static void acquire(Context context) {
        if (wakeLock != null)
            wakeLock.release();

        PowerManager pm = (PowerManager) context
                .getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                | PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "WakeLock");
        wakeLock.acquire();
    }

    public static void release() {
        if (wakeLock != null)
            wakeLock.release();
        wakeLock = null;
    }
}

还要向您的Manifest添加以下权限。

 <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

答案 1 :(得分:0)

新通知可能会覆盖旧通知,因为您在notify方法中使用相同的ID。使用唯一ID,您将收到多个通知。

关于第二个问题,read this