https://jangstory.tistory.com/entry/Flutter-Firebase-FCM-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-Part-1
[Flutter] Firebase FCM 사용하기 Part. 1
https://firebase.flutter.dev/docs/messaging/overview Firebase Cloud Messaging | FlutterFireWhat does it do?firebase.flutter.dev 공식문서를 참고하시길 바랍니다. 1. Flutter App 에서 Firebase 를 사용하기 위해서는 Firebase CLI 설
jangstory.tistory.com
Firebase 기본 설정은 여기서 참고해주시길 바랍니다.
1. ios 는 Apple developer 에서 먼저 앱 등록을 해줘야합니다.
이 분 블로그를 참고해주시길 바랍니다.
이 블로그의 xCode Push Notifications, Background Modes도 추가, Background Modes에서 Remote notifications를
체크 까지 완료해주길 바랍니다.
https://uniqueimaginate.tistory.com/31
[iOS, Firebase] Firebase 이용해서 푸시 알림 받기!
Firebase를 이용해서 원격으로 푸시 알림을 받아보자! 목차 Firebase 프로젝트 생성 및 iOS 프로젝트에 SDK 적용 Apple Push Services 인증서 생성 iOS 프로젝트에 Firebase Push Notification 을 위한 세팅 테스트를
uniqueimaginate.tistory.com
애플 디벨로퍼 사이트.
https://developer.apple.com/account
로그인 - Apple
idmsa.apple.com
2. ios / Runner / Info.plist 확인
위 설정이 잘 되었다면 Info.plist 에 코드가 추가 된 것을 확인할 수 있습니다.
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>processing</string>
<string>remote-notification</string>
</array>
3. Firebase_Api.dart 코드 수정
import 'dart:convert';
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_new_badger/flutter_new_badger.dart';
import 'package:shared_preferences/shared_preferences.dart';
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
const AndroidNotificationDetails androidNotificationDetails =
AndroidNotificationDetails(
'high_importance_channel',
'High Importance Notifications',
channelDescription: 'your channel description',
importance: Importance.high,
priority: Priority.high,
);
const iosDetails = DarwinNotificationDetails(
badgeNumber: 0,
sound: 'default',
subtitle: '알림 서브타이틀',
attachments: [],
);
class FirebaseApi {
Future<void> initNotifications() async {
await _firebaseMessaging.requestPermission(
alert: true, badge: true, sound: true);
final String? fcmToken = await _firebaseMessaging.getToken();
print('FCM Token: $fcmToken');
await initPushNotifications();
await initLocalNotification();
}
Future<void> initLocalNotification() async {
const AndroidInitializationSettings androidSettings =
AndroidInitializationSettings('@mipmap/ic_launcher');
final DarwinInitializationSettings iosSettings =
DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
onDidReceiveLocalNotification:
(int id, String? title, String? body, String? payload) {},
);
final InitializationSettings initializationSettings =
InitializationSettings(
android: androidSettings,
iOS: iosSettings,
);
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse details) {
print('Notification clicked: $details');
},
);
}
Future<void> initPushNotifications() async {
await FirebaseMessaging.instance
.setForegroundNotificationPresentationOptions(
alert: true,
badge: true,
sound: true,
);
FirebaseMessaging.instance.getInitialMessage().then(_handleMessage);
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
final Map<String, dynamic> messageMap = message.toMap();
print('_handleForegroundMessage Message as JSON: ${jsonEncode(messageMap)}');
_handleForegroundMessage(message);
});
}
void _handleMessage(RemoteMessage? message) {
if (message == null) return;
final Map<String, dynamic> messageMap = message.toMap();
print('_handleMessage Message as JSON: ${jsonEncode(messageMap)}');
}
Future<void> _handleForegroundMessage(RemoteMessage message) async {
final Map<String, dynamic> messageMap = message.toMap();
print('_handleForegroundMessage Message as JSON: ${jsonEncode(messageMap)}');
final notification = message.notification;
NotificationDetails notificationDetails = NotificationDetails(
android: androidNotificationDetails, iOS: iosDetails);
if (notification != null) {
flutterLocalNotificationsPlugin.show(
0,
notification.title,
notification.body,
notificationDetails,
payload: jsonEncode(message.data),
);
}
}
}
위와 같이 설정을 완료 하셨으면 notification 을 보낼 수 있습니다.
ios 는 별다른 설정이 없을 시 포그라운드 상태에서만 메세지가 오고 백그라운드에서는 메세지를 받을 수 없습니다.
백그라운드에서 메세지 받기는 다음에 포스팅하겠습니다.
'Flutter' 카테고리의 다른 글
[Flutter] App Badge 사용하는 방법. (flutter_new_badger) (0) | 2025.02.10 |
---|---|
[Flutter] Firebase FCM 사용하기 Part. 4-2 (ios) (0) | 2025.02.03 |
[Flutter] 안드로이드 뒤로가기 버튼 listener (0) | 2025.01.17 |
[Flutter] Conditional import 하는 방법. (0) | 2025.01.01 |
[Flutter] Firebase Analytics 추가하기. (ios) (0) | 2024.12.21 |