Я пытаюсь отправить уведомление pu sh на устройство на основе токена с помощью Firebase SDK. Я реализовал сервер в Spring Boot. Я могу отправить сообщение на свое устройство с полезной нагрузкой ниже.
{
"token":"eXn97K74SoavdyblW3-8cFQDgLFzVhLCIDugdvmofbIzSmwY4ty3MwuTdFQ48sIQU9QSdLKC1BWE6NeL8zYS.....",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"body" : "Mario",
"title" : "PortugalVSDenmark",
"click_action":"test"
}
}
Но если я добавлю поле click_action в конструктор уведомлений, мой код на сервере говорит, что разрешены только поля заголовка и тела. Как ни удивительно, в Android Studio он показывает метод с именем getNotification () dot getClickAction () Итак, мой вопрос заключается в том, как сделать этот атрибут click_action подходящим для моего сервера logi c. Любое предложение будет полезным.
here is my Service class in Spring boot
package com.example.demo.service;
import com.example.demo.dto.NotificationPlusDataDTO;
import com.example.demo.dto.NotificationRequestDto;
import com.example.demo.dto.SubscriptionRequestDto;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.messaging.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.io.IOException;
@Slf4j
@Service
public class NotificationService {
@Value("${app.firebase-config}")
private String firebaseConfig;
private FirebaseApp firebaseApp;
@PostConstruct
private void initialize() {
try {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(new ClassPathResource(firebaseConfig).getInputStream())).build();
if (FirebaseApp.getApps().isEmpty()) {
this.firebaseApp = FirebaseApp.initializeApp(options);
} else {
this.firebaseApp = FirebaseApp.getInstance();
}
} catch (IOException e) {
System.out.println( e+" Some Error ");
}
}
public String sendPnsToDevice(NotificationRequestDto notificationRequestDto) {
Message message = Message.builder()
.setToken(notificationRequestDto.getTarget())
.setNotification(new Notification(notificationRequestDto.getTitle(), notificationRequestDto.getBody()))
.putData("content", notificationRequestDto.getTitle())
.putData("body", notificationRequestDto.getBody())
.build();
String response = null;
try {
response = FirebaseMessaging.getInstance().send(message);
} catch (FirebaseMessagingException e) {
System.out.println("Fail to send firebase notification"+ e);
}
return response;
}
public String sendDataPlusNotification(NotificationPlusDataDTO notificationPlusDataDTO){
Message message= Message.builder()
.setToken(notificationPlusDataDTO.getToken())
.setNotification(new com.example.demo.dto.Notification(notificationPlusDataDTO.getNotification().getTitle(), notificationPlusDataDTO.getData().getBody()))
.putData("title",notificationPlusDataDTO.getData().getTitle())
.putData("body",notificationPlusDataDTO.getData().getBody())
.putData("click_action",notificationPlusDataDTO.getData().getClick_action())
.build();
String response = null;
try {
response = FirebaseMessaging.getInstance().send(message);
} catch (FirebaseMessagingException e) {
System.out.println("Fail to send firebase notification"+ e);
}
return response;
}}