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

1. 소개

목표

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

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

주제 개요

주제는 메시지를 통해 앱 인스턴스의 하위 그룹에 도달하는 FCM 인프라 지원 방법입니다.

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

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

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

무엇을 배울 것인가

  • 모바일 앱에서 사용자가 주제를 구독(및 구독 취소)하는 방법입니다.
  • 주제를 사용하여 멀티캐스트 푸시 메시지를 보내는 방법.
  • 주제 조건을 사용하여 주제 조합에 메시지를 보내는 방법.
  • 서버 측에서 주제 구독을 관리하고 대량 구독 및 구독 취소를 수행하는 방법입니다.

무엇을 구축할 것인가

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

필요한 것

  • Chrome 등 원하는 브라우저.
  • Java 애플리케이션 개발을 위한 IntelliJ IDEA IDE.
    • 설치하는 동안 Gradle 지원을 선택했는지 확인하세요.
  • Android 애플리케이션 개발을 위한 Android Studio IDE입니다.
  • Android 애플리케이션을 실행하는 장치입니다. 다음 중 하나:
    • 안드로이드 에뮬레이터. ( Android Studio 에서 설정이 필요합니다).
    • 컴퓨터에 연결되어 있고 개발자 모드로 설정된 실제 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 콘솔 에서 프로젝트 추가를 클릭하고 Firebase 프로젝트 이름을 StockNews로 지정한 후 계속을 클릭하세요. 참고: Firebase 프로젝트의 프로젝트 ID를 기억하세요(또는 편집 아이콘을 클릭하여 원하는 프로젝트 ID를 설정하세요).

fc08f9a7808e4553.png

  1. Google Analytics 활성화를 건너뛸 수 있습니다. 이 Codelab에서는 필요하지 않습니다. 계속을 클릭하세요.
  2. 프로젝트 생성 을 클릭합니다.

축하해요! 방금 Firebase 프로젝트를 만들었습니다. 이제 프로젝트 이름을 클릭하여 콘솔에 들어갈 수 있습니다.

3. 플랫폼별 Firebase 앱 구성

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

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

이 Codelab의 목적을 위해 Android Firebase 앱을 추가할 예정입니다.

84e0b3199bef6d8a.png 안드로이드 구성

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

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

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

4. 앱 빌드 및 실행

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

시작 앱 가져오기

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

프로젝트가 로드된 후 Git이 모든 로컬 변경 사항을 추적하지 않는다는 경고가 표시될 수도 있습니다. 오른쪽 상단에 있는 " 무시 " 또는 " X "를 클릭할 수 있습니다. (변경 사항을 Git 저장소로 다시 푸시하지 않습니다.)

Android 보기에 있는 경우 프로젝트 창의 왼쪽 상단에 아래 이미지와 같은 내용이 표시되어야 합니다. ( 프로젝트 보기에 있는 경우 동일한 내용을 보려면 프로젝트를 확장해야 합니다)

b574ea0089ee87c6.png

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

4bc64eb3b99eb0ae.png

코드를 변경하기 전에 이 작업이 완료될 때까지 기다리는 것이 좋습니다. 이렇게 하면 Android Studio가 필요한 모든 구성 요소를 가져올 수 있습니다.

또한 "언어 변경 사항을 적용하려면 다시 로드하시겠습니까?"라는 메시지가 표시되는 경우 또는 이와 유사한 경우 "예"를 선택하십시오.

에뮬레이터 설정

Android 에뮬레이터를 설정하는 데 도움이 필요한 경우 앱 실행 문서를 참조하세요.

Android 앱 시작 코드 이해

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

f04ff8f48d186dff.png

  • AndroidManifest.xml 에는 MESSAGING_EVENT 콜백 핸들러가 이미 추가되어 있습니다.
    • StockNewsMessagingService.java 핸들러는 다양한 Firebase 클라우드 메시징 관련 기능을 제공하는 FirebaseMessagingService 클래스를 확장합니다. 자세한 내용은 FirebaseMessagingService 문서를 참조하세요. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • onNewToken 함수는 FCM 등록 토큰이 생성되거나 새로 고쳐질 때 호출됩니다. 자세한 내용은 토큰 생성 모니터링을 참조하세요.
    • onMessageReceived 함수는 메시지가 수신되고 앱이 포그라운드에 있을 때 호출됩니다. 현재는 단순히 수신된 메시지를 기록합니다.
  • 또한 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

IntelIj 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 콘솔로 이동하여 왼쪽 탐색 메뉴에서 프로젝트 개요 옆에 있는 톱니바퀴 아이콘을 클릭하고 프로젝트 설정을 선택합니다. 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 사용하여 구독 토글에 대한 리스너를 설정합니다.
  • 스위치 토글에 따라 구독 및 구독 취소 작업은 각각 subscribeToStockCategoryunsubscribeFromStockCategory 메서드를 호출하여 수행됩니다.
  • 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. 앱을 실행하고 주식 카테고리 옵션을 전환하여 구독 및 구독 취소 작업을 실행하세요. 다음과 같이 보일 것입니다 :

구독하다

구독 취소

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와 관련된 주목할만한 이벤트가 있는 경우 이러한 경우가 발생할 수 있습니다.

Topics를 사용하면 다음 연산자를 사용하여 부울 표현식 형식으로 조합을 표현할 수 있습니다.

  • && : 논리 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. 주제 메시지를 보내기 전에 먼저 앱 인스턴스에서 기술 및 자동차 주제를 모두 구독하여 앱 인스턴스가 지정된 주제 조건을 충족하는지 확인하세요.
  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. 앱 인스턴스를 Energy 주제에 구독해 보겠습니다. 그렇게 하려면 먼저 다음 두 필드에 데이터를 제공하십시오.
    1. registrationTokens : 주제 구독을 생성하려는 FCM 등록 토큰을 나타내는 쉼표로 구분된 문자열 목록입니다.
    2. topicName : Energy 주제에 대한 주제 이름입니다(예 /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을 완료했으므로 다음 가이드를 사용하여 다른 플랫폼에 대한 주제를 시도해 보세요.

참조 문서