首页 > 解决方案 > Flutter后台推送通知不适用于iOS

问题描述

我查看了所有其他问题和答案,但即使我尝试了一切,我也无法解决我的问题。

当应用程序在 IOS 和 Android 的前台运行时,我可以收到通知。但是如果我在IOS后台,我需要进入应用程序才能看到通知。

main.dart initState 的代码

  @override
  void initState() {
    super.initState();
    _firebaseMessaging = FirebaseMessaging();
    _firebaseMessaging.requestNotificationPermissions(
        IosNotificationSettings(sound: true, badge: true, alert: true));
    print("requested");
    _firebaseMessaging.getToken().then((String token) {
      assert(token != null);
      print("token");
      print(token);
    });
    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        //showNotification(message);
      },
      onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
      onLaunch: (Map<String, dynamic> message) async {
        // this will never called, but it's ok
        print("onLaunch: $message");
      },
      onResume: (Map<String, dynamic> message) async {
        // this will never called, but it's ok
        print("onResume: $message");
      },
    );

    _firebaseMessaging.onIosSettingsRegistered
        .listen((IosNotificationSettings settings) {
      print("Settings registered: $settings");
    });
    var androidInitialize = AndroidInitializationSettings('app_icon');
    var iosInitialize = IOSInitializationSettings();
    var initializationSettings =
        InitializationSettings(androidInitialize, iosInitialize);
    //flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
    flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: notificationSelected);
  }

我的 info.plist 中有与通知相关的这些键。

<key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>processing</string>
    <string>remote-notification</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

我的 AppDelagete.swift 文件

import UIKit
import Flutter
import Firebase

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    if FirebaseApp.app() == nil { FirebaseApp.configure()}
    // if #available(iOS 10.0, *) {
    //   UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    // }
    // Messaging.messaging().apnsToken = deviceToken
    // super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
 
    if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
      UNUserNotificationCenter.current().delegate = self

      let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
      UNUserNotificationCenter.current().requestAuthorization(
        options: authOptions,
        completionHandler: {_, _ in })
    } else {
      let settings: UIUserNotificationSettings =
      UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
      application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

我已尝试使用此代码发送通知

DATA='{"notification": {"body": "Body","title": "Title Title"}, "priority": "high", "data": {"click_action": "FLUTTER_NOTIFICATION_CLICK", "id": "1", "status": "done", "priority":"high"}, "to": "<TOKEN>"}'
curl https://fcm.googleapis.com/fcm/send -H "Content-Type:application/json" -X POST -d "$DATA" -H "Authorization: key=<SERVERKEY>"

太感谢了...

标签: firebaseflutterpush-notificationfirebase-cloud-messaging

解决方案


推荐阅读