引入依赖
<dependency>
<groupId>com.aliyungroupId>
<artifactId>aliyun-java-sdk-pushartifactId>
<version>3.10.1version>
dependency>
<dependency>
<groupId>com.aliyungroupId>
<artifactId>aliyun-java-sdk-coreartifactId>
<version>[4.3.2,5.0.0)version>
dependency>
推送工具类
@Component
public class AliPushUtil {
public static final String TAG_DEVICE="DEVICE";
public static final String TAG_ALIAS="ALIAS";
public static final String TAG_ACCOUNT="ACCOUNT";
public static final String TAG_TAG="TAG";
public static final String TAG_ALL="ALL";
@Value("${aliyun.push.access-key-id-em}")
private String accessKeyId;
@Value("${aliyun.push.access-key-secret-em}")
private String accessKeySecret;
@Value("${aliyun.push.app-key-em}")
private long appKey;
public void pushAndroidMsg(String tagType,String tags,String title,String content,String messageType,String extParameters,Integer time){
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
PushRequest pushRequest = new PushRequest();
// 推送目标
pushRequest.setAppKey(appKey);
//推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
pushRequest.setTarget(tagType);
//根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
pushRequest.setTargetValue(tags);
// pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
// pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
// 消息类型 MESSAGE NOTICE
pushRequest.setPushType(messageType);
// 设备类型 ANDROID iOS ALL.
pushRequest.setDeviceType("ANDROID");
// 推送配置
// 消息的标题
pushRequest.setTitle(title);
// 消息的内容
pushRequest.setBody(content);
// 推送配置: Android
//通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
pushRequest.setAndroidNotifyType("NONE");
//通知栏自定义样式0-100
pushRequest.setAndroidNotificationBarType(1);
//通知栏自定义样式0-100
pushRequest.setAndroidNotificationBarPriority(1);
//点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
pushRequest.setAndroidOpenType("APPLICATION");
// pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
// pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
// Android通知音乐
pushRequest.setAndroidMusic("default");
// pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
// pushRequest.setAndroidPopupTitle("Popup Title");
// pushRequest.setAndroidPopupBody("Popup Body");
//设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
pushRequest.setAndroidExtParameters(extParameters);
//安卓系统8.0及以上版本,这里加入设置
pushRequest.setAndroidNotificationChannel("1");
// 推送控制
//Date pushDate = new Date(System.currentTimeMillis()) ; // 30秒之间的时间点, 也可以设置成你指定固定时间
//String pushTime = ParameterHelper.getISO8601Time(pushDate);
// pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
// time分钟后消息失效, 不会再发送
String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + time * 60 * 1000));
pushRequest.setExpireTime(expireTime);
// 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
pushRequest.setStoreOffline(true);
try {
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageID: %s\n",pushResponse.getRequestId(), pushResponse.getMessageId());
} catch (ClientException e) {
e.printStackTrace();
}
}
/**
* 安卓推送专用
* @param tagType 推送目标类型
* @param tags 要推送的账号
* @param title 消息标题
* @param content 消息内容
* @param messageType 消息类型
* @param extParameters 额外参数
*/
public void pushAndroidMsg(String tagType,String tags,String title,String content,String messageType,String extParameters){
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
PushRequest pushRequest = new PushRequest();
// 推送目标
pushRequest.setAppKey(appKey);
//推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
pushRequest.setTarget(tagType);
//根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
pushRequest.setTargetValue(tags);
// pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
// pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
// 消息类型 MESSAGE NOTICE
pushRequest.setPushType(messageType);
// 设备类型 ANDROID iOS ALL.
pushRequest.setDeviceType("ANDROID");
// 推送配置
// 消息的标题
pushRequest.setTitle(title);
// 消息的内容
pushRequest.setBody(content);
// 推送配置: Android
//通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
pushRequest.setAndroidNotifyType("NONE");
//通知栏自定义样式0-100
pushRequest.setAndroidNotificationBarType(1);
//通知栏自定义样式0-100
pushRequest.setAndroidNotificationBarPriority(1);
//点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
pushRequest.setAndroidOpenType("APPLICATION");
// pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
// pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
// Android通知音乐
pushRequest.setAndroidMusic("default");
// pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
// pushRequest.setAndroidPopupTitle("Popup Title");
// pushRequest.setAndroidPopupBody("Popup Body");
//设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
pushRequest.setAndroidExtParameters(extParameters);
//安卓系统8.0及以上版本,这里加入设置
pushRequest.setAndroidNotificationChannel("1");
// 推送控制
//Date pushDate = new Date(System.currentTimeMillis()) ; // 30秒之间的时间点, 也可以设置成你指定固定时间
//String pushTime = ParameterHelper.getISO8601Time(pushDate);
// pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
// 24小时后消息失效, 不会再发送
String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 24 * 3600 * 1000));
pushRequest.setExpireTime(expireTime);
// 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
pushRequest.setStoreOffline(true);
try {
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageID: %s\n",pushResponse.getRequestId(), pushResponse.getMessageId());
} catch (ClientException e) {
e.printStackTrace();
}
}
@Async("asyncServiceExecutor")
public void pushExpandAndroidMsg(String tagType,String tags,String title,String content){
pushExpandAndroidMsg(tagType,tags,title,content,0);
}
@Async("asyncServiceExecutor")
public void pushExpandAndroidMsg(String tagType,String tags,String title,String content,long longTime){
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
PushRequest pushRequest = new PushRequest();
// 推送目标
pushRequest.setAppKey(appKey);
//推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
pushRequest.setTarget(tagType);
//根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
pushRequest.setTargetValue(tags);
// pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
// pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
// 消息类型 MESSAGE NOTICE
pushRequest.setPushType("NOTICE");
// 设备类型 ANDROID iOS ALL.
pushRequest.setDeviceType("ANDROID");
// 推送配置
// 消息的标题
pushRequest.setTitle(title);
// 消息的内容
pushRequest.setBody(content);
// 推送配置: Android
//通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
pushRequest.setAndroidNotifyType("BOTH");
//通知栏自定义样式0-100
pushRequest.setAndroidNotificationBarType(1);
//通知栏自定义样式0-100
pushRequest.setAndroidNotificationBarPriority(1);
//点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
pushRequest.setAndroidOpenType("APPLICATION");
// pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
// pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
// Android通知音乐
pushRequest.setAndroidMusic("default");
// pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
// pushRequest.setAndroidPopupTitle("Popup Title");
// pushRequest.setAndroidPopupBody("Popup Body");
//设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
//安卓系统8.0及以上版本,这里加入设置
pushRequest.setAndroidNotificationChannel("1");
// 推送控制
if (longTime!=0){
//用于定时发送。不设置缺省是立即发送。时间格式按照ISO8601标准表示,并需要使用UTC时间,格式为`YYYY-MM-DDThh:mm:ssZ`。
final Date pushDate = new Date(longTime);
final String pushTime = ParameterHelper.getISO8601Time(pushDate);
// 延后推送。可选,如果不设置表示立即推送
pushRequest.setPushTime(pushTime);
}
// 12小时后消息失效, 不会再发送
String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 24 * 3600 * 1000));
pushRequest.setExpireTime(expireTime);
// 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
pushRequest.setStoreOffline(true);
try {
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageID: %s\n",pushResponse.getRequestId(), pushResponse.getMessageId());
} catch (ClientException e) {
e.printStackTrace();
}
}
}