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

开心一笑

【1.再逼我,再逼我就装死给你看.

2.打死我也不说,你还没使美人儿计呢.

3.帅有个P用?搞不好还不是被卒子给吃掉.

4.别紧张,我不是什么好人.

5.够不着吧,左脚踩右脚上试试.

只为逗你一笑】

提出问题

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

解决问题

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/

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消息推送的简单使用

其他

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

时间: 2024-10-12 19:09:49

Jpush之如何利用HttpClient实现消息推送到手机的相关文章

android 利用androidnp实现消息推送

利用androidnp实现消息推送 介绍: 推送:所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息. 服务器端向Android客户端的推送,主要有三种方式: 1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据.但是实现简单,主要缺点:耗电等 2.Google的C2DM,服务器在国外,不稳定. 3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性.它的特点是将复杂性从客户端转移到了服务器端. 2. XMPP协议 XMPP

利用socket进行消息推送

对于利用socket通信进行消息推送,我研究了两三天吧,当然是在前几天研究消息推送机制以及第三方和轮询的基础上进行的,以下是我的一些感想吧,有不正确或者不完善的地方希望大家提出来一起研究吧. 1.首先,了解socket的连接过程: 1)服务器监听:2)客户端请求:3)连接确认(具体详情可以见百度百科,我在这也就不多说了). 2.socket通信机制: 服务器端 一.创建服务器套接字(CREATE). 二.服务器套接字进行信息绑定(BIND),并开始监听连接(LISTEN). 三.接受来自客户端的

android利用WebSocket实现消息推送

1.webSocket服务端的配置与代码: (1).服务器端工程目录结构: (2).web.xml的配置 <servlet-name>webSocketServlet</servlet-name>        <servlet-class>com.cn.controller.WebSocketServletService</servlet-class>      </servlet>    <servlet-mapping>    

消息推送APNS

消息推送之APNS 利用APNS进行消息推送 原理 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. APNS推送可以分为三个阶段: 第一阶段:推送服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册推送服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone. 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出推送通

消息推送之GCM

利用GCM进行消息推送 原理 1.接收端向GCM注册registerid 2.发送端发消息给GCM服务器 这个过程需要三个参数: (1)API Key (2)registerid (3)传递的数据 3.GCM端将消息转发给注册的设备(通过注册的registerid) 准备工作 1.projectid 这个是项目id,通过Google API控制台页面可以申请到.具体步骤不详细说了,网上好多. 申请网址:https://code.google.com/apis/console/ 2.API Key

atitit.极光消息推送服务器端开发实现推送&#160;&#160;jpush&#160;v3.&#160;总结o7p

atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p 1. 推送所设计到底功能1 1.1. 内容压缩1 1.2. 多引擎1 2. reg  ,设置appkey and pwdkey1 3. 下载server  sdk   v31 4. push推送样例1 5. Code3 1. 推送所设计到底功能 1.1. 内容压缩 1.2. 多引擎 2. reg  ,设置appkey and pwdkey 3. 下载server  sdk   v3 https://github.c

利用Hessian10分钟配置出一个简单的跨Web服务消息推送

笔者,之前对Web跨服务推送数据一无所知,今天研究了一下.其实有些事物,在不理解的时候完全觉得好似天外来物.但了解一点点之后,又会觉得十分有趣.每天闲扯一下很开心,下面一个简单的实例10分钟配置出跨Web服务的消息推送.一.被调用端web.xml配置 <!--HelloHessian --> <servlet> <servlet-name>HelloHessian</servlet-name> <servlet-class>com.caucho.

Android消息推送

1.推送方式基础知识:  在移动互联网时代以前的手机,如果有事情发生需要通知用户,则会有一个窗口弹出,将告诉用户正在发生什么事情.可能是未接电话的提示,日历的提醒,或是一封新的彩信.推送功能最早是被用于Email中,用来提示我们新的信息.由于时代的发展和移动互联网的热潮,推送功能更加地普及,已经不再仅仅用在推送邮件了,更多地用在我们的APP中了. 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器上不定时

android热门消息推送横向测评!

关于这个话题,已经不是什么新鲜事了.对于大多数中小型公司一般都是选择第三方的服务来实现.但是现在已经有很多提供推送服务的公司和产品,如何选择一个适合自己项目的服务呢?它们之间都有什么差别?在此为大家做了一个简单的调研,希望可以帮到大家. 简介: 手机推送服务是指服务器定向将信息实时送达手机的服务.推送服务,主要就是将最新资讯和最近的活动信息及时推送给用户,与用户保持互动,从而提高用户粘性,提升用户体验.例如,微信,新浪微博等APP的通知栏消息. 原理: 1)轮询(Pull)方式:应用程序应当阶段