一、 准备工作

1. 登录极光推送官网https://www.jpush.cn/,注册账号并登录

2. 创建应用
创建应用过程,详见百度经验:http://jingyan.baidu.com/article/4f34706ecf2664e387b56d98.html
3. 获取appkey和masterSecret
 
二、 服务端开发
1. 创建java web工程
2. 在WEB-INF路径下的lib路径下,导入相关jar包,相关jar包可以在极光推送官网获取。
 
3. 到官网下载java服务器sdk压缩包。
 
4. 将官网例子中\jpush-api-java-client-3.2.9\src\main\java路径下cn文件夹整个拖入到src中。
 
注1:这是一种折中方案,我看大神们基本没有导入这个包,也正常使用了,但是我如果不这样做,就会报各种import错误,也是无奈之举
注2:这一过程可能会报错,不要紧张,一个个的点进去看,应该都是告诉你@overRide标签有问题,删掉就好
5. 创建一个新的包com.weiwend.jdpush,创建class文件Jdpush.java

  1. package com.weiwend.jdpush;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import cn.jpush.api.JPushClient;
  5. import cn.jpush.api.common.resp.APIConnectionException;
  6. import cn.jpush.api.common.resp.APIRequestException;
  7. import cn.jpush.api.push.PushResult;
  8. import cn.jpush.api.push.model.Message;
  9. import cn.jpush.api.push.model.Options;
  10. import cn.jpush.api.push.model.Platform;
  11. import cn.jpush.api.push.model.PushPayload;
  12. import cn.jpush.api.push.model.audience.Audience;
  13. import cn.jpush.api.push.model.audience.AudienceTarget;
  14. import cn.jpush.api.push.model.notification.AndroidNotification;
  15. import cn.jpush.api.push.model.notification.IosNotification;
  16. import cn.jpush.api.push.model.notification.Notification;
  17. public class Jdpush {
  18. protected static final Logger LOG = LoggerFactory.getLogger(Jdpush.class);
  19. // demo App defined in resources/jpush-api.conf
  20. public static final String TITLE = "申通快递";
  21. public static final String ALERT = "祝大家新春快乐";
  22. public static final String MSG_CONTENT = "申通快递祝新老客户新春快乐";
  23. public static final String REGISTRATION_ID = "0900e8d85ef";
  24. public static final String TAG = "tag_api";
  25. public  static JPushClient jpushClient=null;
  26. public static void testSendPush(String appKey ,String masterSecret) {
  27. jpushClient = new JPushClient(masterSecret, appKey, 3);
  28. // HttpProxy proxy = new HttpProxy("localhost", 3128);
  29. // Can use this https proxy: https://github.com/Exa-Networks/exaproxy
  30. // For push, all you need do is to build PushPayload object.
  31. //PushPayload payload = buildPushObject_all_all_alert();
  32. //生成推送的内容,这里我们先测试全部推送
  33. PushPayload payload=buildPushObject_all_alias_alert();
  34. try {
  35. System.out.println(payload.toString());
  36. PushResult result = jpushClient.sendPush(payload);
  37. System.out.println(result+"................................");
  38. LOG.info("Got result - " + result);
  39. } catch (APIConnectionException e) {
  40. LOG.error("Connection error. Should retry later. ", e);
  41. } catch (APIRequestException e) {
  42. LOG.error("Error response from JPush server. Should review and fix it. ", e);
  43. LOG.info("HTTP Status: " + e.getStatus());
  44. LOG.info("Error Code: " + e.getErrorCode());
  45. LOG.info("Error Message: " + e.getErrorMessage());
  46. LOG.info("Msg ID: " + e.getMsgId());
  47. }
  48. }
  49. public static PushPayload buildPushObject_all_all_alert() {
  50. return PushPayload.alertAll(ALERT);
  51. }
  52. public static PushPayload buildPushObject_all_alias_alert() {
  53. return PushPayload.newBuilder()
  54. .setPlatform(Platform.all())//设置接受的平台
  55. .setAudience(Audience.all())//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
  56. .setNotification(Notification.alert(ALERT))
  57. .build();
  58. }
  59. public static PushPayload buildPushObject_android_tag_alertWithTitle() {
  60. return PushPayload.newBuilder()
  61. .setPlatform(Platform.android())
  62. .setAudience(Audience.all())
  63. .setNotification(Notification.android(ALERT, TITLE, null))
  64. .build();
  65. }
  66. public static PushPayload buildPushObject_android_and_ios() {
  67. return PushPayload.newBuilder()
  68. .setPlatform(Platform.android_ios())
  69. .setAudience(Audience.tag("tag1"))
  70. .setNotification(Notification.newBuilder()
  71. .setAlert("alert content")
  72. .addPlatformNotification(AndroidNotification.newBuilder()
  73. .setTitle("Android Title").build())
  74. .addPlatformNotification(IosNotification.newBuilder()
  75. .incrBadge(1)
  76. .addExtra("extra_key", "extra_value").build())
  77. .build())
  78. .build();
  79. }
  80. public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() {
  81. return PushPayload.newBuilder()
  82. .setPlatform(Platform.ios())
  83. .setAudience(Audience.tag_and("tag1", "tag_all"))
  84. .setNotification(Notification.newBuilder()
  85. .addPlatformNotification(IosNotification.newBuilder()
  86. .setAlert(ALERT)
  87. .setBadge(5)
  88. .setSound("happy")
  89. .addExtra("from", "JPush")
  90. .build())
  91. .build())
  92. .setMessage(Message.content(MSG_CONTENT))
  93. .setOptions(Options.newBuilder()
  94. .setApnsProduction(true)
  95. .build())
  96. .build();
  97. }
  98. public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
  99. return PushPayload.newBuilder()
  100. .setPlatform(Platform.android_ios())
  101. .setAudience(Audience.newBuilder()
  102. .addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
  103. .addAudienceTarget(AudienceTarget.alias("alias1", "alias2"))
  104. .build())
  105. .setMessage(Message.newBuilder()
  106. .setMsgContent(MSG_CONTENT)
  107. .addExtra("from", "JPush")
  108. .build())
  109. .build();
  110. }
  111. }
 
6. 创建一个新的包com.weiwend.jdpush.servlet,创建class文件tuisong.java

package com.weiwend.jdpush.servlet; import Java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.org.apache.xml.internal.serializer.utils.Utils; import com.weiwend.jdpush.Jdpush; import cn.jpush.*; /** * Servlet implementation class tuisong */ public class tuisong extends HttpServlet { private static final long serialVersionUID = 1L; private static final String appKey ="84cf5ee2099c654aa03a5d70"; private static final String masterSecret = "7cf23f25a41806d5fd29e3c5"; public tuisong() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Jdpush.testSendPush(appKey,masterSecret); System.out.println("sucess"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }

 
7. 修改web.xml,增加servlet描述

<servlet> <servlet-name >tuisong</servlet-name> <servlet-class>com.weiwend.jdpush.servlet.tuisong</servlet-class> </servlet> <servlet-mapping>   <servlet-name >tuisong</servlet-name>   <url-pattern>/tuisong</url-pattern> </servlet-mapping>

8. 修改index.jsp,增加servlet调用

<form action="tuisong" method="get">  <input type="text" name="username"></input> <input type="password" name="userpassword"></input> <br><input type="submit" value="denglu">

9. 将项目部署到tomcat下,启动tomcat
 
10. 通过网页进行访问,触发servlet
 
 

点击登录按钮,触发servlet。界面样式就不改了,我相信除了处女座的程序员,没有人会在意这个。

11. 在console中查看推送结果。

log4j:WARN No appenders could be found for logger (cn.jpush.api.common.connection.NativeHttpClient). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. {"platform":"all","audience":"all","notification":{"alert":"祝大家新春快乐"},"options":{"sendno":34919015,"apns_production":false}} {"msg_id":3270259240,"sendno":34919015}................................ sucess

发送失败的原因是因为我们的应用并没有绑定某一个具体的客户端应用,所以推送失败了。但是本地服务器与推送服务器之间的通讯是完好的。

极光推送JAVA代码示例的更多相关文章

  1. 极光推送java代码

    package com.zheng.cms.web.jpush.util; import cn.jpush.api.JPushClient; import cn.jpush.api.common.AP ...

  2. JPush极光推送 Java调用服务器端API开发

       极光推送是:使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动,从而有效地提高留存率,提升用户体验.简单的说就是通过JPush后台管理网站进行app消息的推送.可以让用户及时 ...

  3. 极光推送-Java后台实现方式一:Http API

    Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请求API:https://api.jpush.cn/v3/push,另一种则是使用官方提供的第三方Java APIjar包,这里先 ...

  4. 极光推送>>java SDK服务端集成后台项目(使用详解)

    PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看 极光文档(java SDK)请参考 [ 极光文档 ] 步骤一: 首先,你必须在 [极 ...

  5. 总结:极光推送java服务端(1)

    遇到的问题: 1.怎么用极光推送 2.极光推送发送失败报错 返回{ } 3.透传和推送区别以及怎么设置 我的解决方案: 问题1.极光推送类里面有不同的方法,需要发给那些人就调用相应的方法.有安卓.io ...

  6. 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)

    一共两个类 一个Jdpush  一个JpushClientUtil 代码如下   注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...

  7. JPush极光推送Java服务器端API

    // 对android和ios设备发送 JPushClient jpush = new JPushClient(masterSecret, appKey);   // 对android和ios设备发送 ...

  8. JPush极光推送Java服务器端实例

    import cn.jpush.api.JPushClient; import cn.jpush.api.common.resp.APIConnectionException; import cn.j ...

  9. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

随机推荐

  1. 克拉克拉(KilaKila):大规模实时计算平台架构实战

    克拉克拉(KilaKila):大规模实时计算平台架构实战 一.产品背景:克拉克拉(KilaKila)是国内专注二次元.主打年轻用户的娱乐互动内容社区软件.KilaKila推出互动语音直播.短视频配音. ...

  2. Spring Boot(五):Spring Boot Jpa 的使用

    在上篇文章Spring Boot(二):Web 综合开发中简单介绍了一下 Spring Boot Jpa 的基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项. ...

  3. 用TensorFlow教你手写字识别

    博主原文链接:用TensorFlow教你做手写字识别(准确率94.09%) 如需转载,请备注出处及链接,谢谢. 2012 年,Alex Krizhevsky, Geoff Hinton, and Il ...

  4. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. Java开发笔记(六十五)集合:HashSet和TreeSet

    对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了 ...

  6. Android破解学习之路(十三)—— 另类的破解VIP思路

    前言 一般按照以往,我们想要获得某个软件的VIP,一般是通过修改支付宝的支付流程,原本购买失败的,我们修改代码,从而使得失败变成了成功,不花费金钱 另类思路 有些软件将判断用户是否为VIP的代码写在了 ...

  7. springboot之多数据源配置JdbcTemplate

    springboot多数据源配置,代码如下 DataSourceConfig package com.rookie.bigdata.config; import org.springframework ...

  8. APIO 2018游记

    并不是很想写游记 在考场上做了四个小时的T1T2,T3没开 出考场听zrz讲T3的时候差点气死 难度顺序为1 > 2 > 3什么鬼 不过最后还是出乎意料的混到了一块铜牌 两天的培训好评(虽 ...

  9. WGS84地理坐标系下,进行坐标运算

    经纬度坐标本身是不能直接运算的.原因是:经纬度坐标并非是直角坐标系.纬线圈间隔均匀,经线圈越靠近两级越密,如下图: 现在有个需求,已知两点和两点处射线斜率,求交点坐标. 虽然地球整体是个圆,但是局部地 ...

  10. 每秒生成一千万个【可视有序】分布式ID的简单方案

    去年做了一个产品,会经常导入导出大量的外部数据,这些数据的ID有的是GUID类型,有的是字符串,也有的是自增.GUID类型没有顺序,结果要排序得借助其它业务字段,整体查询效率比较低:字符串ID本来是用 ...