如何从Java服务器向GCM服务器发送消息?

时间:2015-11-05 15:52:09

标签: android google-cloud-messaging

我正在尝试在Android中进行GCM,我已经按照本教程http://javapapers.com/android/google-cloud-messaging-gcm-for-android-and-push-notifications/

进行了操作

我已经按照该教程中的所有步骤进行操作,但是从服务器端我收到此错误

com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401
    at com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:177)
    at com.google.android.gcm.server.Sender.send(Sender.java:121)
    at com.javapapers.java.gcm.GCMNotification.doPost(GCMNotification.java:75)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)

当我尝试向GCM服务器发送消息时,此错误正在调用

这是我的服务器代码

public class GCMNotification extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // Put your Google API Server Key here
    private static final String GOOGLE_SERVER_KEY = "My server key";
    static final String MESSAGE_KEY = "message";    

    public GCMNotification() {
        super();
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);

    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        Result result = null;

        String share = request.getParameter("shareRegId");

        // GCM RedgId of Android device to send push notification
        String regId = "";
        if (share != null && !share.isEmpty()) {
            regId = request.getParameter("regId");
            PrintWriter writer = new PrintWriter("GCMRegId.txt");
            writer.println(regId);
            writer.close();
            request.setAttribute("pushStatus", "GCM RegId Received.");
            request.getRequestDispatcher("index.jsp")
                    .forward(request, response);
        } else {

            try {
                BufferedReader br = new BufferedReader(new FileReader(
                        "GCMRegId.txt"));
                regId = br.readLine();
                br.close();
                String userMessage = request.getParameter("message");
                Sender sender = new Sender(GOOGLE_SERVER_KEY);
                Message message = new Message.Builder().timeToLive(30)
                        .delayWhileIdle(true).addData(MESSAGE_KEY, userMessage).build();
                System.out.println("regId: " + regId);
                result = sender.send(message, regId, 1);
                System.out.println("Result : "+result.toString());
                request.setAttribute("pushStatus", result.toString());
            } catch (IOException ioe) {
                ioe.printStackTrace();
                request.setAttribute("pushStatus",
                        "RegId required: " + ioe.toString());
            } catch (Exception e) {
                e.printStackTrace();
                request.setAttribute("pushStatus", e.toString());
            }
            request.getRequestDispatcher("index.jsp")
                    .forward(request, response);
        }
    }
}

我对这个GCM功能很陌生。请帮帮我。

由于

0 个答案:

没有答案