1. 소개
FCM 기존 API와 비교하여 FCM HTTP v1 API는 수명이 짧은 액세스 토큰을 사용하여 더 안전한 승인 모델을 제공합니다. FCM v1 API의 액세스 토큰을 생성하는 단계는 기존 API의 단계와 크게 다릅니다.
이 Codelab에서는 FCM HTTP v1 API를 사용하여 Android 앱에 푸시 알림을 보낼 수 있도록 클라이언트 및 서버 측 설정 프로세스를 안내합니다. v1 API 사용자 인증 정보 생성의 주요 단계를 강조 표시합니다.
자세한 내용은 다음에서 확인할 수 있습니다.
기본 요건
- Java 및 Android 개발에 관한 기본적 이해
학습할 내용
- FCM HTTP v1 API를 사용하여 Android 앱에 푸시 알림을 보낼 수 있도록 하기 위한 클라이언트 및 서버 측 설정의 세부 단계입니다.
- 서비스 계정을 사용한 HTTP v1 API의 사용자 인증 정보 생성
- HTTP v1 API를 통해 테스트 메시지 전송
필요한 사항
Android 스튜디오의 최신 안정화 버전
다음 기기 중 하나:
- 컴퓨터에 연결된 실제 Android 기기
- Android Emulator(Android Emulator에서 앱 실행 참고)
원하는 Java 개발 환경 또는 코드 편집기
2. Firebase 프로젝트 및 Android 앱 설정
Codelab을 마치면 Firebase 클라우드 메시징을 사용하여 앱에 메시지를 전송할 수 있습니다. 그 전에 Firebase 프로젝트를 만들어야 합니다. 이 Codelab에서는 FCM과 통합할 샘플 코드가 포함된 Android 앱도 제공합니다.
Firebase 프로젝트 설정
- '1단계: Firebase 프로젝트 만들기'를 따릅니다. 를 사용하여 이 Codelab용 Firebase 프로젝트를 직접 만듭니다.
Android 앱 설정
이 Codelab에 제공된 샘플 Android 앱은 이미 FCM과 통합되어 있습니다. 시작한 후에는 FCM 서버에 등록되고 주제를 구독합니다. 이 Codelab의 이후 단계에서는 주제로 주제 메시지를 보내면 앱이 메시지를 수신합니다.
- Firebase Android 빠른 시작 샘플을 다운로드합니다.
- https://github.com/firebase/quickstart-android/tree/master/messaging에서 프로젝트를 Android 스튜디오로 가져옵니다.
- Firebase Console에 앱을 등록합니다. 앱 이름은
com.google.firebase.quickstart.fcm
입니다. '2단계: Firebase에 앱 등록' 섹션의 단계에 따라 Firebase 프로젝트에 이 앱을 등록합니다. - '3단계: Firebase 구성 파일 추가'의 1단계에 따라
google-services.json
를 다운로드하여 프로젝트에 추가합니다. 프로젝트를 빌드하고 실행합니다.
3. 앱 서버 설정
이제 앱이 설정되었으므로 FCM v1 API를 사용하여 앱에 메시지를 전송하기 위한 서버 측 코드 샘플을 다운로드해야 합니다. 이 코드는 API 사용자 인증 정보 (다음 섹션에서 설명)를 로드하여 액세스 토큰을 생성합니다. 그런 다음 FCM 주제 메시지를 사용하여 앱에 메시지를 전송합니다.
- GitHub 프로젝트를 다운로드하여 시작 서버 코드를 가져옵니다. 'messaging' 프로젝트는 메시지를 전송하는 기능을 제공하는 firebase-admin SDK에 종속된 Gradle 기반 Java 프로젝트입니다.
앱 서버가 FCM과 함께 작동하는 방식에 관한 자세한 내용은 서버 환경 및 FCM 문서를 참고하세요.
4. v1 사용자 인증 정보 가져오기
FCM HTTP v1 API는 OAuth2 보안 모델에 따라 수명이 짧은 액세스 토큰을 사용합니다. FCM의 기존 API에 사용되는 정적 API 키에 비해 수명이 짧은 액세스 토큰은 사용자 인증 정보가 유출될 위험이 적습니다. 이 섹션에서는 API 호출에 사용되는 액세스 토큰을 생성하기 위한 사용자 인증 정보를 만드는 단계를 자세히 설명합니다.
- Firebase Admin SDK가 FCM API 호출을 승인할 수 있도록 Firebase 서비스 계정을 설정합니다. Firebase Console에서 프로젝트 설정을 열고 서비스 계정 탭을 선택합니다. 새 비공개 키 생성을 클릭하여 구성 스니펫을 다운로드합니다. <ph type="x-smartling-placeholder"></ph>
- 다운로드한 GitHub 프로젝트에서 다운로드한 파일의 이름을
service-account.json
로 바꾸고 프로젝트의messaging/
경로에 복사합니다. Messaging.java
클래스의getAccessToken()
메서드 (아래 참고)는 1시간 동안 유효한 OAuth2 토큰을 생성합니다.
private static String getAccessToken() throws IOException { GoogleCredentials googleCredentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")).createScoped(Arrays.asList(SCOPES)); googleCredentials.refresh(); return googleCredentials.getAccessToken().getTokenValue(); }
- main 메서드를 변경하여 다음 줄을 추가합니다.
public static void main(String[] args) throws IOException { System.out.println(getAccessToken()); ... }
- 터미널에서 messaging/project 디렉터리로 이동하여 다음을 입력합니다.
./gradlew run -Pmessage=common-message
OAuth2 토큰을 출력합니다.
자세한 내용은 보내기 요청 승인을 참고하세요.
5. REST API로 메시지 보내기
이제 HTTP v1 API를 통해 메시지를 보낼 준비가 되었습니다. 다음 단계를 따르세요.
- HTTP 요청 헤더에 액세스 토큰을 추가하는 방법은 다음과 같습니다.
Authorization: Bearer <access_token>
형식으로 승인 헤더의 값으로 토큰을 추가합니다.- curl을 사용하여 FCM v1 API에 HTTP 요청을 보냅니다.
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send
위의 $topic_name
는 Firebase 프로젝트 및 Android 앱 설정에 언급된 Android 앱 코드에서 찾을 수 있습니다. 기본값은 "weather"
입니다.
- 메시지가 전송되면 아래 이미지와 같이 화면에 알림 팝업이 표시됩니다.
6. 결론
수고하셨습니다. Codelab을 완료하여 다음 작업을 완료했습니다.
- Firebase 프로젝트 설정
- Firebase를 Android 앱과 통합
- FCM HTTP v1 API의 사용자 인증 정보 만들기
- FCM HTTP v1 API를 통해 앱에 메시지 전송
FCM에서 제공하는 고급 기능을 살펴보려면 다음 참조 문서가 유용합니다.