Flutter 应用程序的 FCM 通知未显示在 iOS 系统托盘中

Posted

技术标签:

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

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

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

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

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

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

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

我正在模拟器上测试。

【问题讨论】:

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

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

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

【讨论】:

奇怪的是,当应用程序处于前台时通知会到达。 Firebase 团队可能正在逐步使其在 Simulator 上运行,因为这是一个相当大的问题:我看到无数程序员遇到这个问题的消息,我自己也遇到过(不得不借用朋友的 iphone,因为我没有)。 这里怎么样?这适用于 FCM 吗? ***.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】:

按照以下步骤操作:

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

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

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

    按照“上传您的 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])
    


【讨论】:

以上是关于Flutter 应用程序的 FCM 通知未显示在 iOS 系统托盘中的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase:抬头通知未在后台显示

应用打开时在整个应用中显示 FCM 通知 (Flutter)

未收到 Flutter FCM IOS 静默(仅数据)通知

当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?

Flutter IOS 通知的 FCM 在应用程序处于后台或终止时不显示

应用程序终止时 FCM 推送通知 FLUTTER