Page 1 of 1

Schwierigkeiten bei der Multicast-Push-Benachrichtigung im Java Spring Boot

Posted: 13 Jan 2025, 16:49
by Guest
Meine Anforderung ist, dass ich ein Nachrichtenportalprojekt durchführe, bei dem ich die neuesten hinzugefügten Nachrichten an alle Token senden möchte, die ich habe. Das Problem, mit dem ich konfrontiert bin, ist, dass ich die sendMulticast-Funktion in Fire Base nicht verwenden kann, sondern eine Benachrichtigung für ein einzelnes Token mit dem Inhalt senden kann. Wenn ich jedoch versuche, Benachrichtigungen für mehrere Token zu senden, treten Probleme auf. Ich habe die benötigten Abhängigkeiten wie Guava, Firebase Admin und alle verwendet. Ich habe den Code von der Firebase-Konsole selbst übernommen.
Der Fehler, den ich erhalten habe, ist:
Fehler beim Senden von Benachrichtigungen: Unerwartet HTTP-Antwort mit Status: 404
404. Das ist ein Fehler.
Die angeforderte URL /batch wurde auf diesem Server nicht gefunden. Das ist alles, was wir wissen.
Unten ist der Code:

Code: Select all

public class FireBaseMessagingService {

private static final Logger log = LoggerFactory.getLogger(FireBaseMessagingService.class);

@Autowired
FirebaseMessaging firebaseMessaging;

public String sendNotifications(NotificationMessagingFCM notifications) {

String title = notifications.getTitle();
String body = notifications.getBody();
String image = notifications.getImage();
List recipientTokens = notifications.getRecipientToken();

Notification notification = Notification.builder().setTitle(title).setBody(body).setImage(image).build();

int batchSize = 500;
int totalSuccess = 0;
int totalFailure = 0;

for (int i = 0; i < recipientTokens.size(); i += batchSize) {
List batchTokens = recipientTokens.subList(i, Math.min(i + batchSize, recipientTokens.size()));

MulticastMessage message = MulticastMessage.builder()
.addAllTokens(batchTokens)
.setNotification(notification)
.build();

try {
BatchResponse response = firebaseMessaging.sendMulticast(message);
totalSuccess += response.getSuccessCount();
totalFailure += response.getFailureCount();

if (response.getFailureCount() > 0) {
List failures = response.getResponses();
for (int j = 0; j < failures.size(); j++) {
if (!failures.get(j).isSuccessful()) {
log.error("Failed to send notification to token: " + batchTokens.get(j) + " - "
+ failures.get(j).getException());
}
}
}
} catch (FirebaseMessagingException e) {
log.error("Error sending notifications: " + e.getMessage(), e);
return "Error Sending Notifications: " + e.getMessage();
}
}

return "Success: " + totalSuccess + " messages were sent, Failures: " + totalFailure;
}

}