在本地部署服务器可以设置推送信息的tag,将信息发送至极光平台,再由极光平台发送至安卓客户端。
服务器代码如下:
MyPush.jsp 填写推送消息,分组发送
<%@ page language="java"
import="java.util.*,com.service.dao.SchoolClassDAO,com.service.entity.SchoolClass"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
My JSP 'MyPush.jsp' starting page
新闻推送系统
推送内容:
package com.service.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.service.push.MessagePush;
public class MessagePush_servlet extends HttpServlet {
/**
* Constructor of the object.
*/
public MessagePush_servlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String messages = request.getParameter("message");
String tag = request.getParameter("classname");
MessagePush messagePush = new MessagePush(messages);
messagePush.testSendPush(tag);
response.sendRedirect("../PushSuccess.jsp");
out.flush();
out.close();
}
/**
* Initialization of the servlet.
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
MessagePush.java 负责发送消息到极光平台
package com.service.push;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.jpush.api.JPushClient;
import cn.jpush.api.common.resp.APIConnectionException;
import cn.jpush.api.common.resp.APIRequestException;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
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;
public class MessagePush {
protected static final Logger LOG = LoggerFactory
.getLogger(MessagePush.class);
private static final String appKey = "f948c7fdab5edb8656d23aa5";
private static final String masterSecret = "6fa4e9b0910cf1c252a724fb";
public static final String TITLE = "Test from API example";
public static final String ALERT = "测试测试Test from API Example - alert";
public static final String MSG_CONTENT = "Test from API Example - msgContent";
public static final String REGISTRATION_ID = "0900e8d85ef";
public static final String TAG = "tag_api";
public String MyPush;
public MessagePush(String message) {
this.MyPush = message;
}
public void testSendPush(String tag) {
// HttpProxy proxy = new HttpProxy("localhost", 3128);
// Can use this https proxy: https://github.com/Exa-Networks/exaproxy
JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);
// For push, all you need do is to build PushPayload object.
// PushPayload payload = buildPushObject_all_all_alert();
PushPayload payloadtag = buildPushObject_android_tag_alertWithTitle(tag);
try {
// PushResult result = jpushClient.sendPush(payload);
PushResult result = jpushClient.sendPush(payloadtag);
LOG.info("Got result - " + result);
} catch (APIConnectionException e) {
LOG.error("Connection error. Should retry later. ", e);
} catch (APIRequestException e) {
LOG.error(
"Error response from JPush server. Should review and fix it. ",
e);
LOG.info("HTTP Status: " + e.getStatus());
LOG.info("Error Code: " + e.getErrorCode());
LOG.info("Error Message: " + e.getErrorMessage());
LOG.info("Msg ID: " + e.getMsgId());
}
}
public PushPayload buildPushObject_all_all_alert() {
return PushPayload.alertAll(MyPush);
}
public static PushPayload buildPushObject_all_alias_alert() {
return PushPayload.newBuilder().setPlatform(Platform.all())
.setAudience(Audience.alias("alias1"))
.setNotification(Notification.alert(ALERT)).build();
}
public PushPayload buildPushObject_android_tag_alertWithTitle(String tag) {
return PushPayload.newBuilder().setPlatform(Platform.android())
.setAudience(Audience.tag(tag))
.setNotification(Notification.android(MyPush, TITLE, null))
.build();
}
public static PushPayload buildPushObject_android_and_ios() {
return PushPayload
.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.tag("tag1"))
.setNotification(
Notification
.newBuilder()
.setAlert("alert content")
.addPlatformNotification(
AndroidNotification.newBuilder()
.setTitle("Android Title")
.build())
.addPlatformNotification(
IosNotification
.newBuilder()
.incrBadge(1)
.addExtra("extra_key",
"extra_value").build())
.build()).build();
}
public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() {
return PushPayload
.newBuilder()
.setPlatform(Platform.ios())
.setAudience(Audience.tag_and("tag1", "tag_all"))
.setNotification(
Notification
.newBuilder()
.addPlatformNotification(
IosNotification.newBuilder()
.setAlert(ALERT).setBadge(5)
.setSound("happy")
.addExtra("from", "JPush")
.build()).build())
.setMessage(Message.content(MSG_CONTENT))
.setOptions(
Options.newBuilder().setApnsProduction(true).build())
.build();
}
public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
return PushPayload
.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(
Audience.newBuilder()
.addAudienceTarget(
AudienceTarget.tag("tag1", "tag2"))
.addAudienceTarget(
AudienceTarget
.alias("alias1", "alias2"))
.build())
.setMessage(
Message.newBuilder().setMsgContent(MSG_CONTENT)
.addExtra("from", "JPush").build()).build();
}
}
package com.service.entity;
public class SchoolClass implements java.io.Serializable {
private int classid;
private String classname;
public SchoolClass(int classid, String classname) {
super();
this.classid = classid;
this.classname = classname;
}
public SchoolClass() {
super();
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
}
MessagePushReply_servlet.java 接受安卓读取推送的反馈信息
package com.service.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MessagePushReply_servlet extends HttpServlet {
/**
* Constructor of the object.
*/
public MessagePushReply_servlet() {
super();
}
/**
* Destruction of the servlet.
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
String replytime = sdf.format(date);
System.out.println(username + "点击了通知 " + " 时间:" + replytime);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" A Servlet ");
out.println(" ");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" ");
out.println("");
out.flush();
out.close();
}
public void init() throws ServletException {
// Put your code here
}
}
MyReceiver.java 广播接收器
package com.shanshangnews.recive;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
import com.shanshangnews.activity.ExampleUtil;
import com.shanshangnews.activity.MainbActivity;
import com.shanshangnews.activity.MessageListActivity;
import com.shanshangnews.dao.JMessageDao;
import com.shanshangnews.javabean.ReceiverReply;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import cn.jpush.android.api.JPushInterface;
public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "JPush";
private JMessageDao dao;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
dao = new JMessageDao();
Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction()
+ ", extras: " + printBundle(bundle));
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
String regId = bundle
.getString(JPushInterface.EXTRA_REGISTRATION_ID);
Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
// send the Registration Id to your server...
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent
.getAction())) {
Log.d(TAG,
"[MyReceiver] 接收到推送下来的自定义消息: "
+ bundle.getString(JPushInterface.EXTRA_MESSAGE));
// processCustomMessage(context, bundle);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent
.getAction())) {
Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
int notifactionId = bundle
.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
String message = bundle.getString(JPushInterface.EXTRA_ALERT);
// System.out.println(message);
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
String nowtime = sdf.format(d);
dao.addMessage(context, message, nowtime);
// JMessageDao.addjlist(jm);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent
.getAction())) {
Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
ReceiverReply receiverReply = new ReceiverReply(context);
receiverReply.sendReply();
// 打开自定义的Activity
Intent i = new Intent(context, MessageListActivity.class);
i.putExtras(bundle);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(i);
} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent
.getAction())) {
Log.d(TAG,
"[MyReceiver] 用户收到到RICH PUSH CALLBACK: "
+ bundle.getString(JPushInterface.EXTRA_EXTRA));
// 在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity,
// 打开一个网页等..
} else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent
.getAction())) {
boolean connected = intent.getBooleanExtra(
JPushInterface.EXTRA_CONNECTION_CHANGE, false);
Log.e(TAG, "[MyReceiver]" + intent.getAction()
+ " connected state change to " + connected);
} else {
Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
}
}
// 打印所有的 intent extra 数据
private static String printBundle(Bundle bundle) {
StringBuilder sb = new StringBuilder();
for (String key : bundle.keySet()) {
if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
sb.append("\nkey:" + key + ", value1:" + bundle.getInt(key));
} else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) {
sb.append("\nkey:" + key + ", value2:" + bundle.getBoolean(key));
} else {
sb.append("\nkey:" + key + ", value3:" + bundle.getString(key));
}
}
// String message = bundle.getString(JPushInterface.EXTRA_ALERT);
// System.out.println(message);
return sb.toString();
}
// send msg to MainActivity
private void processCustomMessage(Context context, Bundle bundle) {
if (MainbActivity.isForeground) {
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
Log.i("Message", message);
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
Intent msgIntent = new Intent(MainbActivity.MESSAGE_RECEIVED_ACTION);
msgIntent.putExtra(MainbActivity.KEY_MESSAGE, message);
if (!ExampleUtil.isEmpty(extras)) {
try {
JSONObject extraJson = new JSONObject(extras);
if (null != extraJson && extraJson.length() > 0) {
msgIntent.putExtra(MainbActivity.KEY_EXTRAS, extras);
}
} catch (JSONException e) {
}
}
context.sendBroadcast(msgIntent);
}
}
}
package com.shanshangnews.push;
import java.util.LinkedHashSet;
import java.util.Set;
import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;
import com.shanshangnews.activity.ExampleUtil;
public class SetPushTag {
private static final String TAG = "JPush";
private Context context;
public SetPushTag(Context context) {
this.context = context;
}
public void setTag(String tag) {
// 检查 tag 的有效性
if (TextUtils.isEmpty(tag)) {
// Toast.makeText(PushSetActivity.this,R.string.error_tag_empty,
// Toast.LENGTH_SHORT).show();
return;
}
// ","隔开的多个 转换成 Set
String[] sArray = tag.split(",");
Set tagSet = new LinkedHashSet();
for (String sTagItme : sArray) {
if (!ExampleUtil.isValidTagAndAlias(sTagItme)) {
// Toast.makeText(PushSetActivity.this,R.string.error_tag_gs_empty,
// Toast.LENGTH_SHORT).show();
return;
}
tagSet.add(sTagItme);
}
mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_TAGS, tagSet));
}
private static final int MSG_SET_TAGS = 1002;
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_SET_TAGS:
Log.d(TAG, "Set tags in handler.");
JPushInterface.setAliasAndTags(context, null,
(Set) msg.obj, mTagsCallback);
break;
default:
Log.i(TAG, "Unhandled msg - " + msg.what);
}
}
};
private final TagAliasCallback mTagsCallback = new TagAliasCallback() {
@Override
public void gotResult(int code, String alias, Set tags) {
String logs;
switch (code) {
case 0:
logs = "Set tag and alias success";
Log.i(TAG, logs);
break;
case 6002:
logs = "Failed to set alias and tags due to timeout. Try again after 60s.";
Log.i(TAG, logs);
if (ExampleUtil.isConnected(context)) {
mHandler.sendMessageDelayed(
mHandler.obtainMessage(MSG_SET_TAGS, tags),
1000 * 60);
} else {
Log.i(TAG, "No network");
}
break;
default:
logs = "Failed with errorCode = " + code;
Log.e(TAG, logs);
}
ExampleUtil.showToast(logs, context);
}
};
}