main.dart
import "package:flutter/material.dart";
import "package:firebase_core/firebase_core.dart";
import "firebase_options.dart";
import "noti.dart";
import "package:firebase_messaging/firebase_messaging.dart";
@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// If you're going to use other Firebase services in the background, such as Firestore,
// make sure you call `initializeApp` before using other Firebase services.
await Firebase.initializeApp();
print("----------------------------");
print("Handling a background message: ${message.toMap()}");
print("----------------------------");
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Background
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
static FirebaseAnalyticsObserver observer = FirebaseAnalyticsObserver(analytics: analytics);
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "My App",
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: <NavigatorObserver>[observer],
//home: FirebaseApp(title: "Firebase App", analytics: analytics, observer: observer),
//home: const MemoPage(title: "RealDatabase"),
home: const Noti(title: "Firebase Cloud Messaging"),
);
}
}
noti.dart
import "package:flutter/material.dart";
import "package:firebase_messaging/firebase_messaging.dart";
class Noti extends StatefulWidget {
final String title;
const Noti({super.key, required this.title});
@override
State<StatefulWidget> createState() => _Noti();
}
class _Noti extends State<Noti> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
_initFirebaseMessaging(context);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: const Center(
child: Text("알림수신 테스트"),
),
);
}
Future<void> _initFirebaseMessaging(BuildContext context) async {
FirebaseMessaging fcm = FirebaseMessaging.instance;
print("messaging.getToken() : ${await fcm.getToken()}");
// When?
RemoteMessage? initialMessage = await fcm.getInitialMessage();
if (initialMessage != null) {
print("----------------------------");
print("param : ${initialMessage.toMap()}");
print("----------------------------");
_handleMessage("Terminated", initialMessage.notification);
}
// Foreground
FirebaseMessaging.onMessage.listen((event) {
//print("param : ${event.toMap()}");
_handleMessage("Foreground", event.notification);
});
// opened app from tray
FirebaseMessaging.onMessageOpenedApp.listen((event) {
//print("param : ${event.toMap()}");
_handleMessage("Background", event.notification);
});
}
void _handleMessage(type, message) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("$type 알림 - ${message.title}"),
content: Text(message.body!),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text("확인")
)
],
);
}
);
}
}