仅从android gcm接收上次通知。。。?

仅从android gcm接收上次通知。。。?,android,notifications,push-notification,google-cloud-messaging,Android,Notifications,Push Notification,Google Cloud Messaging,我成功地在asp.net中安装了android gcm和相关的服务器端工作。 但我的问题是,它只显示服务器发送的最后一个通知 我希望显示的所有通知都来自同一个折叠\u键 或者我在gcm代码或服务器端代码中更改的内容,以显示发送到特定设备的所有消息 我的服务器端代码如下 public void SendCommandToPhone(String sCommand) { String DeviceID = ""; DeviceID = "APA91bF9SSDEp-UPU8Uwvct

我成功地在asp.net中安装了android gcm和相关的服务器端工作。 但我的问题是,它只显示服务器发送的最后一个通知

我希望显示的所有通知都来自同一个折叠\u键 或者我在gcm代码或服务器端代码中更改的内容,以显示发送到特定设备的所有消息

我的服务器端代码如下

public void SendCommandToPhone(String sCommand)
{
    String DeviceID = "";
    DeviceID = "APA91bF9SSDEp-UPU8UwvctGt5ogfrSw0UdilTWlCujqItHcr-eiPJ31ZDI-IeqTbLr92ZOPF31bXtB1_5gNEPHAq82N4ji0stm4cy9U0Yuk0Awhjl9PS02okuc9rRhJobkgOt-ofm5Br0KR-Y";
    WebRequest tRequest;
    tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
    tRequest.Method = "post";
    //tRequest.ContentType = "application/json";
    tRequest.ContentType = "application/x-www-form-urlencoded";
    tRequest.Headers.Add(string.Format("Authorization: key={0}", "AIzaSyBgCKDhyHnRmmu8jCfmupHVJA8cVkIa-XEZS"));
    String collaspeKey = Guid.NewGuid().ToString("n");
    String postData = string.Format("registration_id={0}&data.message={1}&collapse_key={2}", DeviceID, "YourMessage", collaspeKey);
    Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    tRequest.ContentLength = byteArray.Length;
    Stream dataStream = tRequest.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
    WebResponse tResponse = tRequest.GetResponse();
    dataStream = tResponse.GetResponseStream();
    StreamReader tReader = new StreamReader(dataStream);
    String sResponseFromServer = tReader.ReadToEnd();
    tReader.Close();
    dataStream.Close();
    tResponse.Close();
}
在android应用程序中,消息端代码如下(上下文arg0,意图arg1)

从官方

折叠\u键

用于折叠一组相似消息的任意字符串 当设备脱机时,只有最后一条消息被发送到 客户。这样做是为了避免向服务器发送太多消息 当它恢复在线时,请给它打电话。请注意,由于没有担保 根据消息的发送顺序,“最后一条”消息可能不存在 实际上是应用服务器发送的最后一条消息

因此,如果希望设备接收所有消息,则可以对每条消息使用不同的折叠键

EDIT1:通知问题

以下是您的通知代码:

notificationManager.notify(0, note);
根据方法的java文档。它发布一个通知,显示在状态栏中如果应用程序已经发布了具有相同id的通知,但尚未取消,则该通知将被更新的信息替换。


因此,在
notificationManager.notify()
方法调用中使用不同的ID,以在
notification
栏中发布多个
notification

我在尝试对应用程序实施GCM时遇到了相同的问题

我在第三部分应用程序中使用了C#。起初,我也用同样的方法 为每个通知折叠\u键。这就是为什么我只收到最后一封信 一个

因此,当您调用通过GCM服务器向设备发送通知的函数时,请尝试使用不同的折叠密钥。
例如,尝试使用当前时间。

感谢您的回复。但正如您可以在我的服务器端代码中发现的,我每次都使用唯一密钥(GUID)。但当设备成为onlinewippy时,我的通知栏中仍然只有一条消息,为了按照您的指示实现这一点,我更改了notificationManager.notify(计数,注意);谢谢,这就是我想要的,谢谢。。。!?!请注意,GCM使用不同的折叠键一次最多只能保存4条消息。如果在任何给定时间使用超过4个折叠键,则会丢失一些消息。(哪些消息被丢弃是未定义的。)@praful Thanx,我还使用notify方法中的count克服了这个问题。但是现在面临一个奇怪的问题。如果我的设备处于关闭状态或未联机状态,则当设备处于打开状态或联机状态时,它将接收以前发送的所有通知。但我不明白。我已经包括了唤醒锁,同一个设备正在接收其他应用程序的推送通知。你能帮我吗?嗨,阿吉特。。请将您的问题作为一个单独的帖子发布,这样其他人也可以在这方面帮助您,我也会对您的问题有更清楚的背景。。正如Lorne在评论中所说,“GCM一次最多只能容纳4条带有不同折叠键的消息。如果您在任何给定时间使用超过4个折叠键,您将丢失一些消息。(哪些消息被丢弃是未定义的。)”感谢回复zim,但正如您在我的服务器端c#编码中所看到的,它使用GUID作为折叠键。所以每次都是独一无二的。
notificationManager.notify(0, note);