콘솔로 이동

백그라운드 앱에 테스트 메시지 보내기

FCM을 시작하기 위해 앱이 백그라운드 상태일 때 알림 작성기에서 개발 기기로 테스트 알림 메시지를 전송하는 가장 단순한 사용 사례부터 살펴보겠습니다. 이 페이지에는 설정부터 검증까지 이 작업을 수행하는 모든 단계가 제시되어 있으므로, FCM용 Android 클라이언트 앱 설정을 마친 경우 일부 단계는 이미 완료된 상태일 수 있습니다.

SDK 설정

이 섹션에서 설명하는 작업은 앱에서 다른 Firebase 기능을 사용 설정한 경우 이미 완료되었을 수 있습니다.

시작하기 전에

  • Android 스튜디오를 설치하거나 최신 버전으로 업데이트합니다.

  • Android 앱이 다음을 충족하는지 확인합니다.

    • API 수준 16(Jelly Bean) 이상 타겟팅
    • Gradle 4.1 이상 사용
  • 앱을 실행할 기기 또는 에뮬레이터를 설정합니다.

    • Google Play가 포함된 에뮬레이터 이미지를 에뮬레이터에서 사용해야 합니다.
  • Google 계정을 사용하여 Firebase에 로그인합니다.

Android 앱 프로젝트가 준비되지 않았다면 빠른 시작 샘플 중 하나를 다운로드하여 Firebase 제품을 시험해 볼 수 있습니다.

Firebase 프로젝트 만들기

Firebase를 Android 앱에 추가하려면 먼저 Android 앱에 연결할 Firebase 프로젝트를 만드세요. Firebase 프로젝트에 대한 자세한 내용은 Firebase 프로젝트 이해를 참조하세요.

Firebase에 앱 등록

Firebase 프로젝트가 준비되면 Android 앱을 추가할 수 있습니다.

여러 빌드 변형을 처리하는 방법을 비롯하여 앱을 Firebase 프로젝트에 추가할 때의 권장사항 및 고려사항을 자세히 알아보려면 Firebase 프로젝트 이해를 참조하세요.

  1. Firebase Console의 프로젝트 개요 페이지 중앙에 있는 Android 아이콘을 클릭하여 설정 워크플로를 시작합니다.

    Firebase 프로젝트에 앱을 이미 추가한 경우 앱 추가를 클릭하여 플랫폼 옵션을 표시합니다.

  2. Android 패키지 이름 필드에 앱의 애플리케이션 ID를 입력합니다.

    • 애플리케이션 ID패키지 이름이라고도 합니다.

    • 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle)에서 이 애플리케이션 ID(예: com.yourcompany.yourproject)를 확인합니다.

  3. (선택사항) 설정 워크플로의 안내에 따라 기타 앱 정보를 입력합니다.

    닉네임은 편의상 지정하는 내부용 식별자이며 Firebase Console에서 본인만 볼 수 있습니다.

  4. 앱 등록을 클릭합니다.

Firebase 구성 파일 추가

  1. 앱에 Firebase Android 구성 파일을 추가합니다.

    1. google-services.json 다운로드를 클릭하여 Firebase Android 구성 파일(google-services.json)을 가져옵니다.

      언제든지 다시 Firebase Android 구성 파일을 다운로드할 수 있습니다.

    2. 구성 파일을 앱의 모듈(앱 수준) 디렉토리로 이동합니다.

  2. 앱에서 Firebase 제품을 사용할 수 있도록 google-services 플러그인을 Gradle 파일에 추가합니다.

    1. 루트 수준(프로젝트 수준) Gradle 파일(build.gradle)에서 규칙을 추가하여 Google 서비스 플러그인을 포함합니다. Google의 Maven 저장소도 있는지 확인합니다.

      buildscript {
        // ...
        dependencies {
          // ...
          // Add the following line:
          classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle)에서 다음 줄을 파일 하단에 추가합니다.

      apply plugin: 'com.android.application'
      
      android {
        // ...
      }
      
      // Add the following line to the bottom of the file:
      apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin
      

앱에 Firebase SDK 추가

지원되는 Firebase 제품을 Android 앱에 추가할 수 있습니다. 우선 Firebase용 Google 애널리틱스 기능을 제공하는 핵심 Firebase SDK(com.google.firebase:firebase-core)부터 시작하는 것이 좋습니다.

  1. 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle)에서 핵심 Firebase SDK의 종속 항목을 추가합니다.

    dependencies {
     // ...
     implementation 'com.google.firebase:firebase-core:16.0.8'
    
     // Getting a "Could not find" error? Make sure that you've added
     // Google's Maven repository to your root-level build.gradle file
    }
    
  2. (선택사항) 사용할 다른 Firebase 라이브러리의 종속 항목을 추가합니다.

    일부 Android용 Firebase SDK에서는 Kotlin 확장 프로그램 라이브러리를 대신 제공합니다.

  3. 앱을 동기화하여 모든 종속 항목에 필요한 버전이 있는지 확인합니다.

  4. 앱을 실행하여 Firebase를 성공적으로 통합했다는 알림을 Firebase에 보냅니다.

    기기 로그에 초기화가 완료되었다는 Firebase 알림이 표시됩니다. 네트워크 액세스가 가능한 에뮬레이터에서 앱을 실행한 경우 Firebase 콘솔에 앱이 연결되었다는 알림이 표시됩니다.

등록 토큰 액세스

특정 기기로 메시지를 보내려면 기기의 등록 토큰을 알아야 합니다. 알림 콘솔의 필드에 토큰을 입력해야 이 가이드를 마칠 수 있으므로 토큰을 검색한 후 복사하거나 안전하게 저장해 두세요.

앱을 처음 시작할 때 FCM SDK에서 클라이언트 앱 인스턴스용 등록 토큰을 생성합니다. 단일 기기를 대상으로 지정하거나 기기 그룹을 만들려면 FirebaseMessagingService를 확장하고 onNewToken을 재정의하여 이 토큰에 액세스해야 합니다.

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

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

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

현재 등록 토큰 검색

현재 토큰을 검색하려면 FirebaseInstanceId.getInstance().getInstanceId()를 호출합니다.

자바
Android

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin
Android

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

토큰 생성 모니터링

새 토큰이 생성될 때마다 onNewToken 콜백이 호출됩니다.

자바
Android

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // 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(token);
}

Kotlin
Android

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String?) {
    Log.d(TAG, "Refreshed token: $token")

    // 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(token)
}

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

테스트 알림 메시지 보내기

  1. 타겟 기기에 앱을 설치하고 실행합니다.

  2. 앱을 기기에서 백그라운드 상태로 만듭니다.

  3. 알림 작성기를 열고 새 메시지를 선택합니다.

  4. 메시지 본문을 입력합니다.

  5. 기기에서 테스트를 선택합니다.

  6. FCM 등록 토큰에 추가 필드에 이 가이드의 앞 섹션에서 확인한 등록 토큰을 입력합니다.

  7. 테스트를 클릭합니다.

테스트를 클릭하면 타겟팅된 클라이언트 기기(백그라운드 상태의 앱 포함) 작업 표시줄에 알림이 표시됩니다.

앱으로 전달된 메시지의 통계를 파악하려면, 전송되어 iOS 및 Android 기기에서 열린 메시지 수와 Android 앱의 '노출수'(사용자에게 표시된 알림) 데이터가 기록된 FCM 보고 대시보드를 확인합니다.

다음 단계

포그라운드 앱에 메시지 전송

백그라운드 앱에 알림 메시지를 보내는 데 성공했으면 Android 앱에서 메시지 수신을 참조하여 포그라운드 앱에 전송하는 방법을 알아보세요.

알림 메시지 이외의 고급 기능

앱에 단순한 알림 메시지 이외에 더 많은 고급 기능을 추가하려면 다음을 참조하세요.