应用程序关闭时推送通知不起作用 - Flutter

Posted

技术标签:

【中文标题】应用程序关闭时推送通知不起作用 - Flutter【英文标题】:Push notification not working when the app is closed - Flutter 【发布时间】:2021-03-08 22:13:47 【问题描述】:

当应用程序关闭时,我的 android 不会收到来自 Firebase 的推送通知,但如果我打开应用程序,一切正常。这是我的 MainActivity:

package com.imperio.app

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() 

还有我的 Flutter 配置:

void configure() 
    _firebaseMessaging.requestNotificationPermissions();

    _firebaseMessaging.configure(
      onLaunch: (params) 
        _bloc.onEventChanged(DispatchLaunch(params));
        return null;
      , 
      onMessage: (params) 
        _bloc.onEventChanged(DispatchMessage(params));
        return null;
      , 
      onResume: (params) 
        _bloc.onEventChanged(DispatchLaunch(params));
        return null;
      
    );  
  

当应用程序打开时,我可以正常接收通知。我看到有些人更改了 de MainActivity,但在嵌入 v2 之后,Google 文档对此没有任何说明。

我在 Android Manifest 中添加了点击通知:

  <intent-filter>
      <action android:name="FLUTTER_NOTIFICATION_CLICK" />
      <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

问题出现在 Android 10 中,我在 Android 8 设备上进行了测试,它可以正常工作。

【问题讨论】:

您能否提供有关您的代码的更多信息。 从技术上讲,不需要配置任何其他东西来通知工作。 曾经遇到同样的问题,但将 minSdkVersion 从 16 更改为 21 已解决该错误,我不知道这是否对您有用,但值得一试 我改为 21,但我仍然遇到同样的问题。如果我的应用程序是开放的,但没有关闭。 【参考方案1】:

在颤振的 firebase 消息传递文档中您必须添加

 <intent-filter>
  <action android:name="FLUTTER_NOTIFICATION_CLICK" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

mainfest.xml 的内部标签

并添加 Application.java 并粘贴此代码

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;

public class Application extends FlutterApplication implements 
PluginRegistrantCallback 
  @Override
  public void onCreate() 
   super.onCreate();
   FlutterFirebaseMessagingService.setPluginRegistrant(this);
  

  @Override
  public void registerWith(PluginRegistry registry) 
  GeneratedPluginRegistrant.registerWith(registry);
   
  

在 AndroidManifest.xml 中设置应用程序的名称属性。这通常在 /android/app/src/main/ 中找到。

<application android:name=".Application" ...>

你可以在https://pub.dev/packages/firebase_messaging获得完整的文档

【讨论】:

我有这个错误:使用 Application java 的类型:PluginRegistry 无法转换为 FlutterEngine GeneratedPluginRegistrant.registerWith(registry); ^ ***.com/questions/59446933/…查看此链接 现在这个错误(我改为 FirebaseMessagingPlugin.registerWith 而不是 GeneratedPluginRegistrant):无法实例化活动 ComponentInfocom.imperio.app/com.imperio.app.Application:java.lang.ClassCastException: com.imperio.app.Application 无法转换为 android.app.Activity 你应该在 Applications.java 中而不是在 MainActivity.java 中执行此操作,并按照pub.dev/packages/firebase_messaging 包一步一步进行 当然,但我的应用程序没有收到正常的通知,应用程序终止。此配置用于在应用程序打开的情况下处理后台通知。我试图像文档中所说的关于后台通知的那样做,但也没有奏效。

以上是关于应用程序关闭时推送通知不起作用 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在后台或终止时,iOS 设备不会推送通知。导航到下一个屏幕在 Flutter 的 IOS 设备中也不起作用?

应用程序关闭时 Firebase 推送通知不起作用

Flutter - onLaunch 中的 Firebase 云消息导航不起作用

Flutter FCM 推送通知不起作用

应用程序关闭时,自定义声音在 Firebase 推送通知中不起作用

自定义声音推送通知不起作用(Flutter)