用于 Flutter 的 Firebase 云消息传递 - 可选择处理后台消息错误

Posted

技术标签:

【中文标题】用于 Flutter 的 Firebase 云消息传递 - 可选择处理后台消息错误【英文标题】:Firebase Cloud Messaging for Flutter - Optionally handle background messages ERROR 【发布时间】:2020-05-15 06:26:09 【问题描述】:

我想将此字段添加到我的项目中,但出现错误。 https://pub.dev/packages/firebase_messaging#optionally-handle-background-messages

我想在我的应用程序中使用 Firebase 通知。我为此添加了 Aplication.java。添加此文件后,注册表一词带有红色下划线。

GeneratedPluginRegistrant.registerWith(registry);

错误:

\live_chat\android\app\src\main\java\com\**PACKAGENAME**\**APPNAME**\Application.java:18: error: incompatible types: PluginRegistry cannot be converted to FlutterEngine
    GeneratedPluginRegistrant.registerWith(registry);
                                           ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BU�LD FAILED in 3s
Finished with error: Gradle task assembleDebug failed with exit code 1

APPNAME/android/app/src/main/java/app-organization-path/Application.java:

package **PACKAGENAME**;

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);
    

【问题讨论】:

【参考方案1】:

请确保您这样做:

1 - Application.java 类添加到与您的 MainActivity.java 位于相同目录中的应用程序中。

2- AndroidManifest.xml

中应用程序的名称属性(与您的包相同)
<application android:name=".Application">

3-对于我之前遇到过这个问题的重新喜爱的 FlutterFirebaseMessagingService,在依赖项中的 android 应用构建 gradle 文件中添加最后一个版本的 firebase-messaging

implementation 'com.google.firebase:firebase-messaging:20.1.0'

然后同步android项目并尝试构建flutter应用

【讨论】:

我为此添加了 Aplication.java。添加此文件后,注册表一词带有红色下划线。 GeneratedPluginRegistrant.registerWith(registry); ok 尝试打开android项目(打开application.java并在android studio中点击open进行编辑)并与gradle同步并运行它 确保您正确导入 GeneratedPluginRegistrant 包,删除所有导入并重新导入自动 如果不行,试试这行: GeneratedPluginRegistrant.registerWith(new ShimPluginRegistry(flutterEngine)); 对不起,我无法想象为什么问题仍然存在,尝试显示这个问题并回答github.com/FirebaseExtended/flutterfire/issues/1467【参考方案2】:

这是具有所需修复的代码,也是用 Kotlin 编写的。

package YOUR.PACKAGE.NAME

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

class Application: FlutterApplication(), PluginRegistrantCallback 

    override fun onCreate() 
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this)
    

    override fun registerWith(registry: PluginRegistry) 
        FirebaseMessagingPlugin.registerWith(
            registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin")
        );
    


【讨论】:

以上是关于用于 Flutter 的 Firebase 云消息传递 - 可选择处理后台消息错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flutter 测试 Firebase 云消息传递

Flutter - Firebase 云消息传递,iOS 上未收到数据消息

带有 Firebase 云消息传递的 Flutter 2.0:onMessage 未在 Android 上调用

如何在 Flutter 中删除 Firebase 云消息传递令牌

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

将自定义数据从 Firebase 云消息传递控制台显示到 Flutter 应用程序?