사악미소
현대마법의 공방
사악미소
전체 방문자
오늘
어제
  • 분류 전체보기
    • Document
    • JavaScript
    • jQuery
    • Spring Web
      • Spring Framework
      • Spring Boot
    • Android
      • Java Code
      • Setting
    • iOS
      • Swift Code
      • Setting
    • PHP
      • Code
      • Setting
    • AWS
    • LINUX
      • Rocky Linux
      • CentOS
    • Node.js
    • Developer Tool
    • GIT
    • MAC
    • Scraping Document
    • MariaDB
    • WYSIWYG
    • Scouter
    • Docker
    • Planning
    • 용어정리
반응형

인기 글

최근 댓글

Programmer 사악미소.
사악미소

사악미소의 현대마법의 공방

Android

[FCM] Server에서 FCM 송신 하기 - Java 코드

2023. 7. 26. 16:13
728x90

 

 

 

 

FireBase Admin SDK 또는 FCM App Server 프로토콜을 사용하여 Message 요청을 작성하고

 

 

 

 

FcmSendMsgDevice.java
package com.example.fcm;

import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.Notification;

import java.io.IOException;

public class FcmSendMsgDevice {

    public static void main(String[] args) {

        try {

            // Firebase 초기화
            FirebaseInitializer.initializeFirebase();

            // 이 등록 토큰은 클라이언트 FCM SDK에서 가져옵니다.
            String registrationToken = "사용자_디바이스_토큰";

            // 알림이 포함된 메시지 페이로드 정의
            Message message = Message.builder()
                .setNotification(Notification.builder()
                    .setTitle("메시지 전송 테스트")
                    .setBody("한국어 메시지 전송")
                    .build())
                .putData("title", "메시지 전송 테스트") // title : 한국어 깨짐을 방지하기 위한 필수값
                .putData("body", "한국어 메시지 전송")  // body : 한국어 깨짐을 방지하기 위한 필수값
                .putData("score", "850")
                .putData("time", "2:45")
                .setToken(registrationToken)
                .build();

            // 제공된 등록 Token에 해당하는 기기에 메시지 전송
            String response = FirebaseMessaging.getInstance().send(message);

            // 응답은 메시지 ID 문자열입니다.
            System.out.println("Successfully sent message : " + response);

        }

        catch(IOException e) {
            System.err.println("Error initializing Firebase : " + e.getMessage());
            e.printStackTrace();
        }

        catch(Exception e) {
            System.err.println("Error sending FCM message : " + e.getMessage());
            e.printStackTrace();
        }
    }
}

 

 

 

 

FcmSendMsgMultiple.java
package com.example.fcm;

import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.MulticastMessage;
import com.google.firebase.messaging.Notification;
import com.google.firebase.messaging.BatchResponse;
import com.google.firebase.messaging.SendResponse;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FcmSendMsgMultiple {

    public static void main(String[] args) {

        try {
            
            // Firebase 초기화
            FirebaseInitializer.initializeFirebase();

            // 여러 기기에 대한 등록 토큰 리스트
            // 한번에 보낼 수 사용자의 수( 토큰 )은 500개가 최대이다.
            List<String> registrationTokens = Arrays.asList(
                  "사용자_디바이스_토큰_01"
                , "사용자_디바이스_토큰_02"
            );

            // 알림이 포함된 멀티캐스트 메시지 페이지 로드 정의
            MulticastMessage message = MulticastMessage.builder()
                .setNotification(Notification.builder()
                    .setTitle("메시지 전송 테스트")
                    .setBody("한국어 메시지 전송")
                    .build())
                .putData("title", "메시지 전송 테스트") // title : 한국어 깨짐을 방지하기 위한 필수값
                .putData("body", "한국어 메시지 전송")  // body : 한국어 깨짐을 방지하기 위한 필수값
                .putData("score", "850")
                .putData("time", "2:45")
                .addAllTokens(registrationTokens)
                .build();

            // 실패한 토큰을 확인하고 수집
            BatchResponse response = FirebaseMessaging.getInstance().sendEachForMulticast(message);
            System.out.println("Successfully sent messages : " + response.getSuccessCount() + " / " + registrationTokens.size());

            // 유효하지 않은 토큰을 식별하고 제거
            if(response.getFailureCount() > 0) {

                List<SendResponse> responses = response.getResponses();
                List<String> failedTokens = new ArrayList<>();

                for(int i = 0; i < responses.size(); i++) {

                    SendResponse sendResponse = responses.get(i);

                    if (!sendResponse.isSuccessful()) {
                        String errorCode = sendResponse.getException().getMessage();

                        // Identify and remove invalid tokens
                        if(
                               errorCode.contains("NotRegistered")
                            || errorCode.contains("InvalidRegistration")
                            || errorCode.contains("MismatchSenderId")
                        ) {

                            failedTokens.add(registrationTokens.get(i));
                        }
                    }
                }

                System.out.println("List of tokens that caused failures : " + failedTokens);

                // 여기에서 `failedTokens`를 데이터베이스에서 제거하는 코드를 추가
            }

        }

        catch(IOException e) {
            System.err.println("Error initializing Firebase : " + e.getMessage());
            e.printStackTrace();
        }

        catch(Exception e) {
            System.err.println("Error sending FCM message : " + e.getMessage());
            e.printStackTrace();
        }
    }
}
728x90

'Android' 카테고리의 다른 글

[Android] Windows 환경에 Android Studio 설치하기  (0) 2021.10.26
    'Android' 카테고리의 다른 글
    • [Android] Windows 환경에 Android Studio 설치하기
    사악미소
    사악미소

    티스토리툴바