본문 바로가기

Spring

no more than 500 tokens can be specified

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