我成功如何在asp.net中成功设置android gcm和相关服务器端工作。 但我的问题是,它只显示服务器发送的最后通知。
我希望所有通知都显示来自同一 collapse_key 或者我在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应用程序端代码中的如下onMessage(Context arg0,Intent arg1)
NotificationManager notificationManager = (NotificationManager) arg0
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification note = new Notification(R.drawable.ic_launcher,
"meaNexus Notification", System.currentTimeMillis());
Intent notificationIntent = new Intent(arg0, Main.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(arg0, 0,
notificationIntent, 0);
note.setLatestEventInfo(arg0, String.valueOf(R.string.app_name), message, pendingIntent);
note.number = count++;
note.defaults |= Notification.DEFAULT_SOUND;
note.defaults |= Notification.DEFAULT_VIBRATE;
note.defaults |= Notification.DEFAULT_LIGHTS;
note.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, note);
答案 0 :(得分:10)
来自官方documentation
collapse_key
用于折叠一组相似消息的任意字符串 当设备离线时,只有最后一条消息被发送到 客户端。这是为了避免向该邮件发送太多邮件 电话重新上线时。请注意,因为没有保证 在发送消息的顺序中,“最后”消息可能不是 实际上是应用程序服务器发送的最后一条消息。
因此,如果您希望设备接收所有消息,则可以为每条消息使用不同的折叠键。
EDIT1:通知问题
以下是您的通知代码:
notificationManager.notify(0, note);
根据notifiy()方法的java文档。它发布要在状态栏中显示的通知。 如果您的应用程序已经发布了具有相同ID的通知但尚未取消,则该通知将被更新的信息替换。
因此,在notificationManager.notify()
方法调用中使用不同的ID可在notification
栏中发布多个notification
..
答案 1 :(得分:0)
当我尝试将GCM应用到我的应用程序时,我遇到了同样的问题。
我使用C#进行第三部分应用。起初,我使用了相同的 每个通知的collapse_key。这就是为什么我只收到最后一个 之一。
因此,当您调用通过GCM Server向设备发送通知的功能时,请尝试使用其他collapse_key。 例如,尝试使用curentTime。