Flutter: инициализация сообщений Firebase из кода не удалась - PullRequest
0 голосов
/ 06 марта 2020

Моя цель - использовать облачные сообщения Firebase в моем приложении. Для меня необходимо настроить приложение firbase на значения, предоставленные во время выполнения (это означает, что я не могу использовать «google-service. json»). Плагины, которые я использую:

Плагин для обмена сообщениями, похоже, не имеет способа инициализации таким способом. Плагин 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): 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...