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 系统托盘中的主要内容,如果未能解决你的问题,请参考以下文章
应用打开时在整个应用中显示 FCM 通知 (Flutter)
当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?