상세 컨텐츠

본문 제목

FCM 에서 사용할 토큰을 구하는 방법입니다.

firebase

by carecat 2025. 6. 30. 23:00

본문

반응형

FCM 에서 사용할 토큰을 구하는 방법은 두가지 있습니다.

 

첫째, 사용자 토큰을 구하는 방법입니다.

-명령어; User.getToken() 

-활용처: 채팅앱(로그인한 사용자구별)

-예시코드:

firebase.auth().onAuthStateChanged(user => {
  if (user) {
    user.getIdToken().then(idToken => {
      // 서버로 ID 토큰 전송
      sendTokenToServer(idToken);
    });
  } else {
    // 사용자가 로그인되어 있지 않은 경우
  }
});

 

둘째로, 단말기 토큰을 구하는 방법입니다.

-명령어: FirebaseMessaging.instance.getToken();

-활용처: 푸시 메세지 활용

-예시코드:

String? _fcmToken = await FirebaseMessaging.instance.getToken();
logger.e(_fcmToken);

 

토큰 생명주기는 아래와 같습니다.

변경되지 않으나 아래와 같은 경우에는 갱신(변경)됩니다.

 앱이 새로운 기기에서 복원되었을 경우

 사용자가 앱을 제거/재설치한 경우

 사용자가 앱을 지운경우

이에 대비하기위해 적절히 갱신된 토큰관리를 해야합니다. (주기적으로 서버로 변경된 토큰 유지해야함)

 

토큰 관리 방법

 - 최초 로컬에 저장해서 앱 실행시 비교함, 이후 변경되면 서버로 전송하여 갱신시킴

  Store key-value data on disk 이용해서 저장하고, 로그인 이나 앱 실행시 같은지를 확인 하고 

  다르면 서버로 업데이트를 진행하는 방법. 

 

 -  onTokenRefresh() 메소드를 이용하여 로컬 단말기에서 변동되면 서버로 전송하여 갱신 시킴 

    

import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:http/http.dart' as http;

Future<void> saveTokenToServer(String fcmToken) async {
  final url = Uri.parse('YOUR_SERVER_ENDPOINT'); // 서버 엔드포인트
  final response = await http.post(url, body: {'token': fcmToken});

  if (response.statusCode == 200) {
    print('FCM 토큰이 서버에 성공적으로 저장되었습니다.');
  } else {
    print('FCM 토큰 저장 실패: ${response.statusCode}');
  }
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 플러터 엔진 초기화
  await Firebase.initializeApp(); // Firebase 초기화

  FirebaseMessaging.instance.onTokenRefresh.listen((fcmToken) {
    //토큰이 바뀌면 여기가 실행됨!

    print('FCM 토큰 갱신됨: $fcmToken');
    saveTokenToServer(fcmToken);
  });

  // 초기 토큰 가져오기
  final initialToken = await FirebaseMessaging.instance.getToken();
  if (initialToken != null) {
    print('초기 FCM 토큰: $initialToken');
    saveTokenToServer(initialToken);
  }

  runApp(MyApp());
}

 

추가적으로 토큰을 최초 생성시에는 사용자 동의를 받아야합니다.

FCM (Firebase Cloud Messaging) 자동 초기화는 앱 실행 시 FCM이 자동으로 초기화되어 등록 토큰을 생성하고 Firebase에 업로드하는 기능을 의미합니다. 이 기능은 사용자의 명시적인 동의 없이 FCM을 사용하게 할 수 있기 때문에, 개인 정보 보호 측면에서 문제가 될 수 있습니다. 따라서, 자동 초기화를 방지하고 사용자의 동의를 얻어 FCM을 사용하도록 설정하는 것이 권장됩니다. 

 

FCM 자동 초기화 방지 및 설정 방법:
1. 자동 초기화 방지:
빌드 시간에 중지:
AndroidManifest.xml 파일에 메타데이터 값을 추가하여 FCM 자동 초기화를 중지할 수 있습니다. 
런타임에 다시 사용 설정:
앱 실행 중에 FirebaseMessaging 인스턴스의 setAutoInitEnabled() 메서드를 사용하여 FCM 자동 초기화를 다시 사용 설정할 수 있습니다. 
2. 사용자 동의 얻기:
권한 요청:
사용자가 FCM 메시지를 받기 전에 푸시 알림 권한을 요청하고, 사용자의 명시적인 동의를 받아야 합니다.
FCM 사용 동의 확인:
사용자가 푸시 알림 권한을 허용했는지 확인하고, 허용하지 않은 경우 FCM을 사용하지 않도록 처리해야 합니다. 
3. 추가 고려 사항:
토큰 만료 및 갱신:
FCM 토큰은 만료될 수 있으므로, 주기적으로 토큰의 유효성을 확인하고 필요한 경우 갱신해야 합니다.
백엔드 연동:
FCM 토큰을 저장하고 관리하기 위한 백엔드 API를 개발해야 합니다. 
요약:
FCM 자동 초기화는 개인 정보 보호 문제와 관련될 수 있으므로, 빌드 시간 또는 런타임 시 중지하고 사용자의 명시적인 동의를 얻어 FCM을 사용하도록 설정하는 것이 중요합니다. 또한, FCM 토큰의 만료 및 갱신, 백엔드 연동 등을 고려해야 합니다.

 

 

반응형

관련글 더보기