Моя цель - использовать облачные сообщения Firebase в моем приложении. Для меня необходимо настроить приложение firbase на значения, предоставленные во время выполнения (это означает, что я не могу использовать «google-service. json»). Плагины, которые я использую:
- firebase_messaging: ^ 6.0.9 | github: ссылка
- firebase_core: ^ 0.4.4 | github: ссылка
Плагин для обмена сообщениями, похоже, не имеет способа инициализации таким способом. Плагин 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):