Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GCM演示服务器向设备发送消息时引发401错误_Android_Windows_Eclipse_Tomcat - Fatal编程技术网

Android GCM演示服务器向设备发送消息时引发401错误

Android GCM演示服务器向设备发送消息时引发401错误,android,windows,eclipse,tomcat,Android,Windows,Eclipse,Tomcat,和其他许多java和android新手一样,我正在尝试在windows上运行gcm演示服务器和gcm演示客户端,使用eclipse运行vertual设备,并使用tomcat作为Web服务器 我在注册和注销设备方面没有问题,但在尝试发送消息时出现了错误401。阅读了很多关于类似问题的答案,但仍然不知道我做错了什么。我将apy密钥、服务器url和发送者id放在教程中提到的位置。还稍微更改了SendAllMessagesServlet.java中的代码: // Processes the reques

和其他许多java和android新手一样,我正在尝试在windows上运行gcm演示服务器和gcm演示客户端,使用eclipse运行vertual设备,并使用tomcat作为Web服务器

我在注册和注销设备方面没有问题,但在尝试发送消息时出现了错误401。阅读了很多关于类似问题的答案,但仍然不知道我做错了什么。我将apy密钥、服务器url和发送者id放在教程中提到的位置。还稍微更改了SendAllMessagesServlet.java中的代码:

// Processes the request to add a new message.  
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws IOException, ServletException {
    List<String> devices = Datastore.getDevices();
    String status;
    if (devices.isEmpty()) {
        status = "Message ignored as there is no device registered!";
    } else {
        // NOTE: check below is for demonstration purposes; a real application
        // could always send a multicast, even for just one recipient
        // MY CODE
        String collapseKey = "mycollapsekey";
        String userMessage = "testmessage";
        // END OF MY CODE
        if (devices.size() == 1) {
            // send a single message using plain post
            String registrationId = devices.get(0);
            //  Message message = new Message.Builder().build();
            //  BELOW I HAVE CHANGED MESSAGE BUILDING A BIT:
            Message message = new Message.Builder()
                .collapseKey(collapseKey)
                .timeToLive(30)
                .delayWhileIdle(true)
                .addData("message", userMessage)
                .build();
            Result result = sender.send(message, registrationId, 5);
            status = "Sent message to one device: " + result;
        } else {
            // send a multicast message using JSON
            // must split in chunks of 1000 devices (GCM limit)
            int total = devices.size();
            List<String> partialDevices = new ArrayList<String>(total);
            int counter = 0;
            int tasks = 0;
            for (String device : devices) {
                counter++;
                partialDevices.add(device);
                int partialSize = partialDevices.size();
                if (partialSize == MULTICAST_SIZE || counter == total) {
                    asyncSend(partialDevices);
                    partialDevices.clear();
                    tasks++;
                }
            }
            status = "Asynchronously sending " + tasks + " multicast messages to " + total + " devices";
        }
    }
    req.setAttribute(HomeServlet.ATTRIBUTE_STATUS, status.toString());
    getServletContext().getRequestDispatcher("/home").forward(req, resp);
}
标准日志:

2012-10-22 13:06:37 Commons Daemon procrun stderr initialized
окт 22, 2012 1:06:38 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Android\android-sdk\tools;C:\Program Files\Android\android-sdk\platform-tools;c:\ant\bin;C:\Program Files\Java\jdk1.7.0_07\lib;;.
окт 22, 2012 1:06:38 PM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
окт 22, 2012 1:06:38 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 531 ms
окт 22, 2012 1:06:38 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
окт 22, 2012 1:06:38 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.36
окт 22, 2012 1:06:38 PM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
окт 22, 2012 1:06:39 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive gcm-demo.war
окт 22, 2012 1:06:39 PM com.google.android.gcm.demo.server.ApiKeyInitializer contextInitialized
INFO: Reading /api.key from resources (probably from WEB-INF/classes
окт 22, 2012 1:06:39 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
окт 22, 2012 1:06:39 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
окт 22, 2012 1:06:39 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/32  config=null
окт 22, 2012 1:06:39 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
окт 22, 2012 1:06:39 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1219 ms
окт 22, 2012 1:06:58 PM com.google.android.gcm.demo.server.Datastore register
INFO: Registering APA91bF0kArKvvJsHu4qS92FQl-CLKt0CJL8_SrtyL9OkGSqQQUMywMvPhulG4xmdiX_uVhdXs6xERY5pwQzHES-aI-tBCOgMZ_JOBT8S_RIK9XhyQDf49Yfr9g4nSnfgN2GIJHlnqTA4mAJBolnjfuQKLmULl0g5g

我错过了什么,或者在哪里可以阅读更多关于解决此类问题的内容?

我刚刚回答了一个类似的问题-

检查您正在使用的发件人API密钥

Commons后台程序procrun stderr已初始化


如果有人遇到上述错误,请尝试检查jvm.dll路径默认路径为*C:\Program Files\Java\jdk1.6.0\U 37\jre\bin\client\jvm.dll*将其更改为正确路径。

我也遇到此错误

原来我没有为Android启用
谷歌云消息
。(在我的一台机器上,这是在执行相同的步骤时自动启用的,不知道为什么它在另一台机器上没有执行相同的操作)长话短说,转到开发人员控制台并启用它

api和Auths | api |谷歌安卓云消息


刷新浏览器并重试。

此问题在任何论坛上都没有得到很好的解决,可能是因为它有多种原因。 我的案例是:我正在做一个GCM推送通知的演示,它第一次就成功了。但是当我继续的时候 第二天,用同样的代码,我发现答案中提到了异常。经过观察,我注意到我的公众 IP已更改,因为它不是静态的。当您在google开发者上创建项目时,必须提供此IP 安慰你可以通过在谷歌搜索“我的公共IP地址”找到你的公共IP。或者为了演示我 现在强烈建议您使用IP作为0.0.0.0/0,这是推荐的,并且在部署项目时, 您的服务器IP将是静态的。然后可以用服务器IP替换0.0.0.0/0 IP。 此外,请检查所有密钥,如“项目编号”和“服务器API密钥”。
希望能有帮助。干杯:)

谢谢你的回答。刚刚检查了我的发送者API密钥。我正在使用服务器应用程序的密钥(带有IP锁定)。我把我的服务器ip的形式和关键似乎是正确的,但我仍然得到错误。也许我已经更改了代码,但代码不在应该更改的位置?我必须将构造发送者=新发送者(我的_键)放在哪里;?您还发现了哪些其他错误?401问题仍然存在吗?没有具体的地方来实例化构造函数。您可以在发送GCM请求之前实例化它;进入doPost,在发送消息之前,现在我得到了:HTTP状态500,com.google.android.gcm.server.InvalidRequestException:HTTP状态代码:401 com.google.android.gcm.server.Sender.sendnorery(Sender.java:177)com.google.android.gcm.server.Sender.send(Sender.java:121)com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServlet.java:94)javax.servlet.http.HttpServlet.service(HttpServlet.java:647)javax.servlet.http.HttpServlet.service(HttpServlet.java:729)谢谢你,迪帕克·巴拉。原因是你提到的api密钥。更改的api和消息发送时没有问题。非常感谢。很酷。请接受答案,以便其他人在遇到相同问题时能够找到答案。
2012-10-22 13:06:37 Commons Daemon procrun stderr initialized
окт 22, 2012 1:06:38 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Android\android-sdk\tools;C:\Program Files\Android\android-sdk\platform-tools;c:\ant\bin;C:\Program Files\Java\jdk1.7.0_07\lib;;.
окт 22, 2012 1:06:38 PM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
окт 22, 2012 1:06:38 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 531 ms
окт 22, 2012 1:06:38 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
окт 22, 2012 1:06:38 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.36
окт 22, 2012 1:06:38 PM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
окт 22, 2012 1:06:39 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive gcm-demo.war
окт 22, 2012 1:06:39 PM com.google.android.gcm.demo.server.ApiKeyInitializer contextInitialized
INFO: Reading /api.key from resources (probably from WEB-INF/classes
окт 22, 2012 1:06:39 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
окт 22, 2012 1:06:39 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
окт 22, 2012 1:06:39 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/32  config=null
окт 22, 2012 1:06:39 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
окт 22, 2012 1:06:39 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1219 ms
окт 22, 2012 1:06:58 PM com.google.android.gcm.demo.server.Datastore register
INFO: Registering APA91bF0kArKvvJsHu4qS92FQl-CLKt0CJL8_SrtyL9OkGSqQQUMywMvPhulG4xmdiX_uVhdXs6xERY5pwQzHES-aI-tBCOgMZ_JOBT8S_RIK9XhyQDf49Yfr9g4nSnfgN2GIJHlnqTA4mAJBolnjfuQKLmULl0g5g