FCM 주제를 사용한 첫 멀티캐스트 푸시 메시지

1. 소개

목표

이 Codelab에서는 FCM 주제를 사용하여 앱 인스턴스의 다양한 하위 그룹에 푸시 메시지를 멀티캐스트할 수 있도록 멀티 플랫폼 앱을 계측하는 방법을 알아봅니다.

완료되면 FCM 인프라를 활용하여 이러한 하위 그룹을 관리하고 하위 그룹을 통해 푸시 메시지를 멀티캐스트할 수 있습니다.

주제 개요

주제는 FCM 인프라에서 지원하는 메시지로 앱 인스턴스의 하위 그룹에 메시지를 전송합니다.

FCM은 메시지를 보내고 이러한 주제에 대한 구독을 유지하는 API를 제공합니다. 앱 인스턴스를 주제와 연결 및 연결 해제하는 작업을 각각 구독 및 구독 취소라고 합니다.

주제는 공개적으로 사용 가능한 콘텐츠에 사용되어야 합니다. 날씨 업데이트에 관한 메시지를 예로 들 수 있습니다. 사용자에게 민감한 메시지를 보내려면 Firebase Admin SDK를 사용하여 여러 기기로 메시지를 멀티캐스팅하세요.

주제 기반 멀티캐스팅은 처리량에 최적화되어 있습니다.

학습 내용

  • 모바일 앱에서 주제를 구독 및 구독 취소하는 방법
  • 주제를 사용하여 멀티캐스트 푸시 메시지를 보내는 방법
  • 주제 조건을 사용하여 여러 주제를 조합하여 메시지를 보내는 방법
  • 서버 측에서 주제 구독을 관리하고 일괄 구독 및 구독 취소를 수행하는 방법

빌드할 항목

  • 주제를 구독/구독 취소한 후 주제로 전송될 때 메시지를 수신하는 Android 앱입니다.
  • Firebase Admin SDK를 사용한 서버 측 통합으로, FCM API를 통해 주제 메시지를 전송하는 데 사용됩니다.

필요한 항목

  • 원하는 브라우저(예: Chrome)
  • 자바 애플리케이션 개발을 위한 IntelliJ IDEA IDE입니다.
    • 설치하는 동안 Gradle 지원을 선택해야 합니다.
  • Android 애플리케이션 개발을 위한 Android 스튜디오 IDE
  • Android 애플리케이션을 실행할 기기 다음 중 하나:
    • Android Emulator (Android 스튜디오에서 설정 필요)
    • 컴퓨터에 연결되어 있으며 개발자 모드로 설정된 실제 Android 기기
  • Firebase 프로젝트를 만들고 관리하는 데 사용되는 Google 계정

2. 설정

코드 가져오기

명령줄에서 GitHub 저장소를 클론합니다.

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

샘플 코드가 fcm-codelab 디렉터리에 클론됩니다.

cd fcm-codelab

이 Codelab의 시작 앱은 fcm-topics-codelab 브랜치의 messaging 디렉터리에 있습니다. 시작 코드에 도달하려면 다음 단계를 따르세요. 여기에는 StockNewsAppStockNewsServer 디렉터리 두 개가 포함되어 있습니다. 전자에는 시작 Android 앱이 있고 후자는 시작 서버 측 코드가 있습니다.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

이 Codelab의 완료된 버전은 messaging/fcm-topics-codelab/completed 디렉터리에 있습니다.

Firebase 프로젝트 만들기

  1. Firebase Console에서 프로젝트 추가를 클릭하고 Firebase 프로젝트 이름을 StockNews로 지정한 후 계속을 클릭합니다. 참고: Firebase 프로젝트의 프로젝트 ID를 기억합니다. 또는 수정 아이콘을 클릭하여 원하는 프로젝트 ID를 설정합니다.

fc08f9a7808e4553.png

  1. Google 애널리틱스 사용 설정은 건너뛰어도 됩니다. 이 Codelab에서는 필요하지 않습니다. 계속을 클릭합니다.
  2. 프로젝트 만들기를 클릭합니다.

수고하셨습니다. 이제 Firebase 프로젝트가 생성되었습니다. 이제 프로젝트 이름을 클릭하여 콘솔에 들어갈 수 있습니다.

3. 플랫폼별 Firebase 앱 구성

Firebase 지원을 사용 설정하는 데 필요한 대부분의 코드 변경사항은 작업 중인 프로젝트에 이미 체크인되어 있습니다. 그러나 모바일 플랫폼 지원을 추가하려면 다음을 수행해야 합니다.

  • Firebase 프로젝트에 원하는 플랫폼 등록
  • 플랫폼별 구성 파일을 다운로드하여 코드에 추가합니다.

이 Codelab의 목적상 Android Firebase 앱을 추가하겠습니다.

84e0b3199bef6d8a.pngAndroid 구성

  1. Firebase Console에서 설정 톱니바퀴 왼쪽 탐색 메뉴 상단의 프로젝트 설정을 선택하고 일반 페이지의 내 앱에서 Android 아이콘을 클릭합니다.

다음 대화상자가 표시됩니다. 8254fc299e82f528.png

  1. 제공해야 할 중요한 값은 Android 패키지 이름입니다. com.ticker.stocknews로 설정합니다.
    1. 여기에 제공된 패키지 이름은 시작 StockNewsApp 코드의 AndroidManifest.xml에 제공된 패키지 이름과 동일해야 합니다. ID를 찾거나 변경하려면 다음 단계를 따르세요.
      1. StockNewsApp 디렉터리에서 app/src/main/AndroidManifest.xml 파일을 엽니다.
      2. manifest 요소에서 package 속성의 문자열 값을 찾습니다. 이 값은 Android 패키지 이름입니다.
  1. Firebase 대화상자에서 복사한 패키지 이름을 Android 패키지 이름 필드에 붙여넣습니다.
  2. 이 Codelab에서는 디버그 서명 인증서 SHA-1이 필요하지 않습니다. 이 앱은 출시되지 않습니다. 이 입력란은 비워둡니다.
  3. 앱 등록을 클릭합니다.
  4. Firebase Console에서 계속 진행하여 안내에 따라 구성 파일 google-services.json을 다운로드합니다.
  5. 다른 모든 항목이 시작 앱 코드에 이미 구성되어 있으므로 나머지 설정 단계는 건너뛰어도 됩니다. Firebase Console의 기본 페이지에 앱이 나열됩니다.
  6. 방금 다운로드한 google-services.json 파일을 messaging/fcm-topics-codelab/starter/StockNewsApp/app 디렉터리에 복사합니다.

4. 앱 빌드 및 실행

실제로 앱에서 작업을 시작할 준비가 되었습니다. 먼저 앱을 빌드하고 실행합니다.

시작 앱 가져오기

Android 스튜디오를 시작하고 시작 코드 디렉터리에서 messaging/fcm-topics-codelab/starter/StockNewsApp를 가져옵니다.

프로젝트가 로드된 후 Git이 일부 로컬 변경사항을 추적하지 않는다는 알림이 표시될 수도 있습니다. 오른쪽 상단에서 'Ignore' 또는 'X'를 클릭하면 됩니다. 변경사항이 Git 저장소로 다시 푸시되지 않습니다.

Android 뷰에 있는 경우 프로젝트 창의 왼쪽 상단에 아래와 같은 이미지가 표시됩니다. (Project 뷰에 있는 경우 동일한 내용을 보려면 프로젝트를 펼쳐야 합니다.)

B574ea0089ee87c6.png

Android 스튜디오에서 처음으로 프로젝트를 백그라운드에서 컴파일하는 데는 몇 초 정도 걸릴 수 있습니다. 그동안 Android 스튜디오 하단의 상태 표시줄에 스피너가 표시됩니다.

4bc64eb3b99eb0ae.png

이 작업이 완료될 때까지 기다린 후에 코드를 변경하는 것이 좋습니다. 그러면 Android 스튜디오가 필요한 모든 구성요소를 가져올 수 있습니다.

또한 'Reload for language changes to take effect?'라는 메시지나 이와 유사한 메시지가 표시되면 'Yes'를 선택합니다.

에뮬레이터 설정

Android Emulator 설정에 도움이 필요하면 앱 실행 도움말을 참고하세요.

Android 앱 시작 코드 이해

  • 시작 코드는 최소한의 기능과 UI를 갖춘 경량 Android 앱입니다.
  • firebase-messaging SDK 의 종속 항목이 이미 app/build.gradle 파일에 추가되어 있습니다.

F04ff8f48d186dff.png

  • AndroidManifest.xmlMESSAGING_EVENT 콜백 핸들러가 이미 추가되었습니다.
    • 이 핸들러 StockNewsMessagingService.java는 다양한 Firebase 클라우드 메시징 관련 기능을 제공하는 FirebaseMessagingService 클래스를 확장합니다. 자세한 내용은 FirebaseMessagingService 문서를 참조하세요. B843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • onNewToken 함수는 FCM 등록 토큰을 만들거나 새로고침할 때 호출됩니다. 자세한 내용은 토큰 생성 모니터링을 참조하세요.
    • 메시지가 수신되고 앱이 포그라운드에 있으면 onMessageReceived 함수가 호출됩니다. 현재는 수신된 메시지만 기록합니다.
      • 백그라운드 메시지와 포그라운드 메시지 전송 및 처리의 차이점에 관한 자세한 내용은 Android 앱에서 메시지 수신을 참고하세요.
  • 또한 AndroidManifest.xml에서는 StockNewsApplication라는 Android Application 클래스도 제공됩니다. A4982a8731492dfc.pngccde692f7f68dc5a.png
    • 이 클래스는 앱이 시작될 때 가장 먼저 인스턴스화됩니다.
    • StockNewsApplication 클래스의 onCreate 함수에 FCM 등록 토큰 생성 호출이 추가됩니다. 유효한 FCM 등록 토큰이 생성되고 로깅됩니다.
  • MainActivity.java는 주식 카테고리 옵션을 표시하는 RecyclerView를 추가합니다.
  • SubscriptionAdapter.java는 주식 카테고리 선택 화면을 그리는 RecyclerView.Adapter를 구현합니다.
    • 각 주식 카테고리에는 이름과 구독 전환 버튼이 옆에 있습니다.
    • 전환 버튼을 변경하면 FCM 주제를 구독하거나 구독 취소를 호출해야 합니다.
    • 다음 섹션에서 이러한 호출을 구현합니다.
  • model/StockCategories.java 클래스에는 모든 주식 카테고리 및 관련 주제 이름의 목록이 포함되어 있습니다.

B32663ec4e865a18.png

시작 앱 실행

  1. Android 기기를 컴퓨터에 연결하거나 에뮬레이터를 시작합니다.
  2. 상단 툴바에서 대상 Android 기기나 에뮬레이터를 선택하고 실행 버튼을 누릅니다.

5b27fc5b237e06b9.png

  1. 앱 UI는 다음과 같습니다.

ff5b1a1c53231c54.png

  1. 앱에서 FCM 등록 토큰을 만들고 로깅합니다. 하지만 앱 UI는 변경되지 않습니다.
    1. 다음 단계에서 사용할 FCM 등록 토큰을 복사하여 저장합니다.

927eb66bc909f36b.png

5. 테스트 메시지 보내기

이제 이전 단계에서 설정한 앱 인스턴스에 테스트 메시지를 보낼 준비가 되었습니다.

시작 서버 코드 가져오기

IntelliJ IDEA를 시작하고 messaging/fcm-topics-codelab/starter/StockNewsServer 프로젝트를 엽니다.

왼쪽 탐색 메뉴의 프로젝트 뷰는 다음과 같이 표시됩니다.

da20711f6527dff6.png

IntellIj IDEA에서 필요한 종속 항목을 가져오는 등 프로젝트를 빌드하는 데 몇 분 정도 걸릴 수 있습니다.

서버 시작 코드 이해

  • 서버 시작 코드는 Gradle 기반 Java 프로젝트입니다.
  • build.gradle 파일에는 이미 추가된 firebase-admin SDK에 대한 종속 항목이 있습니다. 이 SDK는 다양한 FCM 메시지 전송 기능에 대한 액세스를 제공합니다.

650fc733298588f8.png

  • 마지막으로
    • FcmSender.java: 이 클래스에는 다음과 같은 참고 메서드가 포함되어 있습니다.
      • initFirebaseSDK: firebase-admin SDK를 초기화합니다.
      • sendMessageToFcmRegistrationToken: FCM 등록 토큰으로 메시지를 보냅니다.
      • sendMessageToFcmTopic: FCM 주제로 메시지를 보냅니다.
      • sendMessageToFcmTopicCondition: FCM 주제 조건에 메시지를 전송합니다.
    • FcmSubscriptionManager.java: 이 클래스에는 서버 측에서 주제 구독을 관리할 수 있는 메서드가 포함되어 있습니다.
      • initFirebaseSDK: firebase-admin SDK를 초기화합니다.
      • subscribeFcmRegistrationTokensToTopic: FCM 등록 토큰을 FCM 주제를 구독합니다.
      • unsubscribeFcmRegistrationTokensFromTopic: FCM 주제에서 FCM 등록 토큰을 구독 취소합니다.

서버 코드 설정

  1. 먼저 firebase-admin SDK가 FCM API에 대한 호출을 승인할 수 있도록 Firebase 서비스 계정을 설정해야 합니다.
    1. Firebase Console로 이동하여 왼쪽 탐색 메뉴의 프로젝트 개요 옆에 있는 톱니바퀴 아이콘을 클릭하고 프로젝트 설정을 선택합니다. 8c2108d4d7c915e9.png
    2. 설정 페이지에서 서비스 계정을 선택하고 서비스 계정 만들기를 클릭합니다. 84b128cc5dac0a85.png
    3. 이제 새 비공개 키 생성 버튼을 클릭하면 키 파일의 자동 다운로드가 시작됩니다.
    4. 키 파일 이름을 service-account.json로 바꾸고 messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources 폴더에 복사합니다.
    5. FcmSender.javaFcmSubscriptionManager.java는 모두 다음 코드를 사용하여 클래스 경로에서 service-account.json 파일을 로드합니다. 8dffbee658e0bdd.png
  2. 이제 서버 코드가 준비되었습니다. 상단 메뉴 바에서 Build -> Build Project를 실행합니다.

테스트 메시지 보내기

  1. FcmSender.java에서 sendMessageToFcmRegistrationToken 함수를 찾아 시작 앱 실행 섹션에서 복사한 FCM 등록 토큰을 registrationToken 필드에 삽입합니다.
  2. main 함수에서 sendMessageToFcmRegistrationToken 함수의 주석 처리를 삭제하고 실행을 클릭하여 코드를 실행합니다.
    1. FCM 등록 토큰이 message 객체의 Token 필드에 어떻게 설정되어 있는지 확인합니다.
    2. 또한 FirebaseMessaging 인터페이스의 send API를 사용한 방법을 확인하세요.

52e4a3ec3f816473.png

  1. 그러면 이전 단계에서 설정한 앱 인스턴스로 메시지가 전송됩니다.
  2. 앱 인스턴스가 포그라운드 상태이면 로그된 메시지 콘텐츠가 표시됩니다.

d3540ec1089f97dd.png

  1. 앱 인스턴스가 백그라운드 상태이면 알림 트레이에 메시지가 표시되는 것을 볼 수 있습니다.

31203deca59c03fe.png

좋습니다. Firebase Admin SDK를 사용하여 앱 인스턴스로 메시지를 보냈습니다. 서버에서 Firebase Admin SDK 사용에 대해 자세히 알아보세요.

6. 주제 구독 / 구독 취소 구현

이 단계에서는 Android 앱의 주식 카테고리 전환 버튼에서 주제 구독 및 구독 취소 작업을 구현합니다.

앱 사용자가 특정 주식 카테고리의 스위치를 전환하면 주제 구독 또는 구독 취소 호출이 이루어집니다.

코드 검토

  • Android 앱 코드에서 SubscriptionAdapter.java 클래스로 이동하여 RecyclerViewViewHolder 클래스를 찾습니다.

6c0614199e684f6.png

  • 클래스 생성자는 setOnCheckedChangeListener를 사용하여 구독 전환 스위치의 리스너를 설정합니다.
  • 스위치 전환에 따라 subscribeToStockCategory 메서드와 unsubscribeFromStockCategory 메서드를 각각 호출하여 구독 및 구독 취소 작업을 실행합니다.
  • setData 메서드는 RecyclerView 어댑터의 onBindViewHolder에서 호출하여 ViewHolder를 적절한 종목 카테고리와 결합합니다.

주제 구독 구현

  1. subscribeToStockCategory 메서드에서 FirebaseMessaging 객체의 subscribeToTopic API 호출을 구현합니다. 코드는 다음과 같을 수 있습니다.
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

주제 구독 취소 구현

  1. 마찬가지로 else 조건에서는 unsubscribeFromTopic API 호출을 구현합니다. 다음 행을 포함해야 합니다.
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

사용해 보기

  1. 앱을 실행하고 주식 카테고리 옵션을 전환하여 구독 및 구독 취소 작업을 실행합니다. URL에 태그를 추가하는 방법은 다음과 같습니다.

구독

구독 취소

7. 첫 번째 주제 메시지 보내기

이 단계에서는 서버 측 코드를 구현하여 FCM 주제 메시지를 보냅니다.

주제 메시지 전송을 위한 서버 측 통합 구현

  1. 서버 코드에서 FcmSender.java로 이동하여 sendMessageToFcmTopic라는 메서드를 찾습니다.

56381dd1b40cde9c.png

  1. 첫 번째 줄에 메시지를 보낼 FCM 주제를 입력합니다.
    • /topics/<Topic Name> 형식의 문자열입니다. 예를 들면 /topics/Technology입니다.
  2. 다음 줄에서 새 message 객체 (sendMessageToFcmRegistrationToken 함수에 정의된 객체와 유사함)를 만듭니다.
    • 차이점은 message 객체의 Token 필드를 설정하는 대신 Topic 필드를 설정한다는 것입니다.
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. 이제 FirebaseMessaging 인스턴스 호출을 추가하여 메시지를 보냅니다 (sendMessageToFcmRegistrationToken 함수의 전송 호출과 동일함).
FirebaseMessaging.getInstance().send(message);
  1. 마지막으로 main 함수를 업데이트하고 sendMessageToFcmTopic 함수만 호출을 사용 설정합니다.

9a6aa08dd7c28898.png

메시지 전송 및 수신 확인

  1. 주제 메시지를 보내기 전에 먼저 앱 인스턴스에서 보내려는 주제를 구독하는지 확인합니다.
    1. 해당하는 전환 버튼을 뒤집으면 됩니다. 예를 들면 다음과 같습니다.
    4668247408377712.png
  2. 이제 FcmSender.javamain 함수를 실행하여 주제 메시지를 보낼 수 있습니다.
  3. 이전과 마찬가지로 앱 인스턴스에서 메시지 수신을 관찰할 수 있어야 합니다.
    1. 포그라운드의 앱 인스턴스
    C144721399f610fe.png
    1. 백그라운드 앱 인스턴스
    44efc7dfd57e8e9a.png
  4. 보너스: 메일을 보낸 주제를 구독 취소한 다음 메시지를 다시 보내세요. 메시지가 앱 인스턴스로 전달되지 않는 것을 볼 수 있습니다.

8. 첫 번째 주제 조건 메시지 전송

주제 조건 기능을 사용하면 여러 주제 조합으로 메시지를 보낼 수 있어 잠재고객을 더욱 풍부하게 정의할 수 있습니다.

예를 들어 StockNews 앱에서 기술 또는 자동차 관련 주제를 구독하는 앱 인스턴스 그룹에 메시지를 보낼 수 있는 가능성을 고려하세요. 예를 들어 Waymo와 관련하여 주목할 만한 사건이 발생한 경우 이러한 사례가 발생할 수 있습니다.

주제를 사용하면 다음 연산자를 사용하여 불리언 표현식의 형식으로 조합을 표현할 수 있습니다.

  • && : 논리곱(AND). 예를 들어 'Technology' in topics && 'Automotive' in topics는 기술 및 자동차 관련 주제를 모두 구독하는 앱 인스턴스만 타겟팅합니다.
  • || : 논리적 OR입니다. 예: 'Technology' in topics || 'Automotive' in topics - 기술 또는 자동차 주제를 구독하는 앱 인스턴스를 타겟팅합니다.
  • () : 그룹화를 위한 괄호. 예를 들어 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics)는 기술과 자동차 또는 에너지 주제를 구독하는 앱 인스턴스만 타겟팅합니다.

이 기능을 사용하기 위한 전송 요청을 작성하는 방법을 자세히 알아보세요.

주제 조건 메시지 전송을 위한 서버 측 통합 구현

  1. 서버 코드로 돌아가서 FcmSender.java로 이동하여 sendMessageToFcmTopicCondition라는 메서드를 찾습니다.

3719a86c274522cf.png

  1. 첫 번째 줄의 topicCondition 변수에 메시지를 보낼 주제 조건을 지정합니다. 'Technology' in topics && 'Automotive' in topics로 설정할 수 있습니다.
  2. 다음 줄에서 새 message 객체 (sendMessageToFcmTopic 함수에 정의된 객체와 유사함)를 만듭니다.
    1. 차이점은 객체의 Topic 필드를 설정하는 대신 Condition 필드를 설정한다는 것입니다.
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. 이제 FirebaseMessaging 인스턴스 호출을 추가하여 메시지를 보냅니다 (sendMessageToFcmTopic 함수의 전송 호출과 동일함).
FirebaseMessaging.getInstance().send(message);
  1. 마지막으로 main 함수를 업데이트하고 sendMessageToFcmTopicCondition 함수만 호출을 사용 설정합니다.

db9588d40d2a0da6.png

메시지 보내기 및 수신 확인

  1. 주제 메시지를 보내기 전에 먼저 앱 인스턴스를 기술 및 Automotive 주제를 모두 구독하여 앱 인스턴스가 지정된 주제 조건을 충족하는지 확인합니다.
  2. 이제 FcmSender.javamain 함수를 실행하여 주제 메시지를 보낼 수 있습니다.
  3. 이전과 마찬가지로 앱 인스턴스에서 메시지 수신을 관찰할 수 있어야 합니다.
    1. 포그라운드의 앱 인스턴스
    6f612ace15aa6515.png
    1. 백그라운드 앱 인스턴스
    78044a56ac2359cb.png
  4. 보너스: 이제 기술 주제를 구독 취소하고 주제 조건 메시지를 다시 전송할 수 있습니다. 앱 인스턴스에서 메시지를 수신하지 못하는 것을 관찰해야 합니다.

9. 요약

지금까지 배운 내용을 간단히 요약해 보겠습니다.

  • 앱 인스턴스에서 주제 구독 / 구독 취소를 시작하는 방법
  • 주제로 메시지를 전송하고 구독한 앱 인스턴스에서 수신 확인
  • 주제 조건에 메시지를 전송하고 조건을 충족하는 앱 인스턴스에서 수신 확인

다음 섹션에서는 클라이언트 측에서 호출을 인스턴스화하지 않고도 앱 인스턴스에서 주제를 구독 / 구독 취소하는 방법을 알아봅니다.

c0dc20655d392690.gif

10. 서버 측에서 주제 구독 관리

지금까지 이 Codelab에서는 모든 주제 구독과 구독 취소 호출은 앱 인스턴스에서 시작되었습니다.

하지만 경우에 따라 서버 측에서 주제 구독을 관리해야 할 수도 있습니다. 예를 들어 앱이 출시될 때까지 기다리지 않고 기존 사용자층의 하위 그룹에서 새 주제를 구독할 수 있습니다.

이 섹션에서는 Firebase Admin SDK를 사용하여 서버 측에서 호출하여 주제에 대한 FCM 등록 토큰 배치를 구독 및 구독 취소하는 방법을 알아봅니다.

FCM 주제에 FCM 등록 토큰의 서버 측 구독 구현

  1. 서버 코드에서 FcmSubscriptionManager.java 클래스로 이동합니다. subscribeFcmRegistrationTokensToTopic 메서드를 찾습니다. 여기에서 subscribeToTopic API 호출을 구현합니다.

5d5709e7b3cbcb04.png

  1. 앱 인스턴스에서 에너지 주제를 구독해 보겠습니다. 그러려면 먼저 다음 두 필드에 대한 데이터를 제공해야 합니다.
    1. registrationTokens: 주제 구독을 만들려는 FCM 등록 토큰을 나타내는 쉼표로 구분된 문자열 목록입니다.
    2. topicName: 에너지 주제의 주제 이름입니다(예: /topics/Energy).
  2. 다음 몇 줄에서 다음 줄을 따라 호출을 구현합니다.
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. TopicManagementResponse에서 대략적인 결과 통계를 검사할 수 있습니다. getSuccessCount를 사용하여 성공적으로 생성된 주제 구독 수를 출력하는 경우를 예로 들 수 있습니다.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. 마지막으로 main 함수에서 subscribeFcmRegistrationTokensToTopic 함수 호출만 사용 설정합니다.

구독 만들기 및 주제 메시지 보내기

  1. 이제 주제 구독을 만들고 메시지를 보낼 준비가 되었습니다.
  2. FcmSubscriptionManager.java 클래스의 main 함수를 실행합니다. 이렇게 하면 주제 구독이 생성됩니다.
  3. 이제 메시지를 보낼 코드를 설정합니다. 이전과 마찬가지로
    1. FcmSender.java에서 sendMessageToFcmTopic 함수를 찾습니다.
    2. topicName를 에너지 주제로 설정합니다. 예: /topics/Energy
    3. Message 객체를 만들고 setTopic를 사용하여 주제에 타겟팅합니다.
    4. 마지막으로 sendMessageToFcmTopic 함수만 사용 설정하도록 main 메서드를 업데이트합니다.
  4. FcmSender.javamain 함수를 실행합니다. 그러면 메시지가 앱 인스턴스로 전송되고 앱에서 다음과 같이 메시지를 관찰할 수 있습니다.
    1. 포그라운드의 앱 인스턴스
    40ab6cf71e0e4116.png
    1. 백그라운드 앱 인스턴스
    8fba81037198209e.png

FCM 주제에 FCM 등록 토큰의 서버 측 구독 취소 구현

  1. 서버 측 주제 구독 취소의 경우 이 unsubscribeFromTopic API를 사용하세요. FcmSubscriptionManager.java 클래스의 unsubscribeFcmRegistrationTokensFromTopic 함수에 관련 코드를 추가합니다.

8d9e8ea9d34016bd.png

  1. 서버 측 구독 취소 코드를 구현하고 주제 메시지를 전송하여 그 효과를 검증하는 것은 연습으로 남아 있습니다.

11. 수고하셨습니다

축하합니다. FCM 주제를 사용하여 앱 인스턴스의 하위 그룹에 멀티캐스트 메시지를 보냈습니다. 이렇게 하면 관련성 높은 콘텐츠를 통해 적시에 사용자에게 도달하는 데 도움이 됩니다.

947def3eb33b1e4a.gif

다음 단계

Codelab을 완료했으니 이제 다음 가이드에 따라 다른 플랫폼의 주제를 시도해 보세요.

참조 문서