728x90
반응형
SMALL
firebaseMessaging.sendEachForMulticast(message);
실제 운영 중인 서비스에서 동시에 몇천건씩 fcm token을 이용하여 push를 보내는 기능이 있었다.
잘만 전송되던 푸시가 제목과 같은 에러를 내뱉으며, 오류가 발생하며 실제로 유저에게 푸시가 가지않았다.
[오류]
no more than 500 tokens can be specified
오류내용 그대로 500개 이상은 보낼수없다.
[해결]
몇천건씩 동시에 발송되는 토큰을 500개씩 잘라, 순차적으로 푸시전송하도록 수정하였다.
public static List<MulticastMessage> makeMultiMessages(String title, String body, List<String> targetToken, String msgGroupId, String advisorCode) {
List<MulticastMessage> multicastMessages = new ArrayList<>();
// 500개씩 자르기 위한 루프
int batchSize = 500;
for (int i = 0; i < targetToken.size(); i += batchSize) {
List<String> batchTokens = targetToken.subList(i, Math.min(i + batchSize, targetToken.size()));
// 잘라낸 토큰들로 MulticastMessage 생성
MulticastMessage message = makeMultiMessage(title, body, batchTokens, msgGroupId, advisorCode);
multicastMessages.add(message);
}
return multicastMessages;
}
List<MulticastMessage> multicastMessages = makeMultiMessages(msgSubject, msgContent, fcmTokens, msgGroupId, pushQueueDto.getMsgSendMasterDto().getAdvisorCode());
for (MulticastMessage multicastMessage : multicastMessages) {
firebaseMessaging.sendEachForMulticast(multicastMessage);
}
728x90
반응형
LIST