我已经配置了一个客户端的安卓Google Cloud Messaging (GCM)来接收推送通知,但是我无法在Java中配置服务器以向设备发送通知。我该怎么做?
我已经配置了一个客户端的安卓Google Cloud Messaging (GCM)来接收推送通知,但是我无法在Java中配置服务器以向设备发送通知。我该怎么做?
您可以使用gcm-server.jar,它包含GCM消息的帮助方法。
要获取此jar文件,您可以通过Android SDK管理器安装"[已弃用]Google Cloud Messaging for Android Library"。不要让已弃用的名称使您感到困惑。仅客户端部分已弃用,而服务器端没有。
安装后,您可以在"ADT_SDKROOT\sdk\extras\google\gcm"
中找到它。示例文件夹包含一个非常易于理解的演示服务器。
发送GCM消息只涉及几行代码:
final String GCM_API_KEY = "yourKey";
final int retries = 3;
final String notificationToken = "deviceNotificationToken";
Sender sender = new Sender(GCM_API_KEY);
Message msg = new Message.Builder().build();
try {
Result result = sender.send(msg, notificationToken, retries);
if (StringUtils.isEmpty(result.getErrorCodeName())) {
logger.debug("GCM Notification is sent successfully");
return true;
}
logger.error("Error occurred while sending push notification :" + result.getErrorCodeName());
} catch (InvalidRequestException e) {
logger.error("Invalid Request", e);
} catch (IOException e) {
logger.error("IO Exception", e);
}
return false;
Exception in thread “main” java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException at NotificationSenderClass.main(NotificationSenderClass.java:16) Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306)...
- LoveMeSomeFood为了创建一个“test”Java控制台应用程序,请添加GCM jar文件。
try{
Sender sender = new Sender("<senderId>");
ArrayList<String> devicesList = new ArrayList<String>();
devicesList.add(<deviceId>);
String data = "<data>";
Message message = new Message.Builder()
.collapseKey("1")
.timeToLive(3)
.delayWhileIdle(true)
.addData("message",
data)
.build();
MulticastResult result = sender.send(message, devicesList, 1);
sender.send(message, devicesList, 1);
System.out.println(result.toString());
if (result.getResults() != null) {
int canonicalRegId = result.getCanonicalIds();
if (canonicalRegId != 0) {
}
} else {
int error = result.getFailure();
System.out.println(error);
}
}