用Java发送GCM推送通知

6

我已经配置了一个客户端的安卓Google Cloud Messaging (GCM)来接收推送通知,但是我无法在Java中配置服务器以向设备发送通知。我该怎么做?


1
你需要在互联网上某个地方配置一个服务器,比如使用Google App Engine,来执行服务器端的工作。 - wattostudios
是的,我有一个通过套接字连接设备的服务器,但我无法从另一个服务器向GCM服务器发送通知。 - user3302527
1
如果您已经有了服务器,请发布不起作用的代码,我们会尝试为您修复它。您的问题太广泛了 - 我们需要先看看您尝试做了什么。 - wattostudios
如何使用Google Cloud Messaging(GCM)注册我的Android设备。我搜索了一整天也没有找到任何东西。请帮帮我。 - user4798111
2个回答

15

您可以使用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;

它起作用了。谢谢! - user3302527
如果它起作用了,你应该考虑接受这个答案。这对其他人也会有用 :) - sinujohn
这正是我在寻找的,谢谢伙计,你帮我节省了时间。 :) - Jugal Panchal
嗨,我在Eclipse中尝试了这个,但出现了错误。有什么想法如何解决吗?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
我下载了gcm.server.jar文件并将其添加为库。提前谢谢! - LoveMeSomeFood
我在哪里传递我的项目ID?接收设备的GCMRegID? - vivex

1

为了创建一个“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);
                }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接