【问题标题】:Flutter: Initialize firebase messaging from code failsFlutter:从代码初始化firebase消息失败
【发布时间】:2020-06-19 06:42:17
【问题描述】:

我的目标是在我的 Flutter 应用中使用 Firebase 云消息传递。我的一个要求是使用运行时提供的值配置 firbase 应用程序(这意味着我不能使用“google-service.json”)。我使用的插件有:

  • firebase_messaging:^6.0.9 | github:link
  • firebase_core:^0.4.4 | github:link

消息插件似乎没有办法以这种方式初始化。插件 firebase_core 支持从代码初始化,但遗憾的是消息插件似乎忽略了这一点。另外我根本找不到任何关于如何使用 firebase_core 的文档,而且 github 上提供的示例也不是很有用。

初始化示例代码:

 // From firebase_core:
 String name = "example";
    FirebaseOptions options = FirebaseOptions(
      googleAppID: config.appID,
      apiKey: config.apiKey,
      databaseURL: "https://" + config.projectID + ".firebaseio.com",
      storageBucket: config.projectID + ".appspot.com",
      projectID: config.projectID,
      gcmSenderID: config.projectNumber,
    );

    await FirebaseApp.configure(
      name: name,
      options: options,
    );

    // From firebase_messaging:

    // FIXME make firebase_messaging use the configured app above.
    FirebaseMessaging firebaseMessaging = FirebaseMessaging();

    await firebaseMessaging.requestNotificationPermissions();

    firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );

    firebaseMessaging.getToken().then((token) {
      print("FCM token: $token");
    });

执行时会抛出以下错误:

E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234): Failed to handle method call
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234): java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@19.2.0:183)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.google.firebase.iid.FirebaseInstanceId.getInstance(com.google.firebase:firebase-iid@@20.0.1:1)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.onMethodCall(FirebaseMessagingPlugin.java:185)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:231)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:93)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:642)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.os.MessageQueue.next(MessageQueue.java:386)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.os.Looper.loop(Looper.java:175)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.app.ActivityThread.main(ActivityThread.java:7625)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234): Failed to handle method call
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234): java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@19.2.0:183)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.google.firebase.iid.FirebaseInstanceId.getInstance(com.google.firebase:firebase-iid@@20.0.1:1)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.onMethodCall(FirebaseMessagingPlugin.java:237)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:231)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:93)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:642)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.os.MessageQueue.next(MessageQueue.java:386)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.os.Looper.loop(Looper.java:175)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at android.app.ActivityThread.main(ActivityThread.java:7625)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
E/MethodChannel#plugins.flutter.io/firebase_messaging( 8234):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
E/flutter ( 8234): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first., null)
E/flutter ( 8234): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter ( 8234): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
E/flutter ( 8234): <asynchronous suspension>
E/flutter ( 8234): #2      FirebaseMessaging.configure (package:firebase_messaging/firebase_messaging.dart:114:14)
E/flutter ( 8234): #3      _MainScreenState._initFirebase (package:app/screens/main_screen.dart:271:23)
E/flutter ( 8234): #4      _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:73:64)
E/flutter ( 8234): #5      _rootRunUnary (dart:async/zone.dart:1134:38)
E/flutter ( 8234): #6      _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter ( 8234): #7      _FutureListener.handleValue (dart:async/future_impl.dart:139:18)
E/flutter ( 8234): #8      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:680:45)
E/flutter ( 8234): #9      Future._propagateToListeners (dart:async/future_impl.dart:709:32)
E/flutter ( 8234): #10     Future._addListener.<anonymous closure> (dart:async/future_impl.dart:389:9)
E/flutter ( 8234): #11     _rootRun (dart:async/zone.dart:1126:13)
E/flutter ( 8234): #12     _CustomZone.run (dart:async/zone.dart:1023:19)
E/flutter ( 8234): #13     _CustomZone.runGuarded (dart:async/zone.dart:925:7)
E/flutter ( 8234): #14     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:965:23)
E/flutter ( 8234): #15     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter ( 8234): #16     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
E/flutter ( 8234): 
E/flutter ( 8234): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first., null)
E/flutter ( 8234): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter ( 8234): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
E/flutter ( 8234): <asynchronous suspension>
E/flutter ( 8234): #2      FirebaseMessaging.getToken (package:firebase_messaging/firebase_messaging.dart:150:27)
E/flutter ( 8234): #3      _MainScreenState._initFirebase (package:app/screens/main_screen.dart:283:23)
E/flutter ( 8234): #4      _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:73:64)
E/flutter ( 8234): #5      _rootRunUnary (dart:async/zone.dart:1134:38)
E/flutter ( 8234): #6      _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter ( 8234): #7      _FutureListener.handleValue (dart:async/future_impl.dart:139:18)
E/flutter ( 8234): #8      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:680:45)
E/flutter ( 8234): #9      Future._propagateToListeners (dart:async/future_impl.dart:709:32)
E/flutter ( 8234): #10     Future._addListener.<anonymous closure> (dart:async/future_impl.dart:389:9)
E/flutter ( 8234): #11     _rootRun (dart:async/zone.dart:1126:13)
E/flutter ( 8234): #12     _CustomZone.run (dart:async/zone.dart:1023:19)
E/flutter ( 8234): #13     _CustomZone.runGuarded (dart:async/zone.dart:925:7)
E/flutter ( 8234): #14     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:965:23)
E/flutter ( 8234): #15     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter ( 8234): #16     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
E/flutter ( 8234): 

【问题讨论】:

    标签: firebase flutter firebase-cloud-messaging


    【解决方案1】:

    关注this link即可配置。配置完成后,如果仍然出错,请卸载应用程序并重新安装它。

    【讨论】:

    • 请写下您的解决方案作为答案的一部分
    猜你喜欢
    • 2018-05-23
    • 2019-04-23
    • 2021-08-25
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2022-10-16
    相关资源
    最近更新 更多