OAuth 2 액세스 토큰과 함께 FCM HTTP v1 API 사용

1. 소개

FCM HTTP v1 API는 FCM의 기존 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 스튜디오의 최신 안정화 버전

다음 기기 중 하나:

원하는 Java 개발 환경 또는 코드 편집기

2. Firebase 프로젝트 및 Android 앱 설정

Codelab이 끝나면 Firebase 클라우드 메시징을 사용하여 앱에 메시지를 보낼 수 있게 됩니다. 그 전에 Firebase 프로젝트를 만들어야 합니다. 이 Codelab에서는 FCM과 통합할 샘플 코드가 포함된 Android 앱도 제공합니다.

Firebase 프로젝트 설정

Android 앱 설정

이 Codelab에서 제공하는 샘플 Android 앱은 이미 FCM과 통합되어 있습니다. 시작한 후에는 FCM 서버에 등록되고 주제를 구독합니다. 이 Codelab의 이후 단계에서는 주제로 주제 메시지를 보내면 앱이 메시지를 수신합니다.

3. 앱 서버 설정

이제 앱이 설정되었으므로 FCM v1 API를 사용하여 앱에 메시지를 보내기 위한 서버 측 코드 샘플을 다운로드해야 합니다. 이 코드는 API 사용자 인증 정보 (다음 섹션에서 설명)를 로드하여 액세스 토큰을 생성합니다. 그런 다음 FCM 주제 메시징을 사용하여 앱에 메시지를 보냅니다.

  • GitHub 프로젝트를 다운로드하여 시작 서버 코드를 가져옵니다. '메시지' 프로젝트는 메시지 전송 기능을 제공하는 firebase-admin SDK에 대한 종속 항목이 있는 Gradle 기반 자바 프로젝트입니다.

앱 서버가 FCM과 작동하는 방식에 대한 자세한 내용은 서버 환경 및 FCM 문서를 참조하세요.

4. v1 사용자 인증 정보 가져오기

FCM HTTP v1 API는 OAuth2 보안 모델에 따라 수명이 짧은 액세스 토큰을 사용합니다. FCM의 기존 API에 사용되는 정적 API 키에 비해 수명이 짧은 액세스 토큰은 사용자 인증 정보가 유출될 위험이 적습니다. 이 섹션에서는 API 호출에 사용되는 액세스 토큰을 생성하기 위한 사용자 인증 정보를 만드는 단계를 자세히 설명합니다.

  1. Firebase Admin SDK가 FCM API 호출을 승인할 수 있도록 Firebase 서비스 계정을 설정합니다. Firebase Console에서 프로젝트 설정을 열고 서비스 계정 탭을 선택합니다. 새 비공개 키 생성을 클릭하여 구성 스니펫을 다운로드합니다. 프로젝트 설정 페이지에 있는 서비스 계정 구성요소의 Admin SDK 구성 스니펫이 강조 표시된 잘린 스크린샷
  2. 다운로드한 GitHub 프로젝트에서 다운로드한 파일의 이름을 service-account.json로 바꾸고 프로젝트의 messaging/ 경로에 복사합니다.
  3. 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();
}
  1. main 메서드를 변경하여 다음 줄을 추가합니다.
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. 터미널에서 Messaging/ 프로젝트 디렉터리로 이동하여 다음을 입력합니다.
./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"입니다.

  • 메시지가 성공적으로 전송되면 화면에 아래 이미지와 비슷한 알림 팝업이 표시됩니다.

54ae84ece22202cd.png

6. 결론

수고하셨습니다. Codelab을 완료하여 다음 작업을 완료했습니다.

  • Firebase 프로젝트 설정
  • Firebase를 Android 앱과 통합
  • FCM HTTP v1 API의 사용자 인증 정보 만들기
  • FCM HTTP v1 API를 통해 앱에 메시지를 보냅니다.

FCM에서 제공하는 고급 기능을 살펴보기 위해 다음 참조가 유용합니다.