公司手机项目使用到了极光推送,将代码记录下来,免费的情况下极光推送的消息送达率有8,9成,速度也还可以,对于送达率要求不严格的项目可以应用
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
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;
import cn.jpush.api.report.MessagesResult;
public class Punish {
protected static final Logger LOG = LoggerFactory.getLogger(Punish.class);
public static final String TITLE = "hahaha";
public static final String ALERT = "推推推推推推送";
public static final String MSG_CONTENT = "推送";
public static final String REGISTRATION_ID = "0900e8d85ef";
public static final String TAG = "tag_api";
String appKey = "申请的appKey";
String masterSecret = "安全密匙";
private String title;
private String content;
private String message;
public static JPushClient jpushClient = null;
public static void testSendPush(String appKey, String masterSecret) {
jpushClient = new JPushClient(masterSecret, appKey, 3);
// 生成推送的内容,这里我们先测试全部推送
PushPayload payload = buildPushObject_all_alias_alert();
try {
System.out.println(payload.toString());
PushResult result = jpushClient.sendPush(payload);
System.out.println(result + "................................");
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());
}
}
/**
* 向指定人发送消息 android
*
* @param alias
* 人名称
* @return 消息id
*/
public Long sendPushalias(String alias, String message, String title,
String type,String userNo,String touserNo,String res) {
PushPayload payloadtag = buildPushObject_android_alias_alertWithTitle(
alias, message, title, type,userNo,touserNo,res);
PushPayload payloadtagios= buildPushObject_ios_alias_alertWithTitle(alias, message, title, type,userNo,touserNo,res);
long msgId = 0;
long msgId2 = 0;
try {
jpushClient = new JPushClient(masterSecret, appKey, 3);
PushResult result = jpushClient.sendPush(payloadtag);
msgId = result.ERROR_CODE_OK;
//jpushClient = new JPushClient(masterSecret, appKey, 3);
PushResult resultios = jpushClient.sendPush(payloadtagios);
msgId2 = resultios.ERROR_CODE_OK;
} catch (APIConnectionException e) {
msgId = e.getDoneRetriedTimes();
return msgId;
} catch (APIRequestException e) {
msgId = e.getErrorCode();
return msgId;
}
return msgId;
}
/**
* 向指定组发送消息 android
*
* @param tag
* 组名称
* @return 消息id
*/
public Long sendPushTag(Set<String> tag, String message, String title,
String type,String userNo) {
PushPayload payloadtag = buildPushObject_android_tags_alertWithTitle(
tag, message, title, type,userNo);
PushPayload payloadtagios = buildPushObject_ios_tags_alertWithTitle(
tag, message, title, type,userNo);
long msgId = 0;
try {
jpushClient = new JPushClient(masterSecret, appKey, 3);
PushResult result = jpushClient.sendPush(payloadtag);
msgId = result.ERROR_CODE_OK;
PushResult resultios = jpushClient.sendPush(payloadtagios);
msgId = resultios.ERROR_CODE_OK;
System.out.println("msg" + msgId);
} catch (APIConnectionException e) {
msgId=e.getDoneRetriedTimes();
return msgId;
} catch (APIRequestException e) {
msgId=e.getErrorCode();
return msgId;
}
return msgId;
}
/**
* 向指定人发送消息 ios
*
* @param alias
* 人名称
* @return 消息id
*/
public Long sendPushaliasios(String alias, String message, String title,
String type,String userNo,String touserNo,String res) {
PushPayload payloadtag = buildPushObject_android_alias_alertWithTitle(
alias, message, title, type,userNo,touserNo,res);
long msgId = 0;
try {
jpushClient = new JPushClient(masterSecret, appKey, 3);
PushResult result = jpushClient.sendPush(payloadtag);
msgId = result.ERROR_CODE_OK;
} catch (APIConnectionException e) {
msgId=e.getDoneRetriedTimes();
return msgId;
} catch (APIRequestException e) {
msgId=e.getErrorCode();
return msgId;
}
return msgId;
}
/**
* 向指定组发送消息 ios
*
* @param tag
* 组名称
* @return 消息id
*/
public Long sendPushTagios(Set<String> tag, String message,
String title, String type,String userNo) {
PushPayload payloadtag = buildPushObject_android_tags_alertWithTitle(
tag, message, title, type,userNo);
long msgId = 0;
try {
jpushClient = new JPushClient(masterSecret, appKey, 3);
PushResult result = jpushClient.sendPush(payloadtag);
msgId = result.ERROR_CODE_OK;
} catch (APIConnectionException e) {
msgId=e.getDoneRetriedTimes();
return msgId;
} catch (APIRequestException e) {
msgId=e.getErrorCode();
return msgId;
}
return msgId;
}
/**
* 下列封装了三种获得消息推送对象(PushPayload)的方法
* buildPushObject_android_alias_alertWithTitle、
* buildPushObject_android_tag_alertWithTitle、 buildPushObject_all_all_alert
*/
public PushPayload buildPushObject_android_alias_alertWithTitle(
Set<String> alias) {
return PushPayload.newBuilder().setPlatform(Platform.android())
.setAudience(Audience.alias(alias))
.setNotification(Notification.android(message, title, null))
.build();
}
/**
* 别名推送 点对点 返回type区分方法 安卓只接受自定义消息
* @param alias
* @param message
* @param title
* @param type
* @param userNo
* @return
*/
public PushPayload buildPushObject_android_alias_alertWithTitle(
String alias, String message, String title, String type,String userNo,String touserNo,String res) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = format.format(new Timestamp(new Date().getTime()));
return PushPayload
.newBuilder()
.setPlatform(Platform.android())
.setAudience(Audience.alias(alias))
.setMessage(
Message.newBuilder().setTitle(title)
.setMsgContent(message).addExtra("alias", alias).addExtra("title", title).addExtra("type", type)
.addExtra("time", time).addExtra("userNo", userNo).addExtra("touserNo", userNo).addExtra("result", res).build()).build();
}
/**
* 别名推送 点对点 返回type区分方法 ios只接受通知
* @param alias
* @param message
* @param title
* @param type
* @param userNo
* @return
*/
public PushPayload buildPushObject_ios_alias_alertWithTitle(
String alias, String message, String title, String type,String userNo,String touserNo,String res) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = format.format(new Timestamp(new Date().getTime()));
return PushPayload
.newBuilder().setOptions(Options.newBuilder().setApnsProduction(true).build())
.setPlatform(Platform.ios())
.setAudience(Audience.alias(alias)).setNotification(
Notification
.newBuilder()
.setAlert("收到了一条小纸条").addPlatformNotification(
IosNotification
.newBuilder()
.incrBadge(0)
.build())
.addPlatformNotification(
IosNotification
.newBuilder().addExtra("alias", alias).addExtra("touserNo", touserNo)
.addExtra("type",
type).addExtra("time", time).addExtra("userNo", userNo).addExtra("message", message).addExtra("title", title).addExtra("result", res).build())
.build()).build();
/*.setMessage(
Message.newBuilder().setTitle(title)
.setMsgContent(message).addExtra("type", type)
.addExtra("time", time).addExtra("userNo", userNo).build())
.incrBadge(1)
*/
}
public PushPayload buildPushObject_all_all_alert() {
return PushPayload.alertAll(message);
}
// //
public static PushPayload buildPushObject_all_alias_alert() {
return PushPayload.newBuilder().setPlatform(Platform.all())// 设置接受的平台
.setAudience(Audience.all())// Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
.setNotification(Notification.alert(ALERT)).build();
}
public PushPayload buildPushObject_android_tag_alertWithTitle(String tag,
String message, String title) {
return PushPayload.newBuilder().setPlatform(Platform.android())
.setAudience(Audience.tag(tag))
.setNotification(Notification.android(message, title, null))
.build();
}
public static PushPayload buildPushObject_android_and_ios(String tag,
String content, String title) {
return PushPayload
.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.tag(tag))
.setNotification(
Notification
.newBuilder()
.setAlert(content)
.addPlatformNotification(
AndroidNotification.newBuilder()
.setTitle(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();
}
/**
* 对安装此应用通过绑定标识符(tag)来发送通知消息
*
* @param msgTitle
* 通知标题
* @param msgContent
* 通知内容
* @param userId
* 绑定标识符(tag)
* @param tag
* 标识是发送通知还是消息(通知是在客户端通知栏弹出通知、消息是直接在页面上更新UI)
* @return true 成功 false 失败
*/
/*
* public static boolean sendTagUserPush(String msgTitle, String msgContent,
* String userId, int tag) { // 在实际业务中,建议 sendNo 是一个你自己的业务可以处理的一个自增数字。 //
* 除非需要覆盖,请确保不要重复使用。详情请参考 API 文档相关说明。 int sendNo = getRandomSendNo();
*
* // IOS设备扩展参数, 设置badge,设置声音 // Mapextra = new HashMap(); // IOSExtra
* iosExtra = new IOSExtra(10, "WindowsLogonSound.wav"); // extra.put("ios",
* iosExtra);
*
* MessageResult msgResult = null;
*
* switch (tag) { case NOTIFICATION: // 对指定标识(tag)用户发送通知 msgResult =
* jpush.sendNotificationWithTag(sendNo, userId, msgTitle, msgContent);
* break; case MESSAGE: // 对指定标识(tag)用户发送消息 msgResult =
* jpush.sendCustomMessageWithTag(sendNo, userId, msgTitle, msgContent);
* break; default: break; }
*
* if (null != msgResult) { System.out.println("服务器返回数据: " +
* msgResult.toString()); if (msgResult.getErrcode() ==
* ErrorCodeEnum.NOERROR.value()) { System.out.println(String.format(
* "发送成功, sendNo= %s,messageId= %s", msgResult.getSendno(),
* msgResult.getMsg_id())); return true; } else {
* System.out.println("发送失败, 错误代码=" + msgResult.getErrcode() + ", 错误消息=" +
* msgResult.getErrmsg()); switch (msgResult.getErrcode()) { case 10:
* System.out.println("系统内部错误"); break; case 3001:
* System.out.println("HTTP Basic authorization 失败"); break; case 3002:
* System.out.println("msg_ids 参数不存在"); break;
*
* default: break; } return false; } } else { System.out.println("无法获取数据");
* return false; }
*
* }
*/
/**
* 保持 sendNo 的唯一性是有必要的 It is very important to keep sendNo unique.
*
* @return sendNo
*/
public static int getRandomSendNo() {
final int MAX = Integer.MAX_VALUE;
final int MIN = (int) MAX / 2;
return (int) (MIN + Math.random() * (MAX - MIN));
}
/**
* 向所有人发送消息
*
* @return 消息id
*/
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
// LOG.error("Connection error. Should retry later. ", e);
} catch (APIRequestException e) {
// LOG.info("HTTP Status: " + e.getStatus());
msgId = e.getMsgId();
}
return msgId;
}
}