【问题标题】:FCM Notification for flutter app does not show in iOS system trayFlutter 应用程序的 FCM 通知未显示在 iOS 系统托盘中
【发布时间】:2021-05-07 07:23:42
【问题描述】:

我有一个 Flutter 应用,我在其中使用 Firebase Cloud Messaging 进行通知。

我正在通过 firebase 控制台发送测试通知。

通知功能在 android 上与预期一样。

在 ios 上,当应用处于前台时,通知会按预期到达。当应用程序在后台最小化时,通知不会显示在系统托盘中。即使在我通过控制台发送时在 Firebase 通知中设置了徽章,也没有显示徽章。

在应用再次打开之前,基本上没有任何通知已经到达的迹象。

我已按照this page 上的说明进行操作,并确认我已按照 ios 集成步骤完成了 T。

我正在模拟器上测试。

【问题讨论】:

  • 在女巫操作系统中无法在系统上运行试试?
  • 你应该在真正的IOS设备上试试。 FCM 通知可能不适用于 Xcode 模拟器
  • 我可以确认它在真实设备上按预期工作,而不是在模拟器上工作。

标签: ios firebase flutter firebase-cloud-messaging


【解决方案1】:

根据 on Firebase website 关于苹果集成的文档:

对于 iOS;您必须拥有物理 iOS 设备才能接收消息。 Firebase 云消息传递与 Apple 推送通知服务 (APN) 集成,但 APN 仅适用于真实设备。

【讨论】:

  • 奇怪的是,当应用程序处于前台时通知会到达。
  • Firebase 团队可能正在逐步使其在 Simulator 上运行,因为这是一个相当大的问题:我看到无数程序员遇到这个问题的消息,我自己也遇到过(不得不借用朋友的 iphone,因为我没有)。
  • 这里怎么样?这适用于 FCM 吗? stackoverflow.com/a/60085404/9194653
【解决方案2】:

在您的 info.plist 文件中进行此替换。

<false/> 替换为<string>0</string>

之前:

现在:

信息:如果您的 info.plist 中没有此代码,并且您没有 也收到通知,请确保添加它。

别忘了,这是新代码:

<key>FirebaseAppDelegateProxyEnabled</key>
<string>0</string>

Info: IOS不支持模拟器中的FCM推送通知, 即使您在 XCode 中使用模拟器。最好的解决方案是 使用物理设备

【讨论】:

    【解决方案3】:

    当我没有在我的应用程序中请求通知的权限时,我遇到了一些问题。因此,您应该检查您在执行应用程序时是否已请求通知的权限,并且已被接受,因为如果您不接受权限,您可能无法接收到通知。

    您可以在iOS项目的appDelegate中添加这段代码,在应用执行时请求权限:

    let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
            
            // Enable or disable features based on the authorization.
        }
    

    或者您也可以使用 pub.dev 中的包来检查和请求您的 App 中的权限。

    您也可以在手机上查看是否为您的应用启用了通知。

    【讨论】:

      【解决方案4】:

      按照以下步骤操作:

      1. 生成苹果接收推送所需的证书 Firebase 文档中本指南之后的通知。你可以 跳过标题为“创建配置文件”的部分。

      2. 使用 Firebase 控制台将 iOS 应用添加到您的项目:关注 助手,下载生成的 GoogleService-Info.plist 文件, 使用 Xcode 打开 ios/Runner.xcworkspace,然后在 Xcode 中放置 ios/Runner 中的文件。不要按照名为“添加 Firebase SDK”和 Firebase 助手中的“添加初始化代码”。

      3. 在 Xcode 中,在 Project Navigator 中选择 Runner。在里面 功能选项卡打开推送通知和后台模式, 并在下启用后台获取和远程通知 背景模式。

      4. 按照“上传您的 APNs 证书”部分中的步骤操作 Firebase 文档。

      5.如果需要禁用 FCM iOS SDK 的方法调配 (例如,以便您可以将此插件与其他通知一起使用 plugins) 然后将以下内容添加到应用程序的 Info.plist 文件。

      <key>FirebaseAppDelegateProxyEnabled</key>
      <false/>
      

      其次,Apple 不支持模拟器中的 FCM 推送通知,您必须设置物理 iOS 设备才能运行您的应用。

      【讨论】:

        【解决方案5】:

        我最近遇到了这个问题...尝试了很多类似这些人写的东西,但唯一对我有用的是将 firebase_message 版本更改为firebase_messaging: ^8.0.0-dev.14。您应该尝试一下。与上一个稳定版本相比,有些东西有所变化,但过渡并不难。你可以在这里查看教程。 https://firebase.flutter.dev/docs/messaging/usage/.

        我现在看到他们发布了最新版本 (9.0.0).. 但对我来说 8.0.0 有效

        *仅适用于真实设备

        【讨论】:

        • 那么您是否建议使用该版本在 ios 模拟器上显示系统托盘通知?
        • 我已经更新了问题。你不能在模拟器中做到这一点。你需要有一个真实的设备来测试它
        【解决方案6】:
        import UIKit
        import Flutter
        import UserNotifications
        
        //import FacebookCore
        
        @UIApplicationMain
        @objc class AppDelegate: FlutterAppDelegate {
            override func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                GeneratedPluginRegistrant.register(with: self)
               if #available(iOS 10.0, *) {
                   UNUserNotificationCenter.current().delegate = self
               } else {
                   // Fallback on earlier versions
               }
        
                //SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
                return super.application(application, didFinishLaunchingWithOptions: launchOptions)
            }
            // This method will be called when app received push notifications in foreground
            
            @available(iOS 10.0, *)
            override func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
            {
                completionHandler([.alert, .badge, .sound])
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2018-05-31
          • 2020-05-14
          • 2017-04-23
          • 1970-01-01
          • 2017-06-05
          • 2010-10-27
          • 2017-08-28
          • 2018-12-12
          • 1970-01-01
          相关资源
          最近更新 更多