【问题标题】:Unable to create service io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService无法创建服务 io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
【发布时间】:2021-03-02 12:52:22
【问题描述】:

我已经将我的颤振应用程序与 firebase 消息集成并成功接收到通知并且一切正常,但是现在当我尝试再次运行该项目时它显示错误并且当我向设备发送通知时它停止了。

错误

D/AndroidRuntime( 8359): Shutting down VM
E/AndroidRuntime( 8359): FATAL EXCEPTION: main
E/AndroidRuntime( 8359): Process: com.tapfy.me, PID: 8359
E/AndroidRuntime( 8359): java.lang.RuntimeException: Unable to create service io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService: java.lang.RuntimeException: PluginRegistrantCallback is not set.
E/AndroidRuntime( 8359):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:4204)
E/AndroidRuntime( 8359):    at android.app.ActivityThread.access$1500(ActivityThread.java:237)
E/AndroidRuntime( 8359):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
E/AndroidRuntime( 8359):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 8359):    at android.os.Looper.loop(Looper.java:223)
E/AndroidRuntime( 8359):    at android.app.ActivityThread.main(ActivityThread.java:7656)
E/AndroidRuntime( 8359):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 8359):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/AndroidRuntime( 8359):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
E/AndroidRuntime( 8359): Caused by: java.lang.RuntimeException: PluginRegistrantCallback is not set.
E/AndroidRuntime( 8359):    at io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService.startBackgroundIsolate(FlutterFirebaseMessagingService.java:157)
E/AndroidRuntime( 8359):    at io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService.onCreate(FlutterFirebaseMessagingService.java:77)
E/AndroidRuntime( 8359):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:4192)
E/AndroidRuntime( 8359):    ... 8 more
I/Process ( 8359): Sending signal. PID: 8359 SIG: 9

【问题讨论】:

    标签: java android firebase flutter


    【解决方案1】:

    创建新的应用程序类

    class Application : FlutterApplication(), PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this)
    }
    
    override fun registerWith(registry: PluginRegistry?) {
        io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
    }
    

    }

    更改您的清单

    <application
        android:name=".Application"
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 Flutter Android Embedding V2(Flutter 版本 >= 1.12),则不需要额外的集成步骤。但是对于 V1,您需要进行编辑。

      应用类:

      // ...
      import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingBackgroundService;
      
      public class Application extends FlutterApplication implements 
      PluginRegistrantCallback {
        // ...
        @Override
        public void onCreate() {
          super.onCreate();
        
          FlutterFirebaseMessagingBackgroundService
                    .setPluginRegistrant(this);
        }
      
        @Override
        public void registerWith(PluginRegistry registry) {
          GeneratedPluginRegistrant.registerWith(registry);
        }
        // ...
      }
      

      Android Manifest.xml:

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

      Link 获取官方文档。

      【讨论】: