添加撤回/删除推送通知。在iOS已经实现,在android平台需要实现
This commit is contained in:
@@ -24,7 +24,7 @@ public class PushMessage {
|
|||||||
public String voipDeviceToken;
|
public String voipDeviceToken;
|
||||||
public boolean isHiddenDetail;
|
public boolean isHiddenDetail;
|
||||||
public String language;
|
public String language;
|
||||||
|
public long messageId;
|
||||||
|
|
||||||
public String getSender() {
|
public String getSender() {
|
||||||
return sender;
|
return sender;
|
||||||
|
|||||||
@@ -6,4 +6,6 @@ public interface PushMessageType {
|
|||||||
int PUSH_MESSAGE_TYPE_VOIP_BYE = 2;
|
int PUSH_MESSAGE_TYPE_VOIP_BYE = 2;
|
||||||
int PUSH_MESSAGE_TYPE_FRIEND_REQUEST = 3;
|
int PUSH_MESSAGE_TYPE_FRIEND_REQUEST = 3;
|
||||||
int PUSH_MESSAGE_TYPE_VOIP_ANSWER = 4;
|
int PUSH_MESSAGE_TYPE_VOIP_ANSWER = 4;
|
||||||
|
int PUSH_MESSAGE_TYPE_RECALLED = 5;
|
||||||
|
int PUSH_MESSAGE_TYPE_DELETED = 6;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,12 @@ public class FCMPush {
|
|||||||
|
|
||||||
|
|
||||||
public void push(PushMessage pushMessage) {
|
public void push(PushMessage pushMessage) {
|
||||||
|
if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
//Todo not implement
|
||||||
|
//撤回或者删除消息,需要更新远程通知,暂未实现
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Notification.Builder builder = Notification.builder().setTitle(pushMessage.senderName).setBody(pushMessage.pushContent);
|
Notification.Builder builder = Notification.builder().setTitle(pushMessage.senderName).setBody(pushMessage.pushContent);
|
||||||
Message message = Message.builder()
|
Message message = Message.builder()
|
||||||
.setNotification(builder.build())
|
.setNotification(builder.build())
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cn.wildfirechat.push.android.hms;
|
|||||||
|
|
||||||
|
|
||||||
import cn.wildfirechat.push.PushMessage;
|
import cn.wildfirechat.push.PushMessage;
|
||||||
|
import cn.wildfirechat.push.PushMessageType;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
@@ -46,6 +47,12 @@ public class HMSPush {
|
|||||||
|
|
||||||
//发送Push消息
|
//发送Push消息
|
||||||
public void push(PushMessage pushMessage) {
|
public void push(PushMessage pushMessage) {
|
||||||
|
if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
//Todo not implement
|
||||||
|
//撤回或者删除消息,需要更新远程通知,暂未实现
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (tokenExpiredTime <= System.currentTimeMillis()) {
|
if (tokenExpiredTime <= System.currentTimeMillis()) {
|
||||||
try {
|
try {
|
||||||
refreshToken();
|
refreshToken();
|
||||||
|
|||||||
@@ -32,6 +32,12 @@ public class MeiZuPush {
|
|||||||
private MeiZuConfig mConfig;
|
private MeiZuConfig mConfig;
|
||||||
|
|
||||||
public void push(PushMessage pushMessage) {
|
public void push(PushMessage pushMessage) {
|
||||||
|
if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
//Todo not implement
|
||||||
|
//撤回或者删除消息,需要更新远程通知,暂未实现
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//组装透传消息
|
//组装透传消息
|
||||||
String title;
|
String title;
|
||||||
if (pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_FRIEND_REQUEST) {
|
if (pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_FRIEND_REQUEST) {
|
||||||
|
|||||||
@@ -38,6 +38,11 @@ public class OppoPush {
|
|||||||
if (mSender == null) {
|
if (mSender == null) {
|
||||||
LOG.error("Oppo push message can't sent, because not initial correctly");
|
LOG.error("Oppo push message can't sent, because not initial correctly");
|
||||||
}
|
}
|
||||||
|
if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
//Todo not implement
|
||||||
|
//撤回或者删除消息,需要更新远程通知,暂未实现
|
||||||
|
return;
|
||||||
|
}
|
||||||
Result result = null;
|
Result result = null;
|
||||||
try {
|
try {
|
||||||
Notification notification = getNotification(pushMessage); //创建通知栏消息体
|
Notification notification = getNotification(pushMessage); //创建通知栏消息体
|
||||||
|
|||||||
@@ -42,6 +42,12 @@ public class VivoPush {
|
|||||||
refreshToken();
|
refreshToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
//Todo not implement
|
||||||
|
//撤回或者删除消息,需要更新远程通知,暂未实现
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Result resultMessage = null;
|
Result resultMessage = null;
|
||||||
try {
|
try {
|
||||||
if (pushMessage.isHiddenDetail) {
|
if (pushMessage.isHiddenDetail) {
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ public class XiaomiPush {
|
|||||||
.timeToLive(timeToLive)
|
.timeToLive(timeToLive)
|
||||||
.enableFlowControl(false)
|
.enableFlowControl(false)
|
||||||
.build();
|
.build();
|
||||||
|
} else if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
//Todo not implement
|
||||||
|
//撤回或者删除消息,需要更新远程通知,暂未实现
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
long timeToLive = 600 * 1000;//10 min
|
long timeToLive = 600 * 1000;//10 min
|
||||||
message = new Message.Builder()
|
message = new Message.Builder()
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ import com.turo.pushy.apns.util.concurrent.PushNotificationFuture;
|
|||||||
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
||||||
import io.netty.util.concurrent.Future;
|
import io.netty.util.concurrent.Future;
|
||||||
import io.netty.util.concurrent.GenericFutureListener;
|
import io.netty.util.concurrent.GenericFutureListener;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -87,11 +90,32 @@ public class ApnsServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getMessageId(PushMessage pushMessage) {
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = (JSONObject)(new JSONParser().parse(pushMessage.pushData));
|
||||||
|
if(jsonObject.get("messageUid") instanceof Long) {
|
||||||
|
return (Long)jsonObject.get("messageUid");
|
||||||
|
} else if(jsonObject.get("messageUid") instanceof Integer) {
|
||||||
|
return (Integer)jsonObject.get("messageUid");
|
||||||
|
} else if(jsonObject.get("messageUid") instanceof Double) {
|
||||||
|
double uid = (Double)jsonObject.get("messageUid");
|
||||||
|
return (long)uid;
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
public void pushMessage(PushMessage pushMessage) {
|
public void pushMessage(PushMessage pushMessage) {
|
||||||
ApnsClient service;
|
ApnsClient service;
|
||||||
String sound = mConfig.alert;
|
String sound = mConfig.alert;
|
||||||
|
|
||||||
|
String collapseId = null;
|
||||||
|
if(pushMessage.messageId > 0) {
|
||||||
|
collapseId = pushMessage.messageId + "";
|
||||||
|
}
|
||||||
|
|
||||||
String pushContent = pushMessage.getPushContent();
|
String pushContent = pushMessage.getPushContent();
|
||||||
boolean hiddenDetail = pushMessage.isHiddenDetail;
|
boolean hiddenDetail = pushMessage.isHiddenDetail;
|
||||||
if (pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_VOIP_INVITE) {
|
if (pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_VOIP_INVITE) {
|
||||||
@@ -106,9 +130,30 @@ public class ApnsServer {
|
|||||||
pushContent = "已被其他端接听";
|
pushContent = "已被其他端接听";
|
||||||
sound = null;
|
sound = null;
|
||||||
hiddenDetail = false;
|
hiddenDetail = false;
|
||||||
|
} else if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED) {
|
||||||
|
pushContent = "消息已被撤回";
|
||||||
|
sound = null;
|
||||||
|
hiddenDetail = false;
|
||||||
|
long recalledId = getMessageId(pushMessage);
|
||||||
|
if(recalledId > 0) {
|
||||||
|
collapseId = recalledId + "";
|
||||||
|
}
|
||||||
|
pushMessage.pushData = null;
|
||||||
|
} else if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) {
|
||||||
|
pushContent = "消息已被删除";
|
||||||
|
sound = null;
|
||||||
|
hiddenDetail = false;
|
||||||
|
long deletedId = getMessageId(pushMessage);
|
||||||
|
if(deletedId > 0) {
|
||||||
|
collapseId = deletedId + "";
|
||||||
|
}
|
||||||
|
pushMessage.pushData = null;
|
||||||
|
} else if(pushMessage.pushMessageType != PushMessageType.PUSH_MESSAGE_TYPE_NORMAL) {
|
||||||
|
LOG.error("not support push message type:{}", pushMessage.pushMessageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
int badge = pushMessage.getUnReceivedMsg();
|
|
||||||
|
int badge = pushMessage.getUnReceivedMsg();
|
||||||
if (badge <= 0) {
|
if (badge <= 0) {
|
||||||
badge = 1;
|
badge = 1;
|
||||||
}
|
}
|
||||||
@@ -187,10 +232,10 @@ public class ApnsServer {
|
|||||||
} else {
|
} else {
|
||||||
service = developSvc;
|
service = developSvc;
|
||||||
}
|
}
|
||||||
if(pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_NORMAL || StringUtils.isEmpty(pushMessage.getVoipDeviceToken())) {
|
if((pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_NORMAL || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_RECALLED || pushMessage.pushMessageType == PushMessageType.PUSH_MESSAGE_TYPE_DELETED) || StringUtils.isEmpty(pushMessage.getVoipDeviceToken())) {
|
||||||
c.add(Calendar.MINUTE, 10); //普通推送
|
c.add(Calendar.MINUTE, 10); //普通推送
|
||||||
String payload = payloadBuilder.buildWithDefaultMaximumLength();
|
String payload = payloadBuilder.buildWithDefaultMaximumLength();
|
||||||
pushNotification = new SimpleApnsPushNotification(pushMessage.deviceToken, pushMessage.packageName, payload, c.getTime(), DeliveryPriority.CONSERVE_POWER, PushType.ALERT);
|
pushNotification = new SimpleApnsPushNotification(pushMessage.deviceToken, pushMessage.packageName, payload, c.getTime(), DeliveryPriority.CONSERVE_POWER, PushType.ALERT, collapseId);
|
||||||
} else {
|
} else {
|
||||||
c.add(Calendar.MINUTE, 1); //voip通知,使用普通推送
|
c.add(Calendar.MINUTE, 1); //voip通知,使用普通推送
|
||||||
payloadBuilder.setContentAvailable(true);
|
payloadBuilder.setContentAvailable(true);
|
||||||
@@ -198,7 +243,7 @@ public class ApnsServer {
|
|||||||
payloadBuilder.addCustomProperty("voip_type", pushMessage.pushMessageType);
|
payloadBuilder.addCustomProperty("voip_type", pushMessage.pushMessageType);
|
||||||
payloadBuilder.addCustomProperty("voip_data", pushMessage.pushData);
|
payloadBuilder.addCustomProperty("voip_data", pushMessage.pushData);
|
||||||
String payload = payloadBuilder.buildWithDefaultMaximumLength();
|
String payload = payloadBuilder.buildWithDefaultMaximumLength();
|
||||||
pushNotification = new SimpleApnsPushNotification(pushMessage.deviceToken, pushMessage.packageName, payload, c.getTime(), DeliveryPriority.IMMEDIATE, PushType.BACKGROUND);
|
pushNotification = new SimpleApnsPushNotification(pushMessage.deviceToken, pushMessage.packageName, payload, c.getTime(), DeliveryPriority.IMMEDIATE, PushType.BACKGROUND, collapseId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (pushMessage.getPushType() == IOSPushType.IOS_PUSH_TYPE_DISTRIBUTION) {
|
if (pushMessage.getPushType() == IOSPushType.IOS_PUSH_TYPE_DISTRIBUTION) {
|
||||||
@@ -208,7 +253,7 @@ public class ApnsServer {
|
|||||||
}
|
}
|
||||||
c.add(Calendar.MINUTE, 1);
|
c.add(Calendar.MINUTE, 1);
|
||||||
String payload = payloadBuilder.buildWithDefaultMaximumLength();
|
String payload = payloadBuilder.buildWithDefaultMaximumLength();
|
||||||
pushNotification = new SimpleApnsPushNotification(pushMessage.voipDeviceToken, pushMessage.packageName + ".voip", payload, c.getTime(), DeliveryPriority.IMMEDIATE, PushType.VOIP);
|
pushNotification = new SimpleApnsPushNotification(pushMessage.voipDeviceToken, pushMessage.packageName + ".voip", payload, c.getTime(), DeliveryPriority.IMMEDIATE, PushType.VOIP, collapseId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (service == null) {
|
if (service == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user