通过java发送推送通知GCM [关闭]

Posted

技术标签:

【中文标题】通过java发送推送通知GCM [关闭]【英文标题】:Send push notification GCM by java [closed] 【发布时间】:2014-02-18 12:00:32 【问题描述】:

我已配置客户端 android Google Cloud Messaging (GCM) 以接收推送通知,但我无法在 java 中配置服务器以向设备发送通知。我怎么可能?

【问题讨论】:

您需要在互联网的某处配置服务器,例如使用 Google App Engine 来完成服务器端工作。 是的,我有一台使用套接字连接到设备的服务器,但我无法从另一台服务器向 GCM 服务器发送通知。 如果您已经有服务器,请发布不起作用的代码,我们会尽力为您修复。你的问题太宽泛了——我们需要先看看你尝试做什么。 如何使用 Google Cloud Messaging (GCM) 注册我的 Android 设备。我搜索了一整天,没有找到任何东西。请帮帮我 【参考方案1】:

您可以使用gcm-server.jar,其中包含用于 GCM 消息传递的辅助方法。 要获取此 jar,您可以通过 Android SDK Manager 安装 "[Deprecated]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;

【讨论】:

成功了。谢谢! 如果有效,您应该考虑接受答案。它对其他人有用:) 这是我一直在寻找的,谢谢你节省了我的时间。 :) 您好,我使用 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)... 我下载了 gcm.server.jar 文件并将其添加为库。提前致谢!【参考方案2】:

对于 """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);
                


【讨论】:

以上是关于通过java发送推送通知GCM [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何接收应用程序停止或设备关闭时发送的 GCM 推送通知?

GCM webpush 在后台

未收到 Ionic Cloud 推送 GCM 通知

如何使用 GCM 和 java 向多个设备发送推送通知

如何通过 GCM 向 iOS 设备发送推送通知?

如何使用 XHR (Ajax) 通过 GCM 发送推送通知