仅从android gcm接收上次通知。。。?
我成功地在asp.net中安装了android gcm和相关的服务器端工作。 但我的问题是,它只显示服务器发送的最后一个通知 我希望显示的所有通知都来自同一个折叠\u键 或者我在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
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);