2014-02-18 200 views
6

我已配置客户端Android谷歌云消息传递(GCM)来接收推送通知,但我不能配置一个服务器在Java中发送通知到设备。我怎么能?发送推送通知GCM由java

+1

你需要在互联网的某个地方土地配置的服务器,如使用谷歌应用程序引擎,做服务器端的工作。 – wattostudios

+0

是的,我有一台服务器使用套接字连接到设备,但我无法从其他服务器向GCM服务器发送通知。 – user3302527

+1

如果您已经有服务器,请发布无法使用的代码,我们会尽力为您解决。你的问题太广泛了 - 我们需要先看看你试图去做什么。 – wattostudios

回答

15

您可以使用gcm-server.jar其中包含用于GCM消息传递的辅助方法。 要获得此罐子,您可以安装“[已弃用] Google云消息传递Android库”通过Android SDK Manager。不要让这个不赞成的名字让你感到困惑。只有客户端部分被弃用,而不是服务器端。
安装完成后,您可以在"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; 
+0

它工作。谢谢! – user3302527

+0

如果它有效,你应该考虑接受答案。这对其他人很有用:) – sinu

+0

这就是我正在寻找的,感谢你的朋友,你已经节省了我的时间。 :) –

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); 
       } 

}