Flutter背景推送通知不适用于iOS

时间:2020-11-06 13:38:05

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

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

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

非常感谢您...

0 个答案:

没有答案