极光推送demo
代码----测试版
发送端
使用rest api 接口:https://api.jpush.cn/v3/push
public class JPushUtil {
public JPushUtil() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
String re = sendPost( "hello","100100");// 消息 // 则推送消息到app端
}
/**
* platform 必填 推送平台设置
*
* audience 必填 推送设备指定
*
* notification 可选 通知内容体。是被推送到客户端的内容。与message 一起二者必须有其一,可以二者并存
*
* message 可选 消息内容体。是被推送到客户端的内容。与 notification 一起二者必须有其一,可以二者并存
*
* sms_message 可选 短信渠道补 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,消息 和用户手机号码
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String news,String to) {
String url="https://api.jpush.cn/v3/push";
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
//通知例子
JSONObject json = new JSONObject("{'platform': 'all','audience' : 'all',"
+ "'notification':{'android':{'alert' : '" + news+ "','extras':{'to':'1zhy'}}}, "
+ "'message': {" + "'msg_content': 'news'}}");
//通知例子
//json = new JSONObject("{'platform': 'all','audience' : 'all','notification':{'alert' : '"+news+"'}}");
//消息例子
json = new JSONObject("{'platform': 'all','audience' : 'all','message':{'msg_content' : '"+news+"','content_type':'text','title':'"+to+"'}}");
System.out.println(json.toString());
String secret = "密匙 key";
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Authorization", "Basic " + new sun.misc.BASE64Encoder().encode(secret.getBytes()));
conn.setRequestProperty("Content-Type", "application/json");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(json.toString());
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
}
接收端
使用sdk,加入相关包
public class myJpushReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.e(TAG, "onReceive - " + intent.getAction());
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
Log.e(TAG, "JPush用户注册成功");
String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
Log.e(TAG, "[MyReceiver] 接收Registration Id : " + regId);
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
//Action - JPushInterface.ACTION_MESSAGE_RECEIVED
// JPushInterface.EXTRA_TITLE
// 保存服务器推送下来的消息的标题
//JPushInterface.EXTRA_MESSAGE
// 保存服务器推送下来的消息内容
//JPushInterface.EXTRA_EXTRA
//保存服务器推送下来的附加字段。这是个 JSON 字符串
//JPushInterface.EXTRA_MSG_ID
//SDK 1.6.1 以上版本支持。
//唯一标识消息的 ID, 可用于上报统计等
Log.e(TAG, "收到了自定义消息。消息内容是:" + bundle.getString(JPushInterface.EXTRA_MESSAGE));
// 自定义消息不会展示在通知栏,完全要开发者写代码去处理
// Push Talk messages are push down by custom message format
processCustomMessage(context, bundle);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
//Action - JPushInterface.ACTION_NOTIFICATION_RECEIVED.
//JPushInterface.EXTRA_NOTIFICATION_TITLE
//保存服务器推送下来的通知的标题。
//JPushInterface.EXTRA_ALERT
// 保存服务器推送下来的通知内容JPushInterface.EXTRA_EXTRA
// SDK 1.2.9 以上版本支持。
//保存服务器推送下来的附加字段。这是个 JSON 字符串
Log.d(TAG, "收到了通知");
System.out.println("EXTRA_INBOX收到了通知" + bundle.getString(JPushInterface.EXTRA_INBOX));
String ex = bundle.getString(JPushInterface.EXTRA_EXTRA);
System.out.println("EXTRA_EXTRA收到了通知" + ex);
if (ex != null && !ex.equals("{}")) {
System.out.println("通知拦截 认证");
try {
JSONObject json = new JSONObject(ex);
String to = json.optString("to");
if (to.equals("zhy")) {
System.out.println("通知拦截 认证 成功");
} else {
System.out.println("通知拦截 认证 失败");
//abortBroadcast(); //Receiver1接收到广播后中断广播
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
System.out.println("通知不拦截");
}
// 在这里可以做些统计,或者做些其他工作
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
//Action - JPushInterface.ACTION_NOTIFICATION_OPENED
Log.d(TAG, "用户点击打开了通知");
System.out.println("用户点击打开了通知");
// 在这里可以自己写代码去定义用户点击后的行为
Intent i = new Intent(context, WebIndexActivity.class); //自定义打开的界面
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
} else {
Log.d(TAG, "Unhandled intent - " + intent.getAction());
}
}
private void processCustomMessage(Context context, Bundle bundle) {
//title 发送目标
String title = bundle.getString(JPushInterface.EXTRA_TITLE);
//message 发送内容
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
System.out.println("title " + title);
System.out.println("message " + message);
showMessageNotification(context, title, message);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
void showMessageNotification(Context c, String who, String msg) {
if (who.equals(BeeFrameworkApp.getInstance().getUser(c))) {
System.out.println("消息拦截 认证 成功 发送通知 用户为"+BeeFrameworkApp.getInstance().getUser(c));
} else {
System.out.println("消息拦截 认证 失败 不发送通知 用户为"+BeeFrameworkApp.getInstance().getUser(c));
return;
}
NotificationManager manager = (NotificationManager) c.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
Notification no = new Notification();
PendingIntent pend = PendingIntent.getActivity(c, 1, new Intent(c, WebIndexActivity.class), 0);
//no.contentIntent=pend;
// 1、创建一个自定义的消息布局 notification.xml
// 2、在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段
//RemoteViews remoteView = new RemoteViews(c.getPackageName(), R.layout.notification);
//remoteView.setImageViewResource(R.id.image, R.drawable.lbgs_icon);
//remoteView.setTextViewText(R.id.text , "Hello,this message is in a custom expanded view");
//no.contentView = remoteView;
// 3、为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要setLatestEventInfo()方法)
Notification.Builder builder = new Notification.Builder(c);
// builder.setContentInfo("补充内容");
builder.setContentText(who + " " + msg);
builder.setContentTitle("通知");
builder.setSmallIcon(R.drawable.lbgs_icon);
builder.setTicker("消息");//在通知栏上的内容的
builder.setAutoCancel(true);
builder.setWhen(System.currentTimeMillis());
builder.setContentIntent(pend);
builder.setDefaults(Notification.DEFAULT_ALL);// 设置使用默认声音、震动、闪光灯
no = builder.build();
try {
manager.notify(10, no);
} catch (Exception e) {
System.out.println(e);
}
}
}