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 토큰의 만료 및 갱신, 백엔드 연동 등을 고려해야 합니다.
'firebase' 카테고리의 다른 글
| FCM(firebase cloud messaging) 에서 받은 알림 메세지 앱에서 수신세팅 방법입니다. (9) | 2025.07.05 |
|---|---|
| firebase-admin 을 활용해 cloud function 배포 방법입니다. (firebase deploy) (0) | 2025.06.30 |
| FCM 메세지 유형 /셋팅(firebase cloud messaging)중 앱에서 작성,fcm중계되어서 수신앱에 도착 (0) | 2025.06.26 |
| cloud function -2- 클라우드 펑션 표기에는 1세대,2세대가 있어요. (0) | 2025.06.25 |
| cloud function -1- 클라우드 펑션 활용 셋팅 절차입니다. 두가지가 있는데요. (0) | 2025.06.23 |