我正在尝试设置我的移动应用程序,以便当用户收到 FCM 消息时,当他们单击该消息时,我可以使用消息中的数据将其路由到适当的屏幕。
我的 FCM 消息如下所示:
const fcmMessage = {
notification: {
title: title,
body: message
},
data:{
type:'Chat',
Name: 'Mike',
body:'test'
},
android: {
notification: {
title:title,
body: message,
channel_id:'high_importance_channel'
}
},
token: msgToken,
};
Run Code Online (Sandbox Code Playgroud)
然后在我的 main() 方法中,我按照下面的代码片段初始化 Flutter_Local_notifications。
问题是当我点击通知时,有效负载始终是空字符串?这些是执行此操作的代码行。为什么NotificationResponse.payload是空字符串?最终,我需要访问 FCM 消息中的“数据”对象。
void onDidReceiveNotificationResponse(NotificationResponse notificationResponse) async {
print(notificationResponse.payload);
}
Run Code Online (Sandbox Code Playgroud)
这是完整的 main() 方法。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
// Set the background messaging handler early on, as a named top-level function
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
if (!kIsWeb) {
channel = const …Run Code Online (Sandbox Code Playgroud) 我正在通过FCM和LocalPushNotifications设置推送通知,我能够在应用程序的前台状态和后台设置它。在应用程序的终止状态下,我确实收到了通知,但是当我按下它时,即使应用程序的前台和后台状态工作正常并将用户导航到终止状态下的通知屏幕,也不会发生任何操作,应用程序只是打开,并且不会导航到通知屏幕,仅打开应用程序的主屏幕。由于设备未连接,我看不到控制台日志中的错误,但是当我从模拟器启动应用程序时,这就是我启动时得到的内容:
I/flutter ( 3829): Got a message whilst in the terminated state!
I/flutter ( 3829): Message data: null
Run Code Online (Sandbox Code Playgroud)
这在pushNotifications()方法内部调用FirebaseMessaging.instance.getInitialMessage().then()...
这是里面带有注释的代码:
处理推送通知的逻辑:
Future<void> pushNotifications() async {
await Firebase.initializeApp();
RemoteMessage initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
_handleMessage(initialMessage);
}
/// THIS IS NOT WORKING, IT OPENS THE APP BUT DOESN'T NAVIGATE TO THE DESIRED SCREEN
///gives you the message on which user taps
///and it opened the app from terminated state
FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage message) { …Run Code Online (Sandbox Code Playgroud) firebase flutter firebase-cloud-messaging flutter-notification flutter-local-notification
我想知道是否可以在 flutter web 中实现本地通知?我看到我可以为 Android 或 IOS 移动应用程序创建本地通知,但是否可以将其用于网络应用程序?或任何其他替代方案来实现它?
我使用 FCM 和 Flutter 本地通知来接收消息。Flutter 本地通知用于在应用程序位于前台时显示通知。目前,我使用的是 Android 12 (Poco X3 PRO)。
当我终止应用程序并从 Firebase 控制台发送消息时,以下消息将显示在 logcat 中。
2022-07-26 07:40:16.751 11370-11370/? W/GCM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=au.org.nrna.test.app (has extras) }
Run Code Online (Sandbox Code Playgroud)
我已经检查了此处链接的 firebase 云消息传递文档,但是没有提及终止状态下的消息处理。
同样,当应用程序位于前台时,该消息仅显示在通知托盘中。它根本不显示在屏幕上。
文件: main.dart
import 'dart:async';
import 'dart:convert';
import 'dart:isolate';
import 'package:device_preview/device_preview.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'core/apps/app.dart';
import 'core/apps/device_preview_app.dart';
import 'core/bloc_observers/bloc_observer.dart';
import 'core/config_reader/config_reader.dart';
import 'core/injections/injections.dart';
import 'core/routes/app_router.gr.dart';
final appRouter = AppRouter();
void main() async …Run Code Online (Sandbox Code Playgroud) android flutter firebase-cloud-messaging flutter-local-notification
我将 flutter_local_notifications 更新为 12.0.3 并显示此错误:
错误:未定义命名参数“onSelectNotification”。(未定义的命名参数位于 [rosen] lib\services\notification\notification_service.dart:33)
这是文件来源:
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart';
import 'package:path_provider/path_provider.dart';
import 'package:rosen/models/models.dart';
import 'package:rosen/screens/screens.dart' show LeaderBoardScreen;
import 'package:rosen/utils/logger.dart';
class NotificationService extends GetxService {
final _notifications = FlutterLocalNotificationsPlugin();
@override
void onInit() {
_initNotifications();
super.onInit();
}
Future<void> _initNotifications() async {
const androidInitializationSettings =
AndroidInitializationSettings('@drawable/app_notification_icon');
const iosInitializationSettings = DarwinInitializationSettings(
requestAlertPermission: false,
requestSoundPermission: false,
requestBadgePermission: false,
);
const InitializationSettings initializationSettings =
InitializationSettings(
android: androidInitializationSettings,
iOS: iosInitializationSettings);
_notifications.initialize(initializationSettings,
onSelectNotification: (payload) {
if …Run Code Online (Sandbox Code Playgroud) 我正在使用 flutter 构建一个传输应用程序,并且已经到达 Captain 应用程序的接收请求部分。如果应用程序在收到通知时关闭,如何显示对话框?例如Uber应用程序:当船长收到新的行程请求时,他会弹出接受或拒绝请求的对话框
push-notification flutter firebase-cloud-messaging flutter-local-notification
您好,我做了一个使用 flutter_local_notifications 库的 flutter 应用程序,
我将按照指南(https://pub.dev/packages/flutter_local_notifications#-ios-setup)来设置 IOS 通知
该指南甚至链接到 GitHub 上的示例代码https://github.com/MaikuB/flutter_local_notifications/blob/master/flutter_local_notifications/example/ios/Runner/AppDelegate.swift
但我在 AppDelegate 文件中遇到错误
调用中的参数标签不正确(有“with:”,预期为“withRegistry:”)
idk 该怎么办,有人遇到这个问题吗?
将“with”替换为“withRegistry”并不能解决问题,因为然后我以其他方式收到错误
调用中的参数标签不正确(有“withRegistry:”,应为“with:”)
import UIKit
import Flutter
import Firebase
import flutter_local_notifications
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in
GeneratedPluginRegistrant.register(with: registry)
}
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Awesome_notifications,并且希望在通知中单击“标记为已读”时关闭应用程序,并且不将应用程序置于前台。
应用程序正确地不会将应用程序置于前台,但通知不会被忽略。
下面是代码
import 'package:awesome_notifications/awesome_notifications.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
AwesomeNotifications().initialize(
null,
[
NotificationChannel(
channelKey: 'basic_channel',
channelName: 'Basic notifications',
channelDescription: 'Notification channel for basic tests',
// defaultColor: Color(0xFF9D50DD),
// ledColor: Colors.white
)
],
debug: false);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
} …Run Code Online (Sandbox Code Playgroud) 我有一个可以安排闹钟的应用程序,它会触发本地通知。当按下这些通知上的按钮之一时,数据库会更新以反映您已关闭警报。
但是,当应用程序终止/关闭时,似乎没有代码被执行,数据库也没有更新。 通知确实会被触发,当用户按下其中的按钮时,不会执行任何代码。 看起来像这样
我想知道我正在尝试的是否可能,因为目前我不确定。
通知是使用 flutter 本地通知插件中的 zonedSchedule 创建的。
按下通知中的按钮之一时,应用程序不会打开。
代码如下:
class LocalNoticationsService {
LocalNoticationsService(
this._notificationsPlugin,
);
final FlutterLocalNotificationsPlugin _notificationsPlugin;
Future<void> init() async {
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings(
'img/path',// path to notification icon
);
final DarwinInitializationSettings initializationSettingsIOS = DarwinInitializationSettings(
requestSoundPermission: false,
requestBadgePermission: false,
requestAlertPermission: false,
defaultPresentAlert: true,
defaultPresentSound: true,
notificationCategories: [
DarwinNotificationCategory(
'category',
options: {
DarwinNotificationCategoryOption.allowAnnouncement,
},
actions: [
DarwinNotificationAction.plain(
'snoozeAction',
'snooze',
),
DarwinNotificationAction.plain(
'confirmAction',
'confirm',
options: {
DarwinNotificationActionOption.authenticationRequired,
},
),
],
),
],
);
final InitializationSettings initializationSettings …Run Code Online (Sandbox Code Playgroud) flutter-local-notification ×10
flutter ×9
android ×2
dart ×2
ios ×2
firebase ×1
flutter-web ×1
swift ×1