极光推送消息——Alias别称方式(Andirod)
1、pom文件引入相关jar包
- <!--极光推送消息start-->
- <dependency>
- <groupId>net.sf.json-lib</groupId>
- <artifactId>json-lib</artifactId>
- <version>2.4</version>
- <classifier>jdk15</classifier>
- </dependency>
- <dependency>
- <groupId>cn.jpush.api</groupId>
- <artifactId>jpush-client</artifactId>
- <version>3.3.</version>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>cn.jpush.api</groupId>
- <artifactId>jiguang-common</artifactId>
- <version>1.1.</version>
- </dependency>
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- <version>4.1..Final</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>2.3</version>
- </dependency>
- <!--极光推送消息end-->
2、提供相关包装好的类
(1)消息封装类
- package com.test.entity.common;
- import com.google.gson.JsonObject;
- import java.util.List;
- import java.util.Map;
- /**
- * 极光推送消息类
- */
- public class JPushDeviceBean {
- private String token;
- private String alias_value;//别名值
- private String registration_id;
- private List<String> username;//所有用户别名
- private String title;//标题
- private String fsmessagecontent;//内容
- private Integer count;//角标数
- private Map<String, String> extrasMap;
- private JsonObject extra;
- public JsonObject getExtra() {
- return extra;
- }
- public void setExtra(JsonObject extra) {
- this.extra = extra;
- }
- public Map<String, String> getExtrasMap() {
- return extrasMap;
- }
- public void setExtrasMap(Map<String, String> extrasMap) {
- this.extrasMap = extrasMap;
- }
- public String getToken() {
- return token;
- }
- public void setToken(String token) {
- this.token = token;
- }
- public String getAlias_value() {
- return alias_value;
- }
- public void setAlias_value(String alias_value) {
- this.alias_value = alias_value;
- }
- public String getRegistration_id() {
- return registration_id;
- }
- public void setRegistration_id(String registration_id) {
- this.registration_id = registration_id;
- }
- public List<String> getUsername() {
- return username;
- }
- public void setUsername(List<String> username) {
- this.username = username;
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getFsmessagecontent() {
- return fsmessagecontent;
- }
- public void setFsmessagecontent(String fsmessagecontent) {
- this.fsmessagecontent = fsmessagecontent;
- }
- public Integer getCount() {
- return count;
- }
- public void setCount(Integer count) {
- this.count = count;
- }
- }
(2)工具类
- package com.test.util;
- import cn.jpush.api.push.model.Message;
- import cn.jpush.api.push.model.Platform;
- import cn.jpush.api.push.model.PushPayload;
- import cn.jpush.api.push.model.audience.Audience;
- import cn.jpush.api.push.model.audience.AudienceTarget;
- import cn.jpush.api.push.model.notification.AndroidNotification;
- import cn.jpush.api.push.model.notification.IosNotification;
- import cn.jpush.api.push.model.notification.Notification;
- import com.google.gson.JsonObject;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.util.Map;
- public class JPushDevice {
- protected static final Logger LOG =LoggerFactory.getLogger(JPushDevice.class);
- private static final String URL="https://device.jpush.cn";//极光访问URL
- public static long timeToLive=***;//10天
- //privatestaticJPushClientjpushClient= newJPushClient(masterSecret,appKey,null,ClientConfig.getInstance());
- // //对于推送,您所需要做的就是构建PushPayload对象。
- // PushPayloadpayload=buildPushObject_ios_audienceMore_messageWithExtras();
- // PushResultresult=jpushClient.sendPush(payload);
- public static PushPayload buildPushObject_android_tag_alertWithTitle(String username){
- return PushPayload.newBuilder()
- .setPlatform(Platform.all())
- .setAudience(Audience.alias(username))
- .setNotification(Notification.alert("ALERT"))
- .build();
- }
- //弹框
- public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras(String username){
- return PushPayload.newBuilder()
- .setPlatform(Platform.all())
- .setAudience(Audience.alias(username))
- .setMessage(Message.newBuilder()
- .setMsgContent("您有一条回复内容。。")
- .addExtra("from","JPush")
- .build())
- .build();
- }
- //推送全部平台(一个用户)(无角标)
- public static PushPayload oneName(String username, String title, String fsmessagecontent,
- Map<String, String> extrasMap, JsonObject extra){
- return PushPayload.newBuilder()
- .setPlatform(Platform.all())//推送全部平台
- .setAudience(Audience.newBuilder()//推送目标:别名、标签、注册ID、分群、广播等。
- .addAudienceTarget(AudienceTarget.alias(username))
- .build())
- .setMessage(Message.newBuilder()
- .setMsgContent(fsmessagecontent)//消息内容
- // .setTitle(count.toString())//当做安卓的角标数
- .addExtra("from","JPush")//应用内消息通道
- .build())
- .setNotification(Notification.newBuilder()//notification:通知内容体。是被推送到客户端的内容
- .addPlatformNotification(IosNotification.newBuilder()//iOS
- .setAlert(title)//弹框显示标题
- // .setBadge(count)//角标
- .build())
- .addPlatformNotification(AndroidNotification.newBuilder()//安卓
- .setAlert(fsmessagecontent)//弹框显示内容
- .setTitle(title)//弹框显示标题
- .addExtras(extrasMap)
- .addExtra("extra",extra)
- .build())
- .build())
- .build();
- }
- //推送全部平台(传多个别名用户)(有角标)
- public static PushPayload AllName(String[] username,String title,String fsmessagecontent,Integer count){
- return PushPayload.newBuilder()
- .setPlatform(Platform.all())//推送全部平台
- .setAudience(Audience.newBuilder()//推送目标:别名、标签、注册ID、分群、广播等。
- .addAudienceTarget(AudienceTarget.alias(username))//别名可以是数组为并集,一次只能存1000个
- .build())
- .setMessage(Message.newBuilder()
- .setMsgContent(fsmessagecontent)//消息内容
- .setTitle(count.toString())//当做安卓的角标数
- .addExtra("from","JPush")//应用内消息通道
- .build())
- .setNotification(Notification.newBuilder()//notification:通知
- .addPlatformNotification(IosNotification.newBuilder()//iOS
- .setAlert(title)//弹框显示标题
- .setBadge(count)//角标
- .build())
- .addPlatformNotification(AndroidNotification.newBuilder()//安卓
- .setAlert(fsmessagecontent)//弹框显示内容
- .setTitle(title)//弹框显示标题
- .build())
- .build())
- .build();
- }
- }
(3)实现类
- package com.test.controller.common;
- import static com.yjl.util.UploadUtil.getErrorMsg;
- import static com.yjl.util.UploadUtil.getYjlResponseModel;
- import static com.yjl.util.UploadUtil.isSuccess;
- import static com.yjl.util.UploadUtil.setErrorMsg;
- import static com.yjl.util.UploadUtil.setSuccess;
- import static com.yjl.util.UploadUtil.setYjlResponseModel;
- import cn.jiguang.common.ClientConfig;
- import cn.jiguang.common.resp.APIConnectionException;
- import cn.jiguang.common.resp.APIRequestException;
- import cn.jpush.api.JPushClient;
- import cn.jpush.api.push.PushResult;
- import cn.jpush.api.push.model.PushPayload;
- import com.google.gson.Gson;
- import com.yjl.entity.common.JPushDeviceBean;
- import com.yjl.entity.common.YJLResponseModel;
- import com.yjl.util.HttpClientUtil;
- import com.yjl.util.JPushDevice;
- import java.io.UnsupportedEncodingException;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import net.sf.json.JSONObject;
- import org.apache.commons.codec.binary.Base64;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
- @Controller
- @RequestMapping("/JPushDevice")
- public class JPushDeviceController{
- private static Logger logger = LoggerFactory.getLogger(JPushDeviceController.class);
- //极光访问URL
- private static final String URL = "https://device.jpush.cn";
- //极光用户名
- private static final String APPKEY ="极光平台生成的app的appkey";
- //极光密码
- private static final String MASTERSECRET ="极光平台生成的app的mastersecret";
- //1.推送一个人
- @RequestMapping(value = "getOneJPushDevice", method = RequestMethod.POST)
- @ResponseBody
- public PushResult getOneJPushDevice(@RequestBody JPushDeviceBean j) {
- String aliases = getAliases(j.getAlias_value());
- //一个别名
- PushResult pResult = new PushResult();
- //别名;
- if(StringUtils.isNotBlank(aliases)){
- //极光推送
- JPushClient jpushClient = new JPushClient(MASTERSECRET,APPKEY,null,ClientConfig.getInstance());
- PushPayload payload = JPushDevice.oneName(aliases, j.getTitle(), j.getFsmessagecontent(),j.getExtrasMap(),j.getExtra());
- try {
- pResult = jpushClient.sendPush(payload);
- System.out.println("Got result 推送一个人 - 3" + pResult );
- Thread.sleep();
- // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
- jpushClient.close();
- }
- catch (APIConnectionException e) {
- e.printStackTrace();
- }
- catch (APIRequestException e) {
- e.printStackTrace();
- }
- catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- return pResult;
- }
- //2.推送多人//先循环判断别名
- @RequestMapping(value = "getAllJPushDevice", method = RequestMethod.POST)
- @ResponseBody
- public YJLResponseModel getAllJPushDevice(@RequestBody JPushDeviceBean j) {
- setYjlResponseModel(new YJLResponseModel());
- setErrorMsg("");
- setSuccess(false);
- List<String> ulist = j.getUsername();
- //判断过得别名数组
- if(null!=ulist && !ulist.isEmpty()){
- String[] username = ulist.toArray(new String[ulist.size()]);
- //转化为数组
- //极光推送
- JPushClient jpushClient = new JPushClient(MASTERSECRET,APPKEY,null, ClientConfig.getInstance());
- PushPayload payload = JPushDevice.AllName(username, j.getTitle(), j.getFsmessagecontent(), j.getCount());
- //用户别名数组1000个一次,标题,内容,角标数
- PushResult pResult;
- try {
- pResult = jpushClient.sendPush(payload);
- setSuccess(true);
- System.out.println("Got result - " + new Gson().toJson(pResult) );
- try {
- Thread.sleep();
- }
- catch (InterruptedException e) {
- e.printStackTrace();
- }
- // 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
- jpushClient.close();
- }
- catch (APIConnectionException e) {
- e.printStackTrace();
- }
- catch (APIRequestException e) {
- e.printStackTrace();
- }
- finally {
- getYjlResponseModel().setErrorMsg(getErrorMsg());
- getYjlResponseModel().setSuccess(isSuccess());
- }
- }
- return getYjlResponseModel();
- }
- //查询别名是否存在
- public static String getAliases(String aliases){
- String alia ="";
- JPushDeviceBean j = new JPushDeviceBean();
- j.setAlias_value(aliases);
- YJLResponseModel map = getJPushDeviceAliases(j);
- //查询是否含有别名
- Map<String, Object> ma = (Map<String, Object>)map.getData();
- if(ma.containsKey("registration_ids")){
- List<String> list = (List<String>)ma.get("registration_ids");
- //查询registration_ids的值不为空则含有该别名
- if(null!=list && !list.isEmpty()){
- System.out.println("查询别名----"+new Gson().toJson(list));
- //在此内可调用极光的推送方法
- alia = aliases;
- //如果存在就给返回该别名
- }
- }
- return alia;
- }
- //--------------------查询别名的方法-------------------------------------------
- //查询别名(找不到统计项就是 null,否则为统计项的值。)
- @RequestMapping(value = "getJPushDeviceAliases", method = RequestMethod.POST)
- @ResponseBody
- public static YJLResponseModel getJPushDeviceAliases(@RequestBody JPushDeviceBean ht) {
- setYjlResponseModel(new YJLResponseModel());
- setErrorMsg("");
- setSuccess(false);
- JSONObject response = null;
- try {
- StringBuilder url = new StringBuilder(URL).append("/v3/aliases/"+ht.getAlias_value());
- String authorValue = getBase64();
- Map<String, String> para = new HashMap<>();
- response = HttpClientUtil.doGet(url.toString(), authorValue, para);
- if (StringUtils.isNotEmpty((String)response.get("error"))) {
- logger.info("getAliases:url+params----" + url + para);
- throw new Exception();
- }
- setSuccess(true);
- }
- catch (Exception e) {
- e.printStackTrace();
- logger.error("getAliases:url+params----" + e);
- }finally {
- getYjlResponseModel().setErrorMsg(getErrorMsg());
- getYjlResponseModel().setSuccess(isSuccess());
- getYjlResponseModel().setData(response);
- }
- return getYjlResponseModel();
- }
- //String转base64
- public static String getBase64(){
- Base64 base64 = new Base64();
- String base64Sign ="";
- String string = APPKEY+":"+MASTERSECRET;
- try {
- base64Sign = base64.encodeToString(string.getBytes("UTF-8"));
- }
- catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return " Basic "+base64Sign;
- }
- //测试一下
- public static void main(String[] args) {
- JPushDeviceController JPushDeviceController = new JPushDeviceController();
- JPushDeviceBean jd = new JPushDeviceBean();
- jd.setAlias_value("");//此处为待推送的用户id
- jd.setTitle("推送消息");
- jd.setFsmessagecontent("测试一下服务器端");
- PushResult pushResult = JPushDeviceController.getOneJPushDevice(jd);
- System.out.println(pushResult);
- }
- }
3.测试一下
- //测试一下
- public static void main(String[] args) {
- JPushDeviceController JPushDeviceController = new JPushDeviceController();
- JPushDeviceBean jd = new JPushDeviceBean();
- jd.setAlias_value("");
- jd.setTitle("推送消息");
- jd.setFsmessagecontent("测试一下服务器端");
- Map<String,String> extrasParam = new HashMap<>();
- extrasParam.put("额外参数1","额外参数内容1");
- jd.setExtrasMap(extrasParam);
- PushResult pushResult = JPushDeviceController.getOneJPushDevice(jd);
- System.out.println(pushResult);
- }
极光推送消息——Alias别称方式(Andirod)的更多相关文章
- 极光推送-Java后台实现方式一:Http API
Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请求API:https://api.jpush.cn/v3/push,另一种则是使用官方提供的第三方Java APIjar包,这里先 ...
- Yii1.1框架实现PHP极光推送消息通知
一.下载极光推送PHP SDK,解压后放在/protected/components/目录下,如下图所示: 二.完善修改下官方的demo例子,我这里复制一份demo,改为NotifyPush.php, ...
- ios之极光推送消息收到以后对消息的处理总结
当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下 2.APP处于后台挂起情况下 3. ...
- 极光推送消息——RegistrationID方式
1.工具类 package com.test.util; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang ...
- ios -- 极光推送《2》--极光推送消息推送成功,但是手机收不到的解决方法
1.确认证书是否与app的Bundle ID是否一致 2. 确认你的推送证书是否已经过期 3.确认你的APP_KEY是否和极光APP_KEY是否一致 4.正确调用bindChannel,并成功返回ap ...
- JPush 极光推送 消息推送 实例
简介 官网:https://www.jpush.cn/ 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度 ...
- Python3使用钉钉机器人推送消息(签名方式)
import time import hmac import hashlib import base64 import urllib import json import requests impor ...
- 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请 ...
- 极光推送_总结_01_Java实现极光推送
一.代码实现 1.配置类—Env.java package com.ray.jpush.config; /**@desc : 极光推送接入配置 * * @author: shirayner * @da ...
随机推荐
- Delphi - 获取文件大小
GetFileSize获取文件大小 封装成如下函数,可以直接使用: ///函数功能:获取文件大小,单位取KB,小数自动进位 ///参数:sFilePath文件全路径 ///Result: 成功是返回文 ...
- ssh三大框架的认识
一.SSH三大框架的概述 ssh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层 ...
- Kth Minimum Clique_2019牛客暑期多校训练营(第二场)
题目连接: https://ac.nowcoder.com/acm/contest/882/D Description Given a vertex-weighted graph with N ver ...
- atcoder C - Snuke and Spells(模拟+思维)
题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_c 题解:就是简单的模拟一下就行.看一下代码就能理解 #include <iostream& ...
- CodeForces 1083 E The Fair Nut and Rectangles 斜率优化DP
The Fair Nut and Rectangles 题意:有n个矩形,然后你可以选择k个矩形,选择一个矩形需要支付代价 ai, 问 总面积- 总支付代价 最大能是多少, 保证没有矩形套矩形. 题解 ...
- 中南林业科技大学第十一届程序设计大赛 有趣的二进制 牛客网 java大数的一些方法
链接:https://www.nowcoder.com/acm/contest/124/C来源:牛客网 题目描述 小新在学C语言的时候,邝老师告诉他double类型的数据在表示小数的时候,小数点后的有 ...
- Linux入门基础之一
Linux 入门基础 一.Linux 系统安装 安装方法网上很多,请自行百度 二.Linux 基本操作 2.1.GNOME图形界面基本操作 操作类似于Windows系统操作 打开每一个文件夹都会打开一 ...
- 解开Batch Normalization的神秘面纱
停更博客好长一段时间了,其实并不是没写了,而是转而做笔记了,但是发现做笔记其实印象无法更深刻,因此决定继续以写博客来记录或者复习巩固所学的知识,与此同时跟大家分享下自己对深度学习或者机器学习相关的知识 ...
- GridView和ImageSwitcher以及ImageView
网格布局GridView和Listview很相似,只不过前者是多列的.如果把GridView的android:numColumns设置为1,他就是ListView了. 通过GridView和Image ...
- apk签名发布及其原理
如果我们在ADT中开发完了一个android项目,如何将它打包呢?方法如下: 1.unsigned APP(无签名的APP) 最懒惰的方法,可以直接在项目的bin目录下直接将apk拷贝出来,就ok了. ...