1、pom文件引入相关jar包

  1. <!--极光推送消息start-->
  2. <dependency>
  3. <groupId>net.sf.json-lib</groupId>
  4. <artifactId>json-lib</artifactId>
  5. <version>2.4</version>
  6. <classifier>jdk15</classifier>
  7. </dependency>
  8.  
  9. <dependency>
  10. <groupId>cn.jpush.api</groupId>
  11. <artifactId>jpush-client</artifactId>
  12. <version>3.3.</version>
  13. <exclusions>
  14. <exclusion>
  15. <groupId>org.slf4j</groupId>
  16. <artifactId>slf4j-api</artifactId>
  17. </exclusion>
  18. </exclusions>
  19.  
  20. </dependency>
  21.  
  22. <dependency>
  23. <groupId>cn.jpush.api</groupId>
  24. <artifactId>jiguang-common</artifactId>
  25. <version>1.1.</version>
  26. </dependency>
  27.  
  28. <dependency>
  29. <groupId>io.netty</groupId>
  30. <artifactId>netty-all</artifactId>
  31. <version>4.1..Final</version>
  32. <scope>compile</scope>
  33. </dependency>
  34. <dependency>
  35. <groupId>com.google.code.gson</groupId>
  36. <artifactId>gson</artifactId>
  37. <version>2.3</version>
  38. </dependency>
  39.  
  40. <!--极光推送消息end-->

2、提供相关包装好的类

(1)消息封装类

  1. package com.test.entity.common;
  2.  
  3. import com.google.gson.JsonObject;
  4.  
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. /**
  9. * 极光推送消息类
  10. */
  11. public class JPushDeviceBean {
  12. private String token;
  13. private String alias_value;//别名值
  14. private String registration_id;
  15. private List<String> username;//所有用户别名
  16. private String title;//标题
  17. private String fsmessagecontent;//内容
  18. private Integer count;//角标数
  19. private Map<String, String> extrasMap;
  20. private JsonObject extra;
  21.  
  22. public JsonObject getExtra() {
  23. return extra;
  24. }
  25.  
  26. public void setExtra(JsonObject extra) {
  27. this.extra = extra;
  28. }
  29.  
  30. public Map<String, String> getExtrasMap() {
  31. return extrasMap;
  32. }
  33.  
  34. public void setExtrasMap(Map<String, String> extrasMap) {
  35. this.extrasMap = extrasMap;
  36. }
  37.  
  38. public String getToken() {
  39. return token;
  40. }
  41.  
  42. public void setToken(String token) {
  43. this.token = token;
  44. }
  45.  
  46. public String getAlias_value() {
  47. return alias_value;
  48. }
  49.  
  50. public void setAlias_value(String alias_value) {
  51. this.alias_value = alias_value;
  52. }
  53.  
  54. public String getRegistration_id() {
  55. return registration_id;
  56. }
  57.  
  58. public void setRegistration_id(String registration_id) {
  59. this.registration_id = registration_id;
  60. }
  61.  
  62. public List<String> getUsername() {
  63. return username;
  64. }
  65.  
  66. public void setUsername(List<String> username) {
  67. this.username = username;
  68. }
  69.  
  70. public String getTitle() {
  71. return title;
  72. }
  73.  
  74. public void setTitle(String title) {
  75. this.title = title;
  76. }
  77.  
  78. public String getFsmessagecontent() {
  79. return fsmessagecontent;
  80. }
  81.  
  82. public void setFsmessagecontent(String fsmessagecontent) {
  83. this.fsmessagecontent = fsmessagecontent;
  84. }
  85.  
  86. public Integer getCount() {
  87. return count;
  88. }
  89.  
  90. public void setCount(Integer count) {
  91. this.count = count;
  92. }
  93. }

(2)工具类

  1. package com.test.util;
  2.  
  3. import cn.jpush.api.push.model.Message;
  4. import cn.jpush.api.push.model.Platform;
  5. import cn.jpush.api.push.model.PushPayload;
  6. import cn.jpush.api.push.model.audience.Audience;
  7. import cn.jpush.api.push.model.audience.AudienceTarget;
  8. import cn.jpush.api.push.model.notification.AndroidNotification;
  9. import cn.jpush.api.push.model.notification.IosNotification;
  10. import cn.jpush.api.push.model.notification.Notification;
  11. import com.google.gson.JsonObject;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14.  
  15. import java.util.Map;
  16.  
  17. public class JPushDevice {
  18.  
  19. protected static final Logger LOG =LoggerFactory.getLogger(JPushDevice.class);
  20.  
  21. private static final String URL="https://device.jpush.cn";//极光访问URL
  22. public static long timeToLive=***;//10天
  23.  
  24. //privatestaticJPushClientjpushClient= newJPushClient(masterSecret,appKey,null,ClientConfig.getInstance());
  25.  
  26. //  //对于推送,您所需要做的就是构建PushPayload对象。
  27. //  PushPayloadpayload=buildPushObject_ios_audienceMore_messageWithExtras();
  28. //  PushResultresult=jpushClient.sendPush(payload);
  29.  
  30. public static PushPayload buildPushObject_android_tag_alertWithTitle(String username){
  31. return PushPayload.newBuilder()
  32. .setPlatform(Platform.all())
  33. .setAudience(Audience.alias(username))
  34. .setNotification(Notification.alert("ALERT"))
  35. .build();
  36. }
  37. //弹框
  38. public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras(String username){
  39. return PushPayload.newBuilder()
  40. .setPlatform(Platform.all())
  41. .setAudience(Audience.alias(username))
  42. .setMessage(Message.newBuilder()
  43. .setMsgContent("您有一条回复内容。。")
  44. .addExtra("from","JPush")
  45. .build())
  46. .build();
  47. }
  48. //推送全部平台(一个用户)(无角标)
  49. public static PushPayload oneName(String username, String title, String fsmessagecontent,
  50. Map<String, String> extrasMap, JsonObject extra){
  51. return PushPayload.newBuilder()
  52. .setPlatform(Platform.all())//推送全部平台
  53. .setAudience(Audience.newBuilder()//推送目标:别名、标签、注册ID、分群、广播等。
  54. .addAudienceTarget(AudienceTarget.alias(username))
  55. .build())
  56. .setMessage(Message.newBuilder()
  57. .setMsgContent(fsmessagecontent)//消息内容
  58. // .setTitle(count.toString())//当做安卓的角标数
  59. .addExtra("from","JPush")//应用内消息通道
  60. .build())
  61. .setNotification(Notification.newBuilder()//notification:通知内容体。是被推送到客户端的内容
  62. .addPlatformNotification(IosNotification.newBuilder()//iOS
  63. .setAlert(title)//弹框显示标题
  64. // .setBadge(count)//角标
  65. .build())
  66. .addPlatformNotification(AndroidNotification.newBuilder()//安卓
  67. .setAlert(fsmessagecontent)//弹框显示内容
  68. .setTitle(title)//弹框显示标题
  69. .addExtras(extrasMap)
  70. .addExtra("extra",extra)
  71. .build())
  72. .build())
  73. .build();
  74. }
  75. //推送全部平台(传多个别名用户)(有角标)
  76. public static PushPayload AllName(String[] username,String title,String fsmessagecontent,Integer count){
  77. return PushPayload.newBuilder()
  78. .setPlatform(Platform.all())//推送全部平台
  79. .setAudience(Audience.newBuilder()//推送目标:别名、标签、注册ID、分群、广播等。
  80. .addAudienceTarget(AudienceTarget.alias(username))//别名可以是数组为并集,一次只能存1000个
  81. .build())
  82. .setMessage(Message.newBuilder()
  83. .setMsgContent(fsmessagecontent)//消息内容
  84. .setTitle(count.toString())//当做安卓的角标数
  85. .addExtra("from","JPush")//应用内消息通道
  86. .build())
  87. .setNotification(Notification.newBuilder()//notification:通知
  88. .addPlatformNotification(IosNotification.newBuilder()//iOS
  89. .setAlert(title)//弹框显示标题
  90. .setBadge(count)//角标
  91. .build())
  92. .addPlatformNotification(AndroidNotification.newBuilder()//安卓
  93. .setAlert(fsmessagecontent)//弹框显示内容
  94. .setTitle(title)//弹框显示标题
  95. .build())
  96. .build())
  97. .build();
  98. }
  99. }

(3)实现类

  1. package com.test.controller.common;
  2.  
  3. import static com.yjl.util.UploadUtil.getErrorMsg;
  4. import static com.yjl.util.UploadUtil.getYjlResponseModel;
  5. import static com.yjl.util.UploadUtil.isSuccess;
  6. import static com.yjl.util.UploadUtil.setErrorMsg;
  7. import static com.yjl.util.UploadUtil.setSuccess;
  8. import static com.yjl.util.UploadUtil.setYjlResponseModel;
  9.  
  10. import cn.jiguang.common.ClientConfig;
  11. import cn.jiguang.common.resp.APIConnectionException;
  12. import cn.jiguang.common.resp.APIRequestException;
  13. import cn.jpush.api.JPushClient;
  14. import cn.jpush.api.push.PushResult;
  15. import cn.jpush.api.push.model.PushPayload;
  16. import com.google.gson.Gson;
  17. import com.yjl.entity.common.JPushDeviceBean;
  18. import com.yjl.entity.common.YJLResponseModel;
  19. import com.yjl.util.HttpClientUtil;
  20. import com.yjl.util.JPushDevice;
  21. import java.io.UnsupportedEncodingException;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. import net.sf.json.JSONObject;
  26. import org.apache.commons.codec.binary.Base64;
  27. import org.apache.commons.lang3.StringUtils;
  28. import org.slf4j.Logger;
  29. import org.slf4j.LoggerFactory;
  30. import org.springframework.stereotype.Controller;
  31. import org.springframework.web.bind.annotation.RequestBody;
  32. import org.springframework.web.bind.annotation.RequestMapping;
  33. import org.springframework.web.bind.annotation.RequestMethod;
  34. import org.springframework.web.bind.annotation.ResponseBody;
  35.  
  36. @Controller
  37. @RequestMapping("/JPushDevice")
  38. public class JPushDeviceController{
  39.  
  40. private static Logger logger = LoggerFactory.getLogger(JPushDeviceController.class);
  41.  
  42. //极光访问URL
  43. private static final String URL = "https://device.jpush.cn";
  44. //极光用户名
  45. private static final String APPKEY ="极光平台生成的app的appkey";
  46. //极光密码
  47. private static final String MASTERSECRET ="极光平台生成的app的mastersecret";
  48.  
  49. //1.推送一个人
  50. @RequestMapping(value = "getOneJPushDevice", method = RequestMethod.POST)
  51. @ResponseBody
  52. public PushResult getOneJPushDevice(@RequestBody JPushDeviceBean j) {
  53. String aliases = getAliases(j.getAlias_value());
  54. //一个别名
  55. PushResult pResult = new PushResult();
  56. //别名;
  57. if(StringUtils.isNotBlank(aliases)){
  58. //极光推送
  59. JPushClient jpushClient = new JPushClient(MASTERSECRET,APPKEY,null,ClientConfig.getInstance());
  60. PushPayload payload = JPushDevice.oneName(aliases, j.getTitle(), j.getFsmessagecontent(),j.getExtrasMap(),j.getExtra());
  61. try {
  62. pResult = jpushClient.sendPush(payload);
  63. System.out.println("Got result 推送一个人 - 3" + pResult );
  64. Thread.sleep();
  65. // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
  66. jpushClient.close();
  67. }
  68. catch (APIConnectionException e) {
  69. e.printStackTrace();
  70. }
  71. catch (APIRequestException e) {
  72. e.printStackTrace();
  73. }
  74. catch (InterruptedException e) {
  75. e.printStackTrace();
  76. }
  77. }
  78. return pResult;
  79. }
  80. //2.推送多人//先循环判断别名
  81. @RequestMapping(value = "getAllJPushDevice", method = RequestMethod.POST)
  82. @ResponseBody
  83. public YJLResponseModel getAllJPushDevice(@RequestBody JPushDeviceBean j) {
  84. setYjlResponseModel(new YJLResponseModel());
  85. setErrorMsg("");
  86. setSuccess(false);
  87. List<String> ulist = j.getUsername();
  88. //判断过得别名数组
  89. if(null!=ulist && !ulist.isEmpty()){
  90. String[] username = ulist.toArray(new String[ulist.size()]);
  91. //转化为数组
  92. //极光推送
  93. JPushClient jpushClient = new JPushClient(MASTERSECRET,APPKEY,null, ClientConfig.getInstance());
  94. PushPayload payload = JPushDevice.AllName(username, j.getTitle(), j.getFsmessagecontent(), j.getCount());
  95. //用户别名数组1000个一次,标题,内容,角标数
  96. PushResult pResult;
  97. try {
  98. pResult = jpushClient.sendPush(payload);
  99. setSuccess(true);
  100. System.out.println("Got result - " + new Gson().toJson(pResult) );
  101. try {
  102. Thread.sleep();
  103. }
  104. catch (InterruptedException e) {
  105. e.printStackTrace();
  106. }
  107. // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
  108. jpushClient.close();
  109. }
  110. catch (APIConnectionException e) {
  111. e.printStackTrace();
  112. }
  113. catch (APIRequestException e) {
  114. e.printStackTrace();
  115. }
  116. finally {
  117. getYjlResponseModel().setErrorMsg(getErrorMsg());
  118. getYjlResponseModel().setSuccess(isSuccess());
  119. }
  120. }
  121. return getYjlResponseModel();
  122. }
  123. //查询别名是否存在
  124. public static String getAliases(String aliases){
  125. String alia ="";
  126. JPushDeviceBean j = new JPushDeviceBean();
  127. j.setAlias_value(aliases);
  128. YJLResponseModel map = getJPushDeviceAliases(j);
  129. //查询是否含有别名
  130. Map<String, Object> ma = (Map<String, Object>)map.getData();
  131. if(ma.containsKey("registration_ids")){
  132. List<String> list = (List<String>)ma.get("registration_ids");
  133. //查询registration_ids的值不为空则含有该别名
  134. if(null!=list && !list.isEmpty()){
  135. System.out.println("查询别名----"+new Gson().toJson(list));
  136. //在此内可调用极光的推送方法
  137. alia = aliases;
  138. //如果存在就给返回该别名
  139. }
  140. }
  141. return alia;
  142. }
  143. //--------------------查询别名的方法-------------------------------------------
  144. //查询别名(找不到统计项就是 null,否则为统计项的值。)
  145. @RequestMapping(value = "getJPushDeviceAliases", method = RequestMethod.POST)
  146. @ResponseBody
  147. public static YJLResponseModel getJPushDeviceAliases(@RequestBody JPushDeviceBean ht) {
  148. setYjlResponseModel(new YJLResponseModel());
  149. setErrorMsg("");
  150. setSuccess(false);
  151. JSONObject response = null;
  152. try {
  153. StringBuilder url = new StringBuilder(URL).append("/v3/aliases/"+ht.getAlias_value());
  154. String authorValue = getBase64();
  155. Map<String, String> para = new HashMap<>();
  156. response = HttpClientUtil.doGet(url.toString(), authorValue, para);
  157. if (StringUtils.isNotEmpty((String)response.get("error"))) {
  158. logger.info("getAliases:url+params----" + url + para);
  159. throw new Exception();
  160. }
  161. setSuccess(true);
  162. }
  163. catch (Exception e) {
  164. e.printStackTrace();
  165. logger.error("getAliases:url+params----" + e);
  166. }finally {
  167. getYjlResponseModel().setErrorMsg(getErrorMsg());
  168. getYjlResponseModel().setSuccess(isSuccess());
  169. getYjlResponseModel().setData(response);
  170. }
  171. return getYjlResponseModel();
  172. }
  173.  
  174. //String转base64
  175. public static String getBase64(){
  176. Base64 base64 = new Base64();
  177. String base64Sign ="";
  178. String string = APPKEY+":"+MASTERSECRET;
  179. try {
  180. base64Sign = base64.encodeToString(string.getBytes("UTF-8"));
  181. }
  182. catch (UnsupportedEncodingException e) {
  183. e.printStackTrace();
  184. }
  185. return " Basic "+base64Sign;
  186. }
  187.  
  188. //测试一下
  189. public static void main(String[] args) {
  190. JPushDeviceController JPushDeviceController = new JPushDeviceController();
  191. JPushDeviceBean jd = new JPushDeviceBean();
  192. jd.setAlias_value("");//此处为待推送的用户id
  193. jd.setTitle("推送消息");
  194. jd.setFsmessagecontent("测试一下服务器端");
  195. PushResult pushResult = JPushDeviceController.getOneJPushDevice(jd);
  196. System.out.println(pushResult);
  197.  
  198. }
  199. }

3.测试一下

  1. //测试一下
  2. public static void main(String[] args) {
  3. JPushDeviceController JPushDeviceController = new JPushDeviceController();
  4. JPushDeviceBean jd = new JPushDeviceBean();
  5. jd.setAlias_value("");
  6. jd.setTitle("推送消息");
  7. jd.setFsmessagecontent("测试一下服务器端");
  8. Map<String,String> extrasParam = new HashMap<>();
  9. extrasParam.put("额外参数1","额外参数内容1");
  10. jd.setExtrasMap(extrasParam);
  11. PushResult pushResult = JPushDeviceController.getOneJPushDevice(jd);
  12. System.out.println(pushResult);
  13.  
  14. }

极光推送消息——Alias别称方式(Andirod)的更多相关文章

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

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

  2. Yii1.1框架实现PHP极光推送消息通知

    一.下载极光推送PHP SDK,解压后放在/protected/components/目录下,如下图所示: 二.完善修改下官方的demo例子,我这里复制一份demo,改为NotifyPush.php, ...

  3. ios之极光推送消息收到以后对消息的处理总结

    当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下     2.APP处于后台挂起情况下   3. ...

  4. 极光推送消息——RegistrationID方式

    1.工具类 package com.test.util; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang ...

  5. ios -- 极光推送《2》--极光推送消息推送成功,但是手机收不到的解决方法

    1.确认证书是否与app的Bundle ID是否一致 2. 确认你的推送证书是否已经过期 3.确认你的APP_KEY是否和极光APP_KEY是否一致 4.正确调用bindChannel,并成功返回ap ...

  6. JPush 极光推送 消息推送 实例

    简介 官网:https://www.jpush.cn/ 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度 ...

  7. Python3使用钉钉机器人推送消息(签名方式)

    import time import hmac import hashlib import base64 import urllib import json import requests impor ...

  8. 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请 ...

  9. 极光推送_总结_01_Java实现极光推送

    一.代码实现 1.配置类—Env.java package com.ray.jpush.config; /**@desc : 极光推送接入配置 * * @author: shirayner * @da ...

随机推荐

  1. Delphi - 获取文件大小

    GetFileSize获取文件大小 封装成如下函数,可以直接使用: ///函数功能:获取文件大小,单位取KB,小数自动进位 ///参数:sFilePath文件全路径 ///Result: 成功是返回文 ...

  2. ssh三大框架的认识

    一.SSH三大框架的概述 ssh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架.  集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层 ...

  3. Kth Minimum Clique_2019牛客暑期多校训练营(第二场)

    题目连接: https://ac.nowcoder.com/acm/contest/882/D Description Given a vertex-weighted graph with N ver ...

  4. atcoder C - Snuke and Spells(模拟+思维)

    题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_c 题解:就是简单的模拟一下就行.看一下代码就能理解 #include <iostream& ...

  5. CodeForces 1083 E The Fair Nut and Rectangles 斜率优化DP

    The Fair Nut and Rectangles 题意:有n个矩形,然后你可以选择k个矩形,选择一个矩形需要支付代价 ai, 问 总面积- 总支付代价 最大能是多少, 保证没有矩形套矩形. 题解 ...

  6. 中南林业科技大学第十一届程序设计大赛 有趣的二进制 牛客网 java大数的一些方法

    链接:https://www.nowcoder.com/acm/contest/124/C来源:牛客网 题目描述 小新在学C语言的时候,邝老师告诉他double类型的数据在表示小数的时候,小数点后的有 ...

  7. Linux入门基础之一

    Linux 入门基础 一.Linux 系统安装 安装方法网上很多,请自行百度 二.Linux 基本操作 2.1.GNOME图形界面基本操作 操作类似于Windows系统操作 打开每一个文件夹都会打开一 ...

  8. 解开Batch Normalization的神秘面纱

    停更博客好长一段时间了,其实并不是没写了,而是转而做笔记了,但是发现做笔记其实印象无法更深刻,因此决定继续以写博客来记录或者复习巩固所学的知识,与此同时跟大家分享下自己对深度学习或者机器学习相关的知识 ...

  9. GridView和ImageSwitcher以及ImageView

    网格布局GridView和Listview很相似,只不过前者是多列的.如果把GridView的android:numColumns设置为1,他就是ListView了. 通过GridView和Image ...

  10. apk签名发布及其原理

    如果我们在ADT中开发完了一个android项目,如何将它打包呢?方法如下: 1.unsigned APP(无签名的APP) 最懒惰的方法,可以直接在项目的bin目录下直接将apk拷贝出来,就ok了. ...