FCM Messaging с проблемой конструктора Spring Boot Server Notification () - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь отправить уведомление 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;


}}
...