Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정

Firebase 클라우드 메시징 Android 클라이언트 앱을 작성하려면 FirebaseMessaging API 및 Gradle이 포함된 Android 스튜디오 1.4 이상을 사용하세요. 이 페이지에서는 Android 프로젝트에 Firebase를 추가하는 단계를 완료했다고 가정하고 안내합니다.

FCM 클라이언트에 Android 2.3 이상을 실행하며 Google Play 스토어 앱도 설치되어 있는 기기 또는 Google API로 Android 2.3을 실행하는 에뮬레이터가 필요합니다. Google Play 스토어를 통해 Android 앱을 배포하는 데 제한이 없다는 점에 유의하세요.

Firebase 및 FCM SDK 설정

  1. 아직 추가하지 않은 경우 Android 프로젝트에 Firebase를 추가합니다.

  2. Android 스튜디오에서 앱 수준 build.gradle 파일에 FCM 종속 항목을 추가합니다.

    dependencies {
         compile 'com.google.firebase:firebase-messaging:10.0.1'
    }

앱 매니페스트 수정

앱의 매니페스트에 다음을 추가합니다.

  • FirebaseMessagingService를 확장하는 서비스를 추가합니다. 백그라운드에서 앱의 알림을 수신하는 것 외에 다른 방식으로 메시지를 처리하려는 경우에 필요합니다. 포그라운드 앱의 알림 수신, 데이터 페이로드 수신, 업스트림 메시지 전송 등을 수행하려면 이 서비스를 확장해야 합니다.
  • 등록 토큰 생성, 순환, 업데이트를 처리하기 위해 FirebaseInstanceIdService를 확장하는 서비스를 추가합니다. 특정 기기로 전송하거나 기기 그룹을 만드는 경우에 필요합니다.
  • FCM이 Android 앱의 기능에 있어 매우 중요하다면 매니페스트에서 android:minSdkVersion="8" 이상으로 설정해야 합니다. 그러면 Android 앱을 올바르게 실행할 수 없는 환경에서는 앱을 설치할 수 없습니다.

예를 들면 다음과 같습니다.

<service
    android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

    ...

  <service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>
 

Google Play 서비스 APK 확인

Play 서비스 SDK를 사용하는 앱은 Google Play 서비스 기능에 액세스하기 전에 항상 기기가 Google Play 서비스 APK와 호환되는지 확인해야 합니다. 기본 액티비티의 onCreate() 메소드 및 onResume() 메소드 등 두 위치에서 확인 작업을 수행하는 것이 좋습니다. onCreate()로 확인하면 확인에 성공하지 못한 앱을 사용할 수 없게 됩니다. onResume()으로 확인하면 사용자가 '뒤로' 버튼과 같은 다른 수단을 통해 실행 중인 앱으로 돌아오는 경우에 확인 작업이 계속 수행될 수 있습니다. 기기에 호환되는 Google Play 서비스 APK가 없으면 사용자가 Google Play 스토어에서 APK를 다운로드하거나 기기의 시스템 설정에서 APK를 사용 설정할 수 있도록 앱이 GooglePlayServicesUtil.getErrorDialog()를 호출할 수 있습니다. 코드 예는 Google Play 서비스 설정을 참조하세요.

기기 등록 토큰 액세스

앱을 처음 시작할 때 FCM SDK에서 클라이언트 앱 인스턴스용 등록 토큰을 생성합니다. 단일 기기를 타겟팅하거나 기기 그룹을 만들려면 FirebaseInstanceIdService를 확장하여 이 토큰에 액세스해야 합니다.

이 섹션에서는 토큰을 검색하고 토큰의 변경을 모니터링하는 방법을 설명합니다. 토큰은 최초 시작 후에 회전될 수 있으므로 마지막으로 업데이트된 등록 토큰을 검색하는 것이 좋습니다.

다음과 같은 경우에 등록 토큰이 변경될 수 있습니다.

  • 앱에서 인스턴스 ID 삭제
  • 새 기기에서 앱 복원
  • 사용자가 앱 삭제/재설치
  • 사용자가 앱 데이터 소거

현재 등록 토큰 검색

현재 토큰을 검색하려면 FirebaseInstanceID.getToken()을 호출합니다. 토큰이 아직 생성되지 않은 경우 null이 반환됩니다.

토큰 생성 모니터링

토큰이 새로 생성될 때마다 onTokenRefresh 콜백이 실행되므로 이 콜백의 컨텍스트에서 getToken을 호출하면 사용 가능한 현재 등록 토큰에 항상 액세스하게 됩니다. 매니페스트에 서비스가 추가되었는지 확인한 다음 아래와 같이 onTokenRefresh의 컨텍스트에서 getToken을 호출하고 값을 기록합니다.

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(refreshedToken);
}

토큰이 확보되었으면 앱 서버로 전송하고 원하는 방법으로 저장할 수 있습니다. API에 대한 자세한 내용은 인스턴스 ID API 참조를 참조하세요.

다음 단계

클라이언트 앱이 설정되면 Firebase 콘솔로 다운스트림 메시지 주제 메시지를 보낼 수 있습니다. 이러한 기능이 빠른 시작 샘플에 나와 있으며 샘플을 다운로드하여 실행하거나 검토할 수 있습니다.

앱에 다른 고급 동작을 추가하려면 인텐트 필터를 선언하고 수신 메시지에 응답하는 액티비티를 구현하면 됩니다. 자세한 내용은 앱 서버에서 메시지를 전송하는 방법 가이드를 참조하세요.

이러한 기능을 활용하려면 서버 구현이 필요하다는 점에 유의하세요.

다음에 대한 의견 보내기...