2

我正在尝试使用 phonegap 插件和 GCM(Google Cloud Messaging)服务为我的 Android 应用程序集成推送通知。我基本上已经按照本教程在客户端的所有步骤,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;
         }
    }
    

为了从应用程序服务器发送通知,我使用 HTTP POST 到https://android.googleapis.com/gcm/send,请求正文为 json 格式。

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

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

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

  2. 设备锁定时,通知不会出现在屏幕顶部。

我该如何解决这些问题?我是移动开发的新手,非常感谢您的帮助。提前致谢!

4

2 回答 2

0

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

公共抽象类 WakeLocker { 私有静态 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;
    }
}

还将以下权限添加到您的清单。

 <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
于 2013-10-05T04:26:23.860 回答
0

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

至于第二个问题, 请阅读this

于 2013-10-05T04:29:27.043 回答