Flutter通知未显示弹出窗口。

7

我使用Firebase发送通知,无论应用程序是打开、后台还是关闭状态都可以正常工作。

enter image description here

但是我想要像这样弹出一个对话框: enter image description here

以下是我的代码:

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"/>

这是我收看的视频(他和我做了同样的操作,但通知屏幕在他的应用程序中弹出,而在我的应用程序中没有弹出。通知显示的场景

我也遇到了同样的问题,但对我来说更糟糕的是,即使在后台中它也没有显示出来,但仍然出现在通知中心..你是如何解决的? - swifthing
3个回答

3
如果在将重要性设置为最大之前运行了应用程序,则可能已经缓存了该设置。我曾经遇到过同样的问题,不得不清除 Android 模拟器的数据并重新运行它,然后它就可以正常工作了。

这对我起作用了! - Soliev

2

您需要打开设置并选择通知,进入您的应用程序并在屏幕底部选择打开频道名称,然后勾选允许浮动通知。

enter image description here

enter image description here


您可以参考此页面 -> https://documentation.onesignal.com/docs/android-notification-categories - Hoàng văn
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0

对我来说,我的代码已经正确编写了,我所要做的就是运行:

  1. flutter clean
  2. flutter pub get
  3. flutter run

就可以让它工作。

基本上就是 @Ricky Kresslein 说的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接