onClick action from mobile notification center
This commit is contained in:
parent
6754d8eddb
commit
641008c262
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.server.service.notification.channels;
|
package org.thingsboard.server.service.notification.channels;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.google.firebase.messaging.FirebaseMessagingException;
|
import com.google.firebase.messaging.FirebaseMessagingException;
|
||||||
import com.google.firebase.messaging.MessagingErrorCode;
|
import com.google.firebase.messaging.MessagingErrorCode;
|
||||||
@ -60,6 +61,19 @@ public class MobileAppNotificationChannel implements NotificationChannel<User, M
|
|||||||
@Override
|
@Override
|
||||||
public void sendNotification(User recipient, MobileAppDeliveryMethodNotificationTemplate processedTemplate, NotificationProcessingContext ctx) throws Exception {
|
public void sendNotification(User recipient, MobileAppDeliveryMethodNotificationTemplate processedTemplate, NotificationProcessingContext ctx) throws Exception {
|
||||||
NotificationRequest request = ctx.getRequest();
|
NotificationRequest request = ctx.getRequest();
|
||||||
|
NotificationInfo info = request.getInfo();
|
||||||
|
if (info != null && info.getDashboardId() != null) {
|
||||||
|
ObjectNode additionalConfig = JacksonUtil.asObject(processedTemplate.getAdditionalConfig());
|
||||||
|
ObjectNode onClick = JacksonUtil.asObject(additionalConfig.get("onClick"));
|
||||||
|
if (onClick.get("enabled") == null || !Boolean.parseBoolean(onClick.get("enabled").asText())) {
|
||||||
|
onClick.put("enabled", true);
|
||||||
|
onClick.put("linkType", "DASHBOARD");
|
||||||
|
onClick.put("setEntityIdInState", true);
|
||||||
|
onClick.put("dashboardId", info.getDashboardId().toString());
|
||||||
|
additionalConfig.set("onClick", onClick);
|
||||||
|
}
|
||||||
|
processedTemplate.setAdditionalConfig(additionalConfig);
|
||||||
|
}
|
||||||
Notification notification = Notification.builder()
|
Notification notification = Notification.builder()
|
||||||
.requestId(request.getId())
|
.requestId(request.getId())
|
||||||
.recipientId(recipient.getId())
|
.recipientId(recipient.getId())
|
||||||
@ -68,7 +82,7 @@ public class MobileAppNotificationChannel implements NotificationChannel<User, M
|
|||||||
.subject(processedTemplate.getSubject())
|
.subject(processedTemplate.getSubject())
|
||||||
.text(processedTemplate.getBody())
|
.text(processedTemplate.getBody())
|
||||||
.additionalConfig(processedTemplate.getAdditionalConfig())
|
.additionalConfig(processedTemplate.getAdditionalConfig())
|
||||||
.info(request.getInfo())
|
.info(info)
|
||||||
.status(NotificationStatus.SENT)
|
.status(NotificationStatus.SENT)
|
||||||
.build();
|
.build();
|
||||||
notificationService.saveNotification(recipient.getTenantId(), notification);
|
notificationService.saveNotification(recipient.getTenantId(), notification);
|
||||||
@ -114,12 +128,6 @@ public class MobileAppNotificationChannel implements NotificationChannel<User, M
|
|||||||
Optional.ofNullable(info.getStateEntityId()).ifPresent(stateEntityId -> {
|
Optional.ofNullable(info.getStateEntityId()).ifPresent(stateEntityId -> {
|
||||||
data.put("stateEntityId", stateEntityId.getId().toString());
|
data.put("stateEntityId", stateEntityId.getId().toString());
|
||||||
data.put("stateEntityType", stateEntityId.getEntityType().name());
|
data.put("stateEntityType", stateEntityId.getEntityType().name());
|
||||||
if (!"true".equals(data.get("onClick.enabled")) && info.getDashboardId() != null) {
|
|
||||||
data.put("onClick.enabled", "true");
|
|
||||||
data.put("onClick.linkType", "DASHBOARD");
|
|
||||||
data.put("onClick.setEntityIdInState", "true");
|
|
||||||
data.put("onClick.dashboardId", info.getDashboardId().toString());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
data.put("notificationType", ctx.getNotificationType().name());
|
data.put("notificationType", ctx.getNotificationType().name());
|
||||||
switch (ctx.getNotificationType()) {
|
switch (ctx.getNotificationType()) {
|
||||||
|
|||||||
@ -231,6 +231,10 @@ public class JacksonUtil {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ObjectNode asObject(JsonNode node) {
|
||||||
|
return node != null && node.isObject() ? ((ObjectNode) node) : newObjectNode();
|
||||||
|
}
|
||||||
|
|
||||||
public static void replaceUuidsRecursively(JsonNode node, Set<String> skippedRootFields, Pattern includedFieldsPattern, UnaryOperator<UUID> replacer, boolean root) {
|
public static void replaceUuidsRecursively(JsonNode node, Set<String> skippedRootFields, Pattern includedFieldsPattern, UnaryOperator<UUID> replacer, boolean root) {
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user