我使用Firebase发送通知,无论应用程序是打开、后台还是关闭状态都可以正常工作。
以下是我的代码:
local_notification_service.dart:
class LocalNotificationService {
static final FlutterLocalNotificationsPlugin _notificationsPlugin =
FlutterLocalNotificationsPlugin();
static void initialize(BuildContext context) {
final InitializationSettings initializationSettings =
InitializationSettings(
android: AndroidInitializationSettings("@mipmap/launcher_icon"),
iOS: IOSInitializationSettings(
requestSoundPermission: false,
requestBadgePermission: false,
requestAlertPermission: false,
));
_notificationsPlugin.initialize(initializationSettings,
onSelectNotification: (String? route) async {
if (route != null) {
Navigator.of(context).pushNamed(route);
}
});
}
static void display(RemoteMessage message) async {
try {
final id = DateTime.now().millisecondsSinceEpoch ~/ 1000;
final NotificationDetails notificationDetails = NotificationDetails(
android: AndroidNotificationDetails(
"kasifkocaeli",
"kasifkocaeli channel",
channelDescription: "kasifkocaeli guzel",
importance: Importance.max,
priority: Priority.high,
));
await _notificationsPlugin.show(
id,
message.notification!.title,
message.notification!.body,
notificationDetails,
payload: message.data["route"],
);
} on Exception catch (e) {
print(e);
}
}
}
main.dart:
Future<void> backgroundHandler(RemoteMessage message) async{
print(message.data.toString());
print(message.notification!.title);
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(backgroundHandler);
runApp(const MyApp());
}
choose_screen.dart:
class _ChoosePageState extends State<ChoosePage> {
@override
void initState() {
super.initState();
LocalNotificationService.initialize(context);
//Bildirime tıklandığında gösterilecek mesaj
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
final routeFromMessage = message.data["route"];
Navigator.of(context).pushNamed(routeFromMessage);
}
});
//forground (uygulama önplandayken)
FirebaseMessaging.onMessage.listen((message) {
if (message.notification != null) {
print(message.notification!.body);
print(message.notification!.title);
}
LocalNotificationService.display(message);
});
//Uygulama arkaplandayken ve kullanıcı tıkladığında
FirebaseMessaging.onMessageOpenedApp.listen((message) {
final routeFromMessage = message.data["route"];
Navigator.of(context).pushNamed(routeFromMessage);
});
}
pubspec.yaml:
firebase_messaging: ^11.2.13
flutter_local_notifications: ^9.4.0
firebase_core: ^1.13.1
cloud_firestore: ^3.1.10
AndroidManifest:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="notification_app"/>
这是我收看的视频(他和我做了同样的操作,但通知屏幕在他的应用程序中弹出,而在我的应用程序中没有弹出。通知显示的场景)