Flutter应用中的FCM通知在iOS系统托盘中无法显示

7

我有一个使用Firebase Cloud Messaging推送通知的Flutter应用。

我通过Firebase控制台发送测试通知。

在Android上,通知按预期工作。

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

实质上,在打开应用程序之前没有任何通知到达的迹象。

我已经按照这个页面上的说明操作,并确认我完全遵循了iOS的集成步骤。

我正在模拟器上测试。


在哪个操作系统上无法在系统尝试中工作? - milan pithadia
1
你应该在真实的IOS设备上尝试。FCM通知可能无法在Xcode模拟器上工作。 - EncryptedSpirit
我可以确认它在真实设备上按预期工作,但在模拟器上无法工作。 - Antonin GAVREL
6个回答

10
根据在Firebase网站上找到的文档有关苹果集成的内容:

对于iOS平台,您必须拥有一个实体的iOS设备才能接收消息。 Firebase Cloud Messaging与Apple推送通知服务(APNs)集成,但是APNs只能与真实设备配合使用。


当应用在前台时收到通知有点奇怪。 - Scorb
Firebase团队有可能正在逐步努力使其在模拟器上运行,因为这是一个相当大的问题:我已经看到无数程序员遇到了这个问题,并且自己也遇到了这个问题(不得不向朋友借iPhone,因为我没有自己的)。 - Antonin GAVREL
这个怎么样?它能在 FCM 上工作吗?https://dev59.com/ZHNA5IYBdhLWcg3wIqLr#60085404 - Zubeir

1
我曾因未在我的应用中请求通知权限而遇到一些问题。因此,在执行应用程序时,您应检查是否已请求通知权限并且是否已接受,因为如果您不接受权限,则可能无法收到通知。
您可以将以下代码添加到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中的包,在您的应用程序中检查和请求权限。

您还可以在手机上检查通知是否已启用您的应用程序。


0

按照以下步骤操作:

  1. 根据 Firebase 文档中的指南生成 Apple 所需的证书以接收推送通知。您可以跳过标题为“创建配置文件”的部分。

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

  3. 在 Xcode 中,选择 Project Navigator 中的 Runner。在 Capabilities 选项卡中打开 Push Notifications 和 Background Modes,并在 Background Modes 下启用 Background fetch 和 Remote notifications。

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

5.如果您需要禁用 FCM iOS SDK 执行的方法交换(例如,以便您可以将此插件与其他通知插件一起使用),则请将以下内容添加到应用程序的 Info.plist 文件中。

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

其次,Apple不支持在模拟器中使用FCM推送通知,您必须设置一个物理的iOS设备来运行您的应用程序。

0

我最近遇到了这个问题......尝试了很多像这些人写的方法,但是对我唯一起作用的是将firebase_message版本更改为firebase_messaging:^8.0.0-dev.14。 你应该试试它...有些事情从上一个稳定版本开始发生了变化,但转换并不难。您可以在此处查看教程。https://firebase.flutter.dev/docs/messaging/usage/

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

*仅适用于实际设备


那么你是在暗示说,使用那个版本可以在 iOS 模拟器上显示系统托盘通知? - Scorb
我已经更新了问题。你不能在模拟器中完成它。你需要有一个真实的设备来测试它。 - user14789593

-1
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])
    }

}

-2

在你的info.plist文件中进行以下替换。

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

之前:

enter image description here

现在:

enter image description here

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

别忘了,以下是新代码:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接