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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

1. 소개

목표

이 코드랩에서는 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 활성화를 건너뛸 수 있습니다. 이 코드랩에서는 필요하지 않습니다. 계속을 클릭합니다.
  2. 프로젝트 만들기 를 클릭합니다.

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

3. 플랫폼별 Firebase 앱 구성

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

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

이 코드랩에서는 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. 이 앱은 출시되지 않을 예정이므로 이 코드랩에는 디버그 서명 인증서 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 는 Stock Category 선택 화면을 그리는 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 콘솔로 이동하여 왼쪽 탐색 모음에서 프로젝트 개요 옆에 있는 톱니바퀴 아이콘을 클릭하고 프로젝트 설정 을 선택합니다. 8c2108d4d7c915e9.png
    2. 설정 페이지에서 서비스 계정을 선택하고 서비스 계정 만들기 를 클릭합니다. 84b128cc5dac0a85.png
    3. 이제 새 개인 키 생성 버튼을 클릭하면 키 파일의 자동 다운로드가 시작됩니다.
    4. 키 파일의 이름을 service-account.json 으로 변경하고 messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources 폴더에 복사합니다.
    5. FcmSender.javaFcmSubscriptionManager.java 는 모두 다음 코드를 사용하여 classpath에서 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와 관련된 주목할 만한 이벤트가 있는 경우 이러한 경우가 발생할 수 있습니다.

주제에서는 다음 연산자를 사용하여 부울 표현식의 형태로 조합을 표현할 수 있습니다.

  • && : 논리 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. 서버 측에서 주제 구독 관리

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

그러나 일부 사용 사례에서는 서버 측에서 주제 구독을 관리할 수 있습니다. 예를 들어 앱 출시를 기다리지 않고 기존 사용자 기반의 하위 그룹을 새 주제에 구독할 수 있습니다.

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

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

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

5d5709e7b3cbcb04.png

  1. Energy 주제에 대한 앱 인스턴스를 구독해 보겠습니다. 그렇게 하려면 먼저 다음 두 필드에 대한 데이터를 제공하십시오.
    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을 완료했으므로 다음 가이드를 사용하여 다른 플랫폼에 대한 주제를 시도해 보십시오.

참조 문서