我有一个Java Restful Web服务(1)和一个使用它的Android应用程序(2)。第三个应用程序负责通过Web服务将数据输入数据库。我希望当第三个应用程序在我的数据库中输入新数据时,Web服务通过GCM通知android应用程序。我的Android应用程序能够接收reg-Id GCM。(我已经在Google Developers等服务器API密钥中创建了项目。)
我尝试了这一点:当第三个应用访问URI以通过POST输入数据时,将消息发送到google服务器。不起作用
@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Usuarios entity) {
String deviceId=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...;
Sender sender = new Sender("AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXX");
Message message = new Message.Builder()
.addData("message", "this is the message")
.addData("other-parameter", "some value")
.build();
Result result = sender.send(message, deviceId, 3);
super.create(entity);
}
我也曾尝试创建一个servlet。但是不起作用
@WebServlet(name = "NewServlet_1", urlPatterns = {"/NewServlet_1"})
public class NewServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet NewServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Sender sender = new Sender("AIzaSyBNFur3sFJpMujkVYW9rzEq3udI0khRCOI");
Message message = new Message.Builder()
.addData("message", "this is the message")
.addData("other-parameter", "some value")
.build();
Result result = sender.send(message, "xxxxxxxxxxxx", 3);
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
一些想法?
可能是您已经解决了问题。但这对其他人有帮助,所以我发布了答案。
选择任何休息客户(球衣休息客户)或常规的HTTP URL帖子。
将请求发布到https://android.googleapis.com/gcm/发送网址
将两个变量设置为http标头
授权:key = YOUR_API_KEY内容类型:application / json
有效负载json应该如下所示。
{
"registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
"data" : {
///your data goes here
},
}
例子
{ "data": {
"score": "5x1",
"time": "15:10"
},
"registration_ids": ["4", "8", "15", "16", "23", "42"]
}
注意-registration_ids是设备注册ID。
现在发布到其余部分。
有关更多信息,请检查此。
样例代码
包com.ajs.ajstest.gcmpost;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
/ ** * * @author nirmal * /公共课程GCMPost {
public static void main(String ar[]) throws UnsupportedEncodingException, IOException{
HttpClient httpclient = new DefaultHttpClient();
String json="{ \"data\": {" +
" \"score\": \"5x1\"," +
" \"time\": \"15:10\"" +
" }," +
" \"registration_ids\": [\"4\", \"8\", \"15\", \"16\", \"23\", \"42\"]" +
"}";
HttpPost httpost = new HttpPost("https://android.googleapis.com/gcm/send");
httpost.setHeader("Content-Type", "application/json");
httpost.setHeader("Authorization","YOUR_API_KEY");
httpost.setEntity(new StringEntity(json));
HttpResponse response = httpclient.execute(httpost);
}
}
行家依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
<type>jar</type>
</dependency>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句