极光推送服务端向手机app即时推送消息或通知

以前一直在做后台开发,对消息的推送很感兴趣,正好项目中要用到极光推送,今天抽空来记录下这两天的研究成果。

我们知道IOS有自己的推送服务,但很遗憾Android没有原生的推送服务,现在有很多第三方的推送服务,比如个推、极光、亚马逊、百度云、聚能等。今天我们就来研究下极光推送的后台服务器如何实现。

关键点:

        1.首先最好是把极光官网java后台服务器的demo下载下来,里面有我们需要的jar包,以及example.

        2.极光推送的关键jpushClient = new JPushClient(masterSecret, appKey, 3);就是这个类。其中的参数需要我们从极光官网注册开发者,然后创建具体项目获取相应的两个key值。其中appKey值就是我们手机端对应的key值

        3.极光推送给我们提供了很多种推送的方式,我们可以选择某一个平台进行推送(Android ,IOS ,Windows Phone),也可以全部推送;我们可以针对某个特别的用户进行推送(设置alisa),也可以针对特别的群体进行推送(设置tag),第三个参数是设置推送保留的时间,只要在有效时间内上线就可以收到推送信息

        4. 极光推送现在都用https连接,提交请求是post,获取数据为get

// 对android和ios设备发送

JPushClient jpush = new JPushClient(masterSecret, appKey);
 
// 对android和ios设备发送,同时指定离线消息保存时间
JPushClient jpush = new JPushClient(masterSecret, appKey, timeToLive);
 
// 指定某种设备发送
JPushClient jpush = new JPushClient(masterSecret, appKey, DeviceEnum.Android);
 
// 指定某种设备发送,并且指定离线消息保存时间

JPushClient jpush =
new JPushClient(masterSecret, appKey, timeToLive, DeviceEnum.IOS);


package com.test.action;


import java.util.Set;

import org.apache.log4j.Logger;

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.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;

public class MessagePush {
	/**
	 * 日志常量
	 */
	private static final Logger logger = Logger.getLogger(MessagePush.class);
	private static final String appKey = "d3a485586264be07f7c00b15";
	private static final String masterSecret = "e0ac721eae1169cf29d1e49a";
	private JPushClient jpushClient ;
	private String title;
	private String message;
	public MessagePush(String message) {
		this.title=title;  
		this.message = message;    
		jpushClient = new JPushClient(masterSecret, appKey,0);
	}

	/**
	 * 向所有人发送消息
	 * @return 消息id 状态码:0为成功
	 */
	public long sendPushAll(){
		PushPayload payload=buildPushObject_all_all_alert();
		long msgId=0;
		try {
			PushResult result=jpushClient.sendPush(payload);
			msgId=result.msg_id;
		} catch (APIConnectionException e) {
			// TODO Auto-generated catch block
			logger.error("Connection error. Should retry later. ", e);
		} catch (APIRequestException e) {
			logger.info("HTTP Status: " + e.getStatus());
			msgId=e.getMsgId();
		}
		return msgId;
	}
	/**
	 * 向指定别名的客户端发送消息
	 * @param alias 所有别名信息集合,这里表示发送所有学生编号
	 * @return 消息id 状态码:0为成功
	 */
	public long sendPushAlias(Set alias){
		PushPayload payloadAlias=buildPushObject_android_alias_alertWithTitle(alias);
		long msgId=0;
		try {
			PushResult result=jpushClient.sendPush(payloadAlias);
			msgId=result.msg_id;

		} catch (APIConnectionException e) {
			logger.error("Connection error. Should retry later. ", e);
		} catch (APIRequestException e) {
			logger.info("HTTP Status: " + e.getStatus());
			logger.info("Error Code: " + e.getErrorCode());
			logger.info("Error Message: " + e.getErrorMessage());
			logger.info("Msg ID: " + e.getMsgId());
			msgId=e.getMsgId();

		}
		return msgId;
	}
	/**
	 * 向指定组发送消息
	 * @param tag 组名称
	 * @return 消息id  状态码:0为成功   
	 */
	public  long sendPushTag(String tag) {
		PushPayload payloadtag = buildPushObject_android_tag_alertWithTitle(tag);
		long msgId=0;
		try {
			PushResult result = jpushClient.sendPush(payloadtag);
			msgId=result.msg_id;
			logger.info("Got result - " + result);
		} catch (APIConnectionException e) {
			logger.error("Connection error. Should retry later. ", e);

		} catch (APIRequestException e) {
			logger.info("HTTP Status: " + e.getStatus());
			logger.info("Error Code: " + e.getErrorCode());
			logger.info("Error Message: " + e.getErrorMessage());
			logger.info("Msg ID: " + e.getMsgId());
			msgId=e.getMsgId();

		}
		return msgId;
	}
	
	/**
	 * 
	 * @Description: 向指定devicetoken用户发送消息
	 * @param @param session
	 * @param @return   
	 * @return 消息id 状态码:0为成功 
	 */
	public long sendPushDevicetoken(String session){
		PushPayload payloadAlias=buildPushObject_alertWithTitle(session);
		long msgId=0;
		try {
			PushResult result=jpushClient.sendPush(payloadAlias);
			msgId=result.msg_id;
		} catch (APIConnectionException e) {
			logger.error("Connection error. Should retry later. ", e);
		} catch (APIRequestException e) {
			logger.info("HTTP Status: " + e.getStatus());
			logger.info("Error Code: " + e.getErrorCode());
			logger.info("Error Message: " + e.getErrorMessage());
			logger.info("Msg ID: " + e.getMsgId());
			msgId=e.getMsgId();

		}
		return msgId;
	}

	/**
	 * 
	 * @Description: 向android和ios用户一一推送消息
	 * @param @param alias
	 * @param @return   
	 * @return PushPayload  
	 */
	public  PushPayload buildPushObject_alertWithTitle(String useId) {
		return PushPayload.newBuilder().setPlatform(Platform.all())
				.setAudience(Audience.alias(useId)).setNotification(Notification.alert(message)).build();
	}

	/**
	 * 下列封装了三种获得消息推送对象(PushPayload)的方法
	 *  buildPushObject_android_alias_alertWithTitle、
	 *  buildPushObject_android_tag_alertWithTitle、
	 *  buildPushObject_all_all_alert
	 */
	public  PushPayload buildPushObject_android_alias_alertWithTitle(Set alias) {
		return PushPayload.newBuilder().setPlatform(Platform.android())
				.setAudience(Audience.alias(alias)).setNotification(Notification.android(message,title,null)).build();
	}

	public  PushPayload buildPushObject_android_tag_alertWithTitle(String tag){
		return PushPayload.newBuilder().setPlatform(Platform.android())
				.setAudience(Audience.tag(tag))
				.setNotification(Notification.android(message, title, null)).build();}

	public  PushPayload buildPushObject_all_all_alert() {
		return PushPayload.alertAll(message);
	}

	/**
	 * @return the jpushClient
	 */
	public JPushClient getJpushClient() {
		return jpushClient;
	}
	/**
	 * @param jpushClient the jpushClient to set
	 */
	public void setJpushClient(JPushClient jpushClient) {
		this.jpushClient = jpushClient;
	}
	/**
	 * @return the title
	 */
	public String getTitle() {
		return title;
	}
	/**
	 * @param title the title to set
	 */
	public void setTitle(String title) {
		this.title = title;
	}
	/**
	 * @return the message
	 */
	public String getMessage() {
		return message;
	}
	/**
	 * @param message the message to set
	 */
	public void setMessage(String message) {
		this.message = message;
	}
    
}



 测试一下: 
   

    public static void main(String[] args) {
        MessagePush messagePush = new MessagePush("Test","我推送的第一条消息");
        long msgId = messagePush.sendPushDevicetoken(" 53459gfihfgh95459gdf9056");
    }

你可能感兴趣的:(极光推送服务端向手机app即时推送消息或通知)