You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iPhone端Flutter应用无法接收Firebase推送通知求助

Flutter iOS端无法接收通知问题求助

我在Flutter应用中使用flutter_local_notifications插件实现通知功能,Android端无论应用处于前台还是后台都能正常接收通知,但iPhone端完全无法接收。我已经参考过多个教程并多次查阅官方文档,仍未解决问题,以下是我的相关代码:

AppDelegate.swift 文件

import UIKit
import Flutter
import FirebaseCore
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)
    }
    
    GeneratedPluginRegistrant.register(with: self)

    if #available(iOS 10.0, *) {
      UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

通知服务类代码

import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:nezrouge/src/constants.dart';
 
class LocalNotificationsServices {
  static final FlutterLocalNotificationsPlugin notificationsPlugin =
      FlutterLocalNotificationsPlugin();
 
  static void initialize() async {
    const AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings("@drawable/ic_stat_logo");
 
    DarwinInitializationSettings initializationSettingsDarwin =
        const DarwinInitializationSettings(
      requestSoundPermission: true,
      requestBadgePermission: true,
      requestAlertPermission: true,
    );
 
    InitializationSettings initializationSettings =
        InitializationSettings(
            android: initializationSettingsAndroid,
            iOS: initializationSettingsDarwin);
 
    await notificationsPlugin.initialize(initializationSettings);
  }
 
  static void showNotification(RemoteMessage message) async {
    const AndroidNotificationDetails androidNotificationDetails =
        AndroidNotificationDetails(
      "pushnotification",
      "pushnotificationchannel",
      importance: Importance.max,
      priority: Priority.high,
      playSound: true,
      color: primaryColor,
      largeIcon: DrawableResourceAndroidBitmap("@mipmap/ic_launcher"),
      channelShowBadge: true,
    );
 
    const DarwinNotificationDetails iosNotificationDetails =
        DarwinNotificationDetails();
 
    final id = DateTime.now().millisecondsSinceEpoch ~/ 1000;
    const NotificationDetails notificationsDetails = NotificationDetails(
      android: androidNotificationDetails,
      iOS: iosNotificationDetails,
    );
    await notificationsPlugin.show(id, message.notification!.title,
        message.notification!.body, notificationsDetails);
  }
}

main.dart 代码

import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:nezrouge/firebase_options.dart';
import 'package:nezrouge/src/notifications/notification_manager.dart';
 
import 'src/app.dart';
 
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
}
 
Future main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
 
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  FirebaseMessaging.instance.requestPermission();
  LocalNotificationsServices.initialize();
 
  FirebaseMessaging messaging = FirebaseMessaging.instance;
 
  NotificationSettings settings = await messaging.requestPermission(
    alert: true,
    announcement: true,
    badge: true,
    carPlay: true,
    criticalAlert: false,
    provisional: false,
    sound: true,
  );
 
  FirebaseMessaging.onMessage.listen(
    (RemoteMessage message) {
      if (message.notification != null) {
        LocalNotificationsServices.showNotification(message);
      }
    },
  );
 
  final fcmToken = await FirebaseMessaging.instance.getToken();
  print(fcmToken);
 
  SystemChrome.setPreferredOrientations(
    [
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ],
  );
 
  runApp(
    MyApp(
      fcmToken: fcmToken.toString(),
    ),
  );
}

内容的提问来源于stack exchange,提问作者wouilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:52:34