import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import '../screens/screen.dart';
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
AndroidNotificationChannel channel = const AndroidNotificationChannel(
'high_importance_channel', // id
'High Importance Notifications', // title
description:'This channel is used for important notifications.', // description
importance: Importance.high,
);
Future<void> saveTokenToDatabase(String token) async {
// Assume user is logged in for this example
String? userId = FirebaseAuth.instance.currentUser?.uid;
try {
await FirebaseFirestore.instance.collection('users').doc(userId).update({
'tokens': FieldValue.arrayUnion([token]),
});
} catch (e) {
await FirebaseFirestore.instance.collection('users').doc(userId).set({
'tokens': FieldValue.arrayUnion([token]),
});
}
}
class Application extends StatefulWidget {
const Application({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() => _Application();
}
class _Application extends State<Application> {
Future<void> setupInteractedMessage() async {
FirebaseMessaging messaging = FirebaseMessaging.instance;
await messaging.requestPermission(
alert: true,
announcement: false,
badge: true,
carPlay: false,
criticalAlert: false,
provisional: false,
sound: true,
);
String? token = await FirebaseMessaging.instance.getToken();
await saveTokenToDatabase(token!);
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
_handleMessage(initialMessage);
}
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
}
void _handleMessage(RemoteMessage message) {
if (message.data['type'] == 'chat') {
// ここでページの遷移設定をする
// Navigator.pushNamed(context, '/chat',
// arguments: ChatArguments(message),
// );
}
}
@override
void initState() {
super.initState();
setupInteractedMessage();
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print("フォアグラウンドでメッセージを受け取りました");
RemoteNotification? notification = message.notification;
AndroidNotification? android = message.notification?.android;
if (notification != null && android != null) {
flutterLocalNotificationsPlugin.show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
channel.id,
channel.name,
channelDescription:channel.description,
icon: 'launch_background',
),
));
}
});
}
@override
Widget build(BuildContext context) {
return const Main();
}
}
ディスカッション
コメント一覧
まだ、コメントがありません