首先,百度android推送,這個時候會出來一堆關於推送的信息:html
一、極光推送java
二、信鴿推送android
三、融雲推送git
四、亞馬遜AWS推送github
等等數據庫
這裏我選擇了一個程序猿們比較經常使用的極光推送,好,先上效果圖:後端
左邊是Java後端,集成了JPush,簡單寫了一個jsp頁面,供咱們推送自定義消息,右邊是咱們的客戶端,用來接收JPush的推送。若是對java後端不知道着手寫的同窗請參考個人另外三篇博客:api
好了,來看咱們今天的demo:
一、首先客戶端就一個登陸界面和一個首頁,登陸以後再給該用戶推送
二、服務端也有一個界面,用來發送自定義推送,並且咱們給它設定一個篩選機制,這個篩選機制咱們在下面講數據庫的時候再說
關於客戶端極光推送的集成,在這裏我說幾點:
一、登陸的時候咱們須要設置極光推送的別名alias和標籤tag,以便咱們能接收到JPush的推送,alias和tag是極光推送須要的,別名alias,官網上給的解釋是爲安裝了應用程序的用戶,取個別名來標識。之後給該用戶Push消息時,就能夠用此別名來指定。每一個用戶只能指定一個別名;標籤tag,官網上給的解釋是爲安裝了應用程序的用戶,打上標籤。其目的主要是方便開發者根據標籤,來批量下發Push消息。可爲每一個用戶打多個標籤。
btnLogin.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//一、登陸——>請求服務器
//二、登陸成功以後,設置極光推送
setJPush();
}
});
private void setJPush(){
String alias;
String tags;
Set<String> tagSet=new HashSet<>(Arrays.asList(tags));
//給極光推送設置標籤和別名
JPushInterface.setAliasAndTags(this, alias, tagSet, tagAliasCallback);
}
複製代碼
而後就是一個極光推送設置別名和標籤的回調:
//極光服務器設置別名是否成功的回調
private final TagAliasCallback tagAliasCallback = new TagAliasCallback() {
@Override
public void gotResult(int code, String alias, Set<String> tagSet) {
switch (code) {
case 0:
Log.i("TAG", "設置別名成功");
break;
default:
Log.i("TAG", "設置別名失敗");
break;
}
}
};
複製代碼
二、由於別名要求惟一性,因此別名通常是你手機的UID,若是你不想在你下線以後還能收到推送,那麼再你下線的時候將別名設置爲空 關於別名的,詳情請參考極光推送別名與標籤API
客戶端的集成,官網講的很詳細,在這裏我就不細說了,詳情請參考極光推送 Android SDK 概述
####這裏咱們看看服務端的集成: 一、數據庫表的建立:
在這裏咱們有6個字段,咱們來看後面三個字段的含義,因爲咱們模擬的是商場會員積分推送的場景,因此count表示用戶的積分,咱們前面的演示也是根據積分來發推送通知的;而後alias和tag是極光推送須要的,上文咱們已經解釋過alias和tag的含義了。
而後咱們來看推送的服務端,首先新建一個Servlet,供咱們推送用:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Content-Type", "text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
int count = Integer.valueOf(request.getParameter("count"));
String message = request.getParameter("message");
MyDBTools myDBTools = new MyDBTools();
ResultSet rs = null;
if (count > -1 && !message.isEmpty()) {
// 從數據庫中獲取全部的積分大於count的用戶,從而進行推送消息
myDBTools.openConnect();
rs = myDBTools.getUserCountInfo(count);
try {
while (rs.next()) {
// 獲取這個用戶的別名
String alias = rs.getString("alias");
// 告訴極光服務器,這個用戶須要推送
PushUtils.sendPushMessage(alias, "自定義JPush通知", message);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
myDBTools.closeConnect();
}
複製代碼
而後是我寫的一個PushUtil的一個輔助類,咱們先來看**sendPushMessage()**這個方法:
/**
* 發送推送
* @param alias 別名
* @param title 推送標題
* @param msg 推送消息
* @return
*/
public static PushResult sendPushMessage(String alias, String title, String msg) {
JPushClient jClient = new JPushClient(MASTER_SECRET, APP_KEY);
// 構建推送的對象
PushPayload pushPayload = buildByAlias(alias, title, msg);
try {
PushResult pr = jClient.sendPush(pushPayload);
System.out.println("PushResult===" + pr);
return pr;
} catch (APIConnectionException | APIRequestException e) {
e.printStackTrace();
}
return null;
}
複製代碼
注:上述的MASTER_SECRET和APP_KEY是在極光推送後臺你建立應用的時候會生成的,咱們這裏是根據別名來推送的,你還能夠根據標籤來推送。
而後咱們來看**buildByAlias()**這個方法:
/**
* 構建推送的對象:全部對象
*
* @param alias 推送目標:別名爲alias
* @param title 推送標題
* @param msg 推送內容
* @return
*/
public static PushPayload buildByAlias(String alias, String title, String msg) {
Map<String, String> map = new HashMap<>();
map.put("url", "http://www.baidu.com");
return PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.alias(alias))
.setNotification(Notification.android(title, msg, map)).build();
}
複製代碼
注:上述中的map集合是你推送時候的附屬消息,像我這上面的附屬消息就是傳遞一個url,等你獲取通知的時候能夠獲取到這個url,而後打開通知以後能夠打開這個url
好了,推送的客戶端和服務端就講到這裏了,詳細的代碼我已經傳到GitHub上了,因爲Eclipse上傳GitHub失敗了(以前沒有傳過,懂的朋友麻煩教教我),因此服務端的我就放到百度雲上了