android - Flutter App Firebase 推送通知未在后台出现

标签 android firebase flutter push-notification firebase-cloud-messaging

当应用程序终止/从后台从最近的应用程序中删除时,我面临收到通知的问题。
我已经在应用程序或项目级别的 build.gradle 文件中完成了 android 应用程序所需的所有设置。当应用程序打开或应用程序在最近的应用程序中时,我能够接收推送通知。
库版本

firebase_messaging: ^11.2.0
firebase_core: ^1.10.0
flutter_local_notifications: ^9.1.4
这是我的代码。
await Firebase.initializeApp();
    FirebaseMessaging messaging = FirebaseMessaging.instance;

    messaging.getToken().then((value) {
      print('firebase token =$value');    
    });

    FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
      //print(event.notification!.body);
      RemoteNotification? notification = message.notification;
      if (notification != null) {
        print("Notification received when app in foreground");
      }
    });

    FirebaseMessaging.onMessageOpenedApp.listen((message) {
      print('Message clicked!');
    });

    await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
      alert: true,
      badge: true,
      sound: true,
    );
BackgroundMessage 处理程序代码如下
Future<void> _messageHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  RemoteNotification? notification = message.notification;
  if (notification != null) {
    print("Notification received when app in background");
  }
}
下面是我的 main.dart 文件的完整代码
Future<void> _messageHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  RemoteNotification? notification = message.notification;
  if (notification != null) {
    print("Notification received when app in background");
  }
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseMessaging.onBackgroundMessage(_messageHandler);
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isUserLoggedIn = true;
  bool isLogoutAlertShown = false;
  final materialAppKey = GlobalKey();
  late FirebaseMessaging messaging;


  @override
  void initState() {
    super.initState();
    setUpNotification();
  }

  setUpNotification() async {
    messaging = FirebaseMessaging.instance;
    messaging.getToken().then((value) {
      print('firebase token =$value');
      //sendTokenToServer(value);
      Pref.setFcmToken(token: '$value');
    });
    FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
      //print(event.notification!.body);
      RemoteNotification? notification = message.notification;
      if (notification != null) {
        print("Notification received when app in foreground");
      }
    });
    FirebaseMessaging.onMessageOpenedApp.listen((message) {
      print('Message clicked!');
    });
   await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
      alert: true,
      badge: true,
      sound: true,
    );
  }

  @override
  Widget build(BuildContext context) {
    return _materialApp();
  }

  Widget _materialApp() {
    return FutureBuilder(
        future: _loginState(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return MaterialApp(
              debugShowCheckedModeBanner: false,
              key: materialAppKey,
              darkTheme: AppTheme.lightTheme,
              theme: AppTheme.lightTheme,
              home: isUserLoggedIn == true ? 
              BottomNavigationContainer() : LoginOptions(),
            );
          } else {
            return Container(color: Colors.white);
          }
        });
  }

  Future<void> _loginState() async {
    final token = await Pref.getToken();
    isUserLoggedIn = token.length > 0 ? true : false;
  }
}
建议我缺少什么或做错了什么。

最佳答案

感谢大家的回复。
我找到了为什么我的后台处理程序无法工作的解决方案,因为我在 Debug模式下运行我的应用程序。根据 FlutterFire Cloud messaging Doc如果你杀死你的应用程序,后台方法在 Debug模式下不起作用。
您可以通过在调试中运行您的应用程序来测试您的后台处理程序方法,然后通过切换应用程序将其置于后台,使其不再处于前台。
如果您想在最近的任务中检查应用程序终止/终止后,请在 中运行应用程序发布方式 .它工作正常
再次感谢所有人。

关于android - Flutter App Firebase 推送通知未在后台出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70755989/

相关文章:

Android如何创建堆栈类图像背景

java - Firebase 数据库 DataSnapshot 不工作

layout - 在Flutter中,如何使用FittedBox调整行内文本的大小?

flutter - 为什么下拉按钮的下拉值未更新?

Firebase 电子邮件验证 Flutter

android - PDFBox用于在android中处理pdf

android - WebView iframe 忽略 frameborder ="0"

Android 后退按钮按下检查

angular - 将 Promise 转换为 Observable

javascript - 当 ID 设置为未在任何地方预定义的名称时删除 Firestore 文档