扑来不显示前景壁炉通知

发布于 2025-02-03 03:59:52 字数 6095 浏览 2 评论 0原文

我正在进行一个flutter项目,需要在此项目中发出通知,但是在发送通知时,它通常显示该应用程序是背景或封闭的,但在应用程序打开时不会显示。

这是androidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.eduflexdchedule"
    android:name="android.permission.INTERNET">
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
  <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <application
        android:label="Label"
        android:icon="@mipmap/ic_launcher">


        <service android:name="com.google.firebase.messaging.FirebaseMessagingService">
          <intent-filter>
              <action android:name="com.google.firebase.MESSAGING_EVENT" />
          </intent-filter>
        </service>
        
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize"
            android:usesCleartextTraffic="true">
            

            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />

            <meta-data
              android:name="io.flutter.embedding.android.SplashScreenDrawable"
              android:resource="@drawable/launch_background"
              />
           
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                
            </intent-filter>
        </activity>

        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

,这是主上的代码。d

    import 'package:project_app/API/Notificator.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_messaging/firebase_messaging.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 
    'package:flutter_local_notifications/flutter_local_notifications.dart';
    
    import 'package:native_notify/native_notify.dart';
    import 'App.dart';
        
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      // NativeNotify.initialize(96, 'cVRYxxIMoJ4g4UXxgCbr2g');
    
      Firebase.initializeApp();
    
      await SystemChrome.setPreferredOrientations(
        [DeviceOrientation.portraitUp],
      );
    
      late final FirebaseMessaging _messaging;
    
      _messaging = FirebaseMessaging.instance;
    
      
    
   FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
      NotificationSettings settings = await _messaging.requestPermission(
        alert: true,
        badge: true,
        provisional: false,
        sound: true,
      );
      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        // print foreground message here.
        print("OVER HERE");
        print('Handling a foreground message ${message.messageId}');
        print('Notification Message: ${message.data}');
    
        if (message.notification != null) {
          print('Message also contained a notification: 
          ${message.notification}');
        }
    
        //.. rest of your code
        NotificationService.showNotification(message);
      });
      runApp(
        MyApp(),
      );
    }
    
    Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) 
    async {
      print('Handling a background message ${message.messageId}');
      print('Notification Message: ${message.data}');
      NotificationService.showNotification(message);
    }

,最后是通知服务:

import 'dart:io';

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 
'package:flutter_local_notifications/flutter_local_notifications.dart';

import 'package:stacked_services/stacked_services.dart';

class NotificationService {
  static final FlutterLocalNotificationsPlugin
      _flutterLocalNotificationsPlugin = 
FlutterLocalNotificationsPlugin();

  static Future initialize() async {
    final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin 
= FlutterLocalNotificationsPlugin();

    AndroidInitializationSettings androidInitializationSettings =
        AndroidInitializationSettings('@mipmap/ic_launcher');

    InitializationSettings initializationSettings =
        InitializationSettings(android: androidInitializationSettings);

    await flutterLocalNotificationsPlugin.initialize(
      initializationSettings,
      // onSelectNotification: doSomething(),
    );
  }

  static Future showNotification(RemoteMessage message) async {
    AndroidNotificationDetails androidDetails =AndroidNotificationDetails(
      "111",
      "channel",
      enableLights: true,
      enableVibration: true,
      priority: Priority.high,
      importance: Importance.max,
      //largeIcon: DrawableResourceAndroidBitmap("ic_launcher"),
      styleInformation: MediaStyleInformation(
        htmlFormatContent: true,
        htmlFormatTitle: true,
      ),
      playSound: true,
    );

    await _flutterLocalNotificationsPlugin.show(
        message.data.hashCode,
        message.data['title'],
        message.data['body'],
        NotificationDetails(
          android: androidDetails,
        ));
  }
}

网站上的某些解决方案已经尝试过,但它们似乎并未在Foreground上显示通知

I am doing a flutter project and in this project is needed a notification, however when sending the notification it shows it normally if the app is background or closed but it does not show when the app is open.

here is the AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.eduflexdchedule"
    android:name="android.permission.INTERNET">
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
  <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <application
        android:label="Label"
        android:icon="@mipmap/ic_launcher">


        <service android:name="com.google.firebase.messaging.FirebaseMessagingService">
          <intent-filter>
              <action android:name="com.google.firebase.MESSAGING_EVENT" />
          </intent-filter>
        </service>
        
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize"
            android:usesCleartextTraffic="true">
            

            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />

            <meta-data
              android:name="io.flutter.embedding.android.SplashScreenDrawable"
              android:resource="@drawable/launch_background"
              />
           
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                
            </intent-filter>
        </activity>

        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

And here is the code on the main.dart

    import 'package:project_app/API/Notificator.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_messaging/firebase_messaging.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 
    'package:flutter_local_notifications/flutter_local_notifications.dart';
    
    import 'package:native_notify/native_notify.dart';
    import 'App.dart';
        
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      // NativeNotify.initialize(96, 'cVRYxxIMoJ4g4UXxgCbr2g');
    
      Firebase.initializeApp();
    
      await SystemChrome.setPreferredOrientations(
        [DeviceOrientation.portraitUp],
      );
    
      late final FirebaseMessaging _messaging;
    
      _messaging = FirebaseMessaging.instance;
    
      
    
   FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
      NotificationSettings settings = await _messaging.requestPermission(
        alert: true,
        badge: true,
        provisional: false,
        sound: true,
      );
      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        // print foreground message here.
        print("OVER HERE");
        print('Handling a foreground message ${message.messageId}');
        print('Notification Message: ${message.data}');
    
        if (message.notification != null) {
          print('Message also contained a notification: 
          ${message.notification}');
        }
    
        //.. rest of your code
        NotificationService.showNotification(message);
      });
      runApp(
        MyApp(),
      );
    }
    
    Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) 
    async {
      print('Handling a background message ${message.messageId}');
      print('Notification Message: ${message.data}');
      NotificationService.showNotification(message);
    }

and finally here is the notificator service:

import 'dart:io';

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 
'package:flutter_local_notifications/flutter_local_notifications.dart';

import 'package:stacked_services/stacked_services.dart';

class NotificationService {
  static final FlutterLocalNotificationsPlugin
      _flutterLocalNotificationsPlugin = 
FlutterLocalNotificationsPlugin();

  static Future initialize() async {
    final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin 
= FlutterLocalNotificationsPlugin();

    AndroidInitializationSettings androidInitializationSettings =
        AndroidInitializationSettings('@mipmap/ic_launcher');

    InitializationSettings initializationSettings =
        InitializationSettings(android: androidInitializationSettings);

    await flutterLocalNotificationsPlugin.initialize(
      initializationSettings,
      // onSelectNotification: doSomething(),
    );
  }

  static Future showNotification(RemoteMessage message) async {
    AndroidNotificationDetails androidDetails =AndroidNotificationDetails(
      "111",
      "channel",
      enableLights: true,
      enableVibration: true,
      priority: Priority.high,
      importance: Importance.max,
      //largeIcon: DrawableResourceAndroidBitmap("ic_launcher"),
      styleInformation: MediaStyleInformation(
        htmlFormatContent: true,
        htmlFormatTitle: true,
      ),
      playSound: true,
    );

    await _flutterLocalNotificationsPlugin.show(
        message.data.hashCode,
        message.data['title'],
        message.data['body'],
        NotificationDetails(
          android: androidDetails,
        ));
  }
}

some solutions on the site were already attempted but they dont seem to show the notification on foreground

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

随波逐流 2025-02-10 03:59:52

Android根据几个不同的因素对传入通知的处理方式有所不同。如果该应用程序当前在前景中,则不会提供可见的通知。

按照 flutterfire ,您可以使用Android设置 flutter_local_notifications

Android handles incoming notifications differently based on a few different factors. If the application is currently in the foreground, a visible notification is not presented.

As per FlutterFire, you can set foreground notifications for Android using flutter_local_notifications

给妤﹃绝世温柔 2025-02-10 03:59:52

使用 onMessageOpenedApp add setupfirebase :_handlemessage:

FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);

_handlemessage:

void _handleMessage(RemoteMessage message) {

print(message);

}

use onMessageOpenedApp add setUpFirebase:

FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);

_handleMessage:

void _handleMessage(RemoteMessage message) {

print(message);

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文