Jpush之如何利用HttpClient实现消息推送到手机

开心一笑

【1.再逼我,再逼我就装死给你看.
2.打死我也不说,你还没使美人儿计呢.
3.帅有个P用?搞不好还不是被卒子给吃掉.
4.别紧张,我不是什么好人.
5.够不着吧,左脚踩右脚上试试.
只为逗你一笑】

提出问题

后端如何利用Jpush极光推送消息到手机端???

1

解决问题

Jpush极光文档官网

http://docs.jiguang.cn/jpush/guideline/intro/

Jpush产品简介

JPush是经过考验的大规模APP推送平台,每天推送消息数超过5亿条。 开发者集成SDK后,可以通过调用API推送消息。同时,JPush提供可视化的web端控制台发送通知,统计分析推送效果。 JPush全面支持 Android, iOS, Winphone 三大手机平台

Jpush后端开发资料

这是Jpush给手机端推送消息时候,需要看的资料文档。
http://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/

1

Jpush后端开发实例

调用地址

事实上我们只要用 HttpClient 向下面的路径发送 POST请求即可。

https://api.jpush.cn/v3/push (重要)

请求的数据格式为

{
   "platform": "all",
   "audience" : "all",
   "notification" : {
      "alert" : "Hi, JPush!",
      "android" : {}, 
      "ios" : {
         "extras" : { "newsid" : 321}
      }
   }
}

//调用时,需要的一些认证信息,这里需要自己到Jpush上去注册获取认证信息
Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ==

返回示例

调用成功后,会返回如下的信息:

< HTTP/1.1 200 OK
< Content-Type: application/json
{"sendno":"18","msg_id":"1828256757"}

后端代码

package com.evada.de.projcommand.utils;
/**
 * 描述:手机端消息推送工具类
 * Created by Ay on 2017/4/17.
 */
public class PcsHttpClientUtil {

    /** 请求的url路径 **/
    public static final String  JPUSH_URL = "https://api.jpush.cn/v3/push";

    /** 字符编码 **/
    private static final String CHARSET = "utf-8";

    /** 验证密码 **/
    private static final String AUTH = "Basic MzRiZmU5NWRjYmYxMjhhNzFjMmM2YzE4OmQ4NGVhZjZkOWI3YjY1NjUwZDAxODBlYg==";

    /**
     * 描述:发送post请求
     * @return
     */
    public static String doPost(Map<SysUser,List<PcsSubTaskDTO>> userListMap, String actionType, PcsTask pcsTask){
        HttpClient httpClient = null;
        HttpPost httpPost = null;
        String result = null;
        try{
            httpClient = new DefaultHttpClient();
            httpPost = new HttpPost(JPUSH_URL);
            //设置认证信息
            httpPost.setHeader("Authorization",AUTH);

            for(SysUser sysUser:userListMap.keySet()){
                JSONObject msgObject = getRequestContent(userListMap.get(sysUser),sysUser,actionType,pcsTask);
                StringEntity entity = new StringEntity(msgObject.toString(),"utf-8");
                entity.setContentType("application/json");
                httpPost.setEntity(entity);
                //执行请求
                HttpResponse response = httpClient.execute(httpPost);
                if(response != null){
                    HttpEntity resEntity = response.getEntity();
                    if(resEntity != null){
                        result = EntityUtils.toString(resEntity,CHARSET);
                    }
                }
            }


        }catch (IOException e){
            e.printStackTrace();
        }
        return result;
    }

    private static JSONObject getRequestContent(List<PcsSubTaskDTO> pcsSubTaskDTOList,SysUser sysUser,String actionType,PcsTask pcsTask){
        JSONObject msgObject = new JSONObject();
        msgObject.put("platform", "all");
        msgObject.put("audience", getUserAccountArray(sysUser));
        msgObject.put("notification",getNotification(pcsSubTaskDTOList,actionType,pcsTask));
        JSONObject optionsJson = new JSONObject();
        optionsJson.put("apns_production",false);
        msgObject.put("options",optionsJson);
        return msgObject;
    }

    private static JSONObject getNotification(List<PcsSubTaskDTO> pcsSubTaskDTOList,String actionType , PcsTask pcsTask){
        JSONObject result = new JSONObject();
        StringBuilder msg = new StringBuilder();
        //if task deliver
        if(TaskMsgTypeEnum.TASK_ISSUE_NOTICE.toString().equals(actionType)){
            msg.append("【任务下发通知】")
               .append(" 您好,").append(SessionUtils.getCurrentUser().getName()).append("已将任务:")
               .append(pcsTask.getName()).append("-").append(pcsTask.getCode()).append("下发。请及时签收处理您的任务:\n ");
            for(PcsSubTaskDTO pcsSubTaskDTO:pcsSubTaskDTOList){
                msg.append(pcsSubTaskDTO.getCode()).append("-").append(pcsSubTaskDTO.getName())
                   .append(",计划开始时间: ").append(new DateTime(pcsSubTaskDTO.getPlanStartTime()).toString("dd-MM-yyyy HH:mm:ss")).append(" \n ");
            }
        }else{
            msg.append("【任务催收通知】")
                    .append(" 您好,").append(SessionUtils.getCurrentUser().getName()).append("已将任务:")
                    .append(pcsTask.getName()).append("-").append(pcsTask.getCode()).append(" 进行了催收。您还存在以下任务未完成:\n ");
            for(PcsSubTaskDTO pcsSubTaskDTO:pcsSubTaskDTOList){
                msg.append(pcsSubTaskDTO.getCode()).append("-").append(pcsSubTaskDTO.getName())
                        .append(",计划完成时间:").append(new DateTime(pcsSubTaskDTO.getPlanCompleteTime()).toString("dd-MM-yyyy HH:mm:ss")).append(" \n ");
            }
        }
        result.put("alert",msg.toString());
        JSONObject badge = new JSONObject();
        badge.put("badge","+1");
        result.put("ios" , badge);
        return result;
    }

    /**
     * 描述:获取用户账户
     * @param sysUser 用户
     * @return
     */
    private static JSONObject getUserAccountArray(SysUser sysUser){
        JSONObject result = new JSONObject();
        JSONArray accountArray = new JSONArray();
        accountArray.add(sysUser.getAccount());
        //别名
        result.put("alias",accountArray);
        return result;
    }
}

读书感悟

来自《喧嚣与骚动》

  • 任何一个活着的人都比死去的人强。但是任何一个活着的人都不比另一个活着的人强多少。
  • 人者,无非是其不幸之总和而已。你以为有朝一日不幸会感到厌倦,可是到那时,时间又变成了你的不幸了。
  • 人们都生活在一种梦境中,在这里,你跑,却不能离开你无法相信的一种恐惧,你奔向一个安全的境地,对之你并无信心。

经典故事

【有这么一个故事:老族长带领村民日夜兼程,要把盐运送到某地换成过冬的大麦。有一天晚上,他们露宿于荒野,星空灿烂。长者依然用祖先世代传下来的方法,取出三块盐投入篝火,占卜山间天气的变化……大家都在等待长者的“天气预报”:若听到火中盐块发出“噼里啪啦”的声响,那就是好天气的预兆;若是毫无声息,那就象征天气即将变坏,风雨随时会来临。长者神情严肃,因为盐块在火中毫无声息。他认为不吉,主张天亮后马上赶路。但族中另一位年轻人,认为“以盐窥天”是迷信,反对匆忙启程。第二天下午,果然天气骤变,风雪交加,坚持晚走的年轻人这才领悟到长者的睿智。其实,用今天的科学解释,老族长也是对的,盐块在火中是否发出声音,与空气中的湿度相关。换句话说,当风雨欲来,湿度高,盐块受潮,投入火中自然喑哑无声。年轻人往往看不起老人的哲学,片面地认为它们都是过时的、无用的。其实,一些人生理念如同海盐,它再老,仍然是一种结晶,并且有海的记忆。】

大神文章

【1】HttpClient发送get post请求和数据解析
【2】轻松把玩HttpClient之模拟post请求示例
【3】jPush 极光推送的理解
【4】JPush消息推送的简单使用

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容