開(kāi)心一笑
【1.再逼我,再逼我就裝死給你看.
2.打死我也不說(shuō),你還沒(méi)使美人兒計(jì)呢.
3.帥有個(gè)P用?搞不好還不是被卒子給吃掉.
4.別緊張,我不是什么好人.
5.夠不著吧,左腳踩右腳上試試.
只為逗你一笑】
提出問(wèn)題
后端如何利用Jpush極光推送消息到手機(jī)端???
解決問(wèn)題
Jpush極光文檔官網(wǎng)
http://docs.jiguang.cn/jpush/guideline/intro/
Jpush產(chǎn)品簡(jiǎn)介
JPush是經(jīng)過(guò)考驗(yàn)的大規(guī)模APP推送平臺(tái),每天推送消息數(shù)超過(guò)5億條。 開(kāi)發(fā)者集成SDK后,可以通過(guò)調(diào)用API推送消息。同時(shí),JPush提供可視化的web端控制臺(tái)發(fā)送通知,統(tǒng)計(jì)分析推送效果。 JPush全面支持 Android, iOS, Winphone 三大手機(jī)平臺(tái)
Jpush后端開(kāi)發(fā)資料
這是Jpush給手機(jī)端推送消息時(shí)候,需要看的資料文檔。
http://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/
Jpush后端開(kāi)發(fā)實(shí)例
調(diào)用地址
事實(shí)上我們只要用 HttpClient 向下面的路徑發(fā)送 POST請(qǐng)求即可。
https://api.jpush.cn/v3/push (重要)
請(qǐng)求的數(shù)據(jù)格式為
{
"platform": "all",
"audience" : "all",
"notification" : {
"alert" : "Hi, JPush!",
"android" : {},
"ios" : {
"extras" : { "newsid" : 321}
}
}
}
//調(diào)用時(shí),需要的一些認(rèn)證信息,這里需要自己到Jpush上去注冊(cè)獲取認(rèn)證信息
Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ==
返回示例
調(diào)用成功后,會(huì)返回如下的信息:
< HTTP/1.1 200 OK
< Content-Type: application/json
{"sendno":"18","msg_id":"1828256757"}
后端代碼
package com.evada.de.projcommand.utils;
/**
* 描述:手機(jī)端消息推送工具類(lèi)
* Created by Ay on 2017/4/17.
*/
public class PcsHttpClientUtil {
/** 請(qǐng)求的url路徑 **/
public static final String JPUSH_URL = "https://api.jpush.cn/v3/push";
/** 字符編碼 **/
private static final String CHARSET = "utf-8";
/** 驗(yàn)證密碼 **/
private static final String AUTH = "Basic MzRiZmU5NWRjYmYxMjhhNzFjMmM2YzE4OmQ4NGVhZjZkOWI3YjY1NjUwZDAxODBlYg==";
/**
* 描述:發(fā)送post請(qǐng)求
* @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);
//設(shè)置認(rèn)證信息
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);
//執(zhí)行請(qǐng)求
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("【任務(wù)下發(fā)通知】")
.append(" 您好,").append(SessionUtils.getCurrentUser().getName()).append("已將任務(wù):")
.append(pcsTask.getName()).append("-").append(pcsTask.getCode()).append("下發(fā)。請(qǐng)及時(shí)簽收處理您的任務(wù):\n ");
for(PcsSubTaskDTO pcsSubTaskDTO:pcsSubTaskDTOList){
msg.append(pcsSubTaskDTO.getCode()).append("-").append(pcsSubTaskDTO.getName())
.append(",計(jì)劃開(kāi)始時(shí)間: ").append(new DateTime(pcsSubTaskDTO.getPlanStartTime()).toString("dd-MM-yyyy HH:mm:ss")).append(" \n ");
}
}else{
msg.append("【任務(wù)催收通知】")
.append(" 您好,").append(SessionUtils.getCurrentUser().getName()).append("已將任務(wù):")
.append(pcsTask.getName()).append("-").append(pcsTask.getCode()).append(" 進(jìn)行了催收。您還存在以下任務(wù)未完成:\n ");
for(PcsSubTaskDTO pcsSubTaskDTO:pcsSubTaskDTOList){
msg.append(pcsSubTaskDTO.getCode()).append("-").append(pcsSubTaskDTO.getName())
.append(",計(jì)劃完成時(shí)間:").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;
}
}
讀書(shū)感悟
來(lái)自《喧囂與騷動(dòng)》
- 任何一個(gè)活著的人都比死去的人強(qiáng)。但是任何一個(gè)活著的人都不比另一個(gè)活著的人強(qiáng)多少。
- 人者,無(wú)非是其不幸之總和而已。你以為有朝一日不幸會(huì)感到厭倦,可是到那時(shí),時(shí)間又變成了你的不幸了。
- 人們都生活在一種夢(mèng)境中,在這里,你跑,卻不能離開(kāi)你無(wú)法相信的一種恐懼,你奔向一個(gè)安全的境地,對(duì)之你并無(wú)信心。
經(jīng)典故事
【有這么一個(gè)故事:老族長(zhǎng)帶領(lǐng)村民日夜兼程,要把鹽運(yùn)送到某地?fù)Q成過(guò)冬的大麥。有一天晚上,他們露宿于荒野,星空燦爛。長(zhǎng)者依然用祖先世代傳下來(lái)的方法,取出三塊鹽投入篝火,占卜山間天氣的變化……大家都在等待長(zhǎng)者的“天氣預(yù)報(bào)”:若聽(tīng)到火中鹽塊發(fā)出“噼里啪啦”的聲響,那就是好天氣的預(yù)兆;若是毫無(wú)聲息,那就象征天氣即將變壞,風(fēng)雨隨時(shí)會(huì)來(lái)臨。長(zhǎng)者神情嚴(yán)肅,因?yàn)辂}塊在火中毫無(wú)聲息。他認(rèn)為不吉,主張?zhí)炝梁篑R上趕路。但族中另一位年輕人,認(rèn)為“以鹽窺天”是迷信,反對(duì)匆忙啟程。第二天下午,果然天氣驟變,風(fēng)雪交加,堅(jiān)持晚走的年輕人這才領(lǐng)悟到長(zhǎng)者的睿智。其實(shí),用今天的科學(xué)解釋?zhuān)献彘L(zhǎng)也是對(duì)的,鹽塊在火中是否發(fā)出聲音,與空氣中的濕度相關(guān)。換句話說(shuō),當(dāng)風(fēng)雨欲來(lái),濕度高,鹽塊受潮,投入火中自然喑啞無(wú)聲。年輕人往往看不起老人的哲學(xué),片面地認(rèn)為它們都是過(guò)時(shí)的、無(wú)用的。其實(shí),一些人生理念如同海鹽,它再老,仍然是一種結(jié)晶,并且有海的記憶?!?/p>
大神文章
【1】HttpClient發(fā)送get post請(qǐng)求和數(shù)據(jù)解析
【2】輕松把玩HttpClient之模擬post請(qǐng)求示例
【3】jPush 極光推送的理解
【4】JPush消息推送的簡(jiǎn)單使用
其他
如果有帶給你一絲絲小快樂(lè),就讓快樂(lè)繼續(xù)傳遞下去,歡迎點(diǎn)贊、頂、歡迎留下寶貴的意見(jiàn)、多謝支持!