当应用程序在后台或终止时,不会显示FCM for Flutter IOS通知

时间:2020-03-24 01:58:24

标签: flutter firebase-cloud-messaging

我已使用this实现了Flutter的Firebase Cloud Messaging。所有事情在Android上都可以正常运行,但是iOS推送通知仅在应用程序处于前台时显示。

请帮助我在后台显示通知应用并终止。

这些是我到目前为止所做的步骤

  1. 创建的firbase项目。
  2. 将GoogleService-Info.plist添加到xcode。
  3. 在pubspec.yaml中添加firebase_messaging:^ 6.0.13和flutter_local_notifications:^ 1.3.0。
  4. Then I enable push notification and background modes

  5. 扑朔迷离

    FirebaseMessaging firebaseMessaging = new FirebaseMessaging();
    FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    new FlutterLocalNotificationsPlugin();
    
    
    
    @override
    void initState() {
    super.initState();
    var android = new 
    AndroidInitializationSettings('mipmap/ic_launcher');
    var ios = new IOSInitializationSettings();
    var platform = new InitializationSettings(android, ios);
    flutterLocalNotificationsPlugin.initialize(platform);
    
    firebaseMessaging.configure(
    onLaunch: (Map<String, dynamic> msg) async{
    print(" onLaunch called ${(msg)}");
    },
    
    onResume: (Map<String, dynamic> msg) async{
    print(" onResume called ${(msg)}");
    },
    onMessage: (Map<String, dynamic> msg) async{
    showNotification(msg);
    print(" onMessage called ${(msg)}");
    },
    );
    firebaseMessaging.requestNotificationPermissions(
    const IosNotificationSettings(sound: true, alert: true, badge: 
    true));
    firebaseMessaging.onIosSettingsRegistered
    .listen((IosNotificationSettings setting) {
    print('IOS Setting Registed');
    });
    firebaseMessaging.getToken().then((token) {
    update(token);
    });
    getCashedInfo();
    }
    
    
    
    showNotification(Map<String, dynamic> msg) async {
    var android = new AndroidNotificationDetails(
    'sdffds dsffds',
    "CHANNLE NAME",
    "channelDescription",
    );
    var iOS = new IOSNotificationDetails();
    var platform = new NotificationDetails(android, iOS);
    await flutterLocalNotificationsPlugin.show(
     0, "This is title", "this is demo", platform);
    }
    
    update(String token) {
    print(token);
    
    }
    
  6. 在我添加的Xcode中

    if #available(iOS 10.0, *) {
      UNUserNotificationCenter.current().delegate = self as? 
    UNUserNotificationCenterDelegate
    }
    

1 个答案:

答案 0 :(得分:0)

发布此问题后,以前不支持在 iOS 后台处理消息的功能。但是在此 GitHub post 中提到了一些解决方法。

<块引用>

使用通知服务扩展是一种方法,是的。

Flutter 是一个优秀的框架,它允许构建和发布漂亮的 UI 速度异常。然而,这是否意味着它提供了我们的一切 想要(从我们的角度来看)?不。这是否意味着我们有 drop Flutter 并使用 SwiftUI(越野车)或故事板?号

我们决定在 UI 中使用 Flutter 并且我们正在处理 除了推送通知之外的所有业务逻辑 以及其他一些小功能 - 这就是您的优势 自己动手。

实施通知服务扩展并使其与 Flutter 是几个小时的事情,考虑到有多少失败 考虑到入门级,所以有点有趣但并不令人震惊。

我们确实使用了具有通知内容的通知服务扩展 将更高级的通知延长几个月,但最后我们 放下它并移动到 PushKit(显然带有 CallKit)并滚动我们的 自己的通知演示者逻辑导致我们放弃了两者 通知服务和内容扩展。

我对那些需要添加推送通知支持的人的建议 Flutter - 在本地解决它,你以后会感谢自己。

<块引用>

如何使用 NotificationServiceExtension(本机代码)与 firebase_messaging?

在同一个 GitHub 帖子中,特别是在 2020 年 8 月 4 日的 this thread 中。有人提到现在支持此功能。

<块引用>

大家好,当前的开发版本现已支持此功能,以及 macOS 平台也支持登陆(请参阅 migration guide doc 以获取完整的 更改日志以及如何升级)。

有关试用此开发版本的讨论/反馈,请参阅 #4023 - 希望得到反馈。