Flutter Flow에서 FCM 연결해서 Push Notification 연동하기

일단 참고한 영상은

Retrieve the FCM token from Firebase with Auth using Cloud Messaging API (Legacy) 이걸 봤는데 

 

문제가 있다. 바로 HTTP에서 HTTP v1으로 마이그레이션해야한다는 점이다.  

기존 HTTP에서 HTTP v1로 마이그레이션 공식 문서

 

Headers에 Authorization에다가 원래는 FCM 토큰을 발급해서 넣으면 되는데 작년기준으로 FCM이 바뀌어서 OAuth 2.0 액세스 토큰을 발급받아야 해서 찾아보다가 전송 요청 승인 공식 문서 발견!했지만..?

dart 언어가 없다..?

 

해당 코드를 GPT한테 dart로 바꿔달라고하였더니


1. 우선 패키지 설치를 하고

googleapis: ^13.2.0

googleapis_auth: ^1.6.0

dependencies:
  googleapis_auth: ^1.6.0
  googleapis: ^13.2.0
  http: ^0.14.0

 

2. Firebase Admin SDK를 설정하고 Firebase 서비스에 접근하는 방법을 보여주었다. 

import 'dart:convert';
import 'dart:io';

import 'package:googleapis_auth/auth_io.dart';
import 'package:googleapis/firebase_v1beta1.dart'; // Firebase Admin SDK의 Dart 클라이언트
import 'package:http/http.dart' as http;

Future<void> initializeFirebase() async {
  // 서비스 계정 JSON 파일 경로
  final serviceAccountFile = File('path/to/service-account.json');
  
  // 서비스 계정 JSON 파일 로드
  final serviceAccount = jsonDecode(await serviceAccountFile.readAsString());

  // 클라이언트 인증 정보 설정
  final accountCredentials = ServiceAccountCredentials.fromJson(serviceAccount);

  // 사용할 API 범위 (scope) 설정
  final scopes = ['https://www.googleapis.com/auth/cloud-platform'];

  // Firebase Admin SDK 초기화
  final authClient = await clientViaServiceAccount(accountCredentials, scopes);
  
  // Firebase Admin SDK 클라이언트 인스턴스 생성
  final firebaseAdmin = FirebaseApi(authClient);

  // Firebase 서비스 호출 예시
  final projects = await firebaseAdmin.projects.list();
  print('Firebase Projects: ${projects.projects}');
}

void main() async {
  await initializeFirebase();
}

코드 설명

  • File('path/to/service-account.json'): Google Cloud에서 생성한 서비스 계정 JSON 파일의 경로를 지정합니다.
  • ServiceAccountCredentials.fromJson(): JSON 파일에서 클라이언트 인증 정보를 생성합니다.
  • clientViaServiceAccount(): 인증 정보를 사용하여 Google Cloud API 클라이언트를 생성합니다.
  • FirebaseApi(authClient): Firebase Admin SDK 클라이언트 인스턴스를 생성합니다. FirebaseApi는 Firebase Admin SDK의 API 엔드포인트를 정의하는 클래스입니다.

주의 사항

  • 서비스 계정 JSON 파일을 안전하게 관리하세요. 이 파일에 민감한 정보가 포함되어 있습니다.
  • 위의 코드는 Firebase Admin SDK의 Dart 클라이언트를 사용하는 예제입니다. 실제 사용 환경에 맞게 FirebaseApi 클래스를 정의하거나 기존의 Firebase Admin SDK와 호환되는 방법으로 구현해야 할 수 있습니다.

위의 방법으로 Dart에서 Firebase Admin SDK와 Google Cloud 인증을 설정할 수 있습니다. 직접 Firebase Admin SDK의 Dart 클라이언트를 구현하는 것은 복잡할 수 있으니, 필요한 Firebase Admin SDK의 기능을 HTTP 요청을 통해 호출하거나 서버 측에서 구현하는 방법을 고려할 수 있습니다.


 

여기서 중요한건 Google Cloud에서 생성한 서비스 계정 JSON 파일을 생성행하는데 이걸 어떻게 생성하냐 이거야... 그래서 파이어베이스 전용 제미니한테 물어봤는데...!

 

오오? 좀 똑똑한 거 같다 라는 생각을 1초 정도 하고 일단  흠 오키.. 일단 따라가보자 이거야!

서비스 계정까지 왔는데.. 여기다가 무슨 서비스 계정을 넣냐 이거야...


2024/08/27(화)

회의하면서 개발자(ㅇㅈ)님께 여쭤봤는데 서비스 계정별로 어떤 서비스와 어떤 서비스를 연결할지를 알아야한다고 한다. 

예를들면 오토포스트 앱이랑 구글 플레이스토어랑 연결하는 deployment 계정이 있는 것처럼 연결지를 알아야한다고 한다. 그래서 서비스 계정 기능이 무엇인지부터 공부를 다시 시작해야할 것 같다. 


그래서 일단 서비스 계정 만들어서 JSON파일 받음..

근데 Json 파일을 FlutterFlow에 넣을려면 전에 만들어놓은 Send Push Notification API call에 등록을 해야하는데

Authorization = Bearer "SERVER KEY"

 

sever key가 뭔지 모르겠어.. 그래서 https://developers.google.com/identity/protocols/oauth2/scopes?hl=ko#fcm 여기가 API 가져오는 곳이라고 하는데... 흠....

 

OAuth 2.0 토큰 가져오기

 

2.0토큰 : 로그인을 했을때 발급받는 액세스 토큰

 

링크 모음

[Flutter] FCM foreground, background 설정 (IOS, AOS) with local_notification