Flutter 2.0 с Firebase Cloud Messaging: onMessage не вызывается на Android

У меня проблема с Firebase Cloud Messaging onMessage во Flutter 2.0.

Функция

FirebaseMessaging.onMessage.listen((RemoteMessage message) { ... }

не вызывается при получении сообщения на переднем плане. Однако журналы говорят

трансляция получена для сообщения

При первом полученном сообщении я получаю дополнительные предупреждения, например:

Доступ к скрытому методу Landroid / os / WorkSource

Но предупреждения исчезают в последующих сообщениях.

Самое смешное , что

FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

работает.

Если я отправляю приложение в фоновый режим, я получаю уведомление и вызывается определенный метод.

Код

      @override
void initState() {
    initializeFlutterFire()
        .then((value) => subscribeToMessages);

    super.initState();
}

Future<void> initializeFlutterFire() async {
    try {
        Firebase.initializeApp();
        setState(() {
            _initialized = true;
            print("Firebase has been initialized");
        });
    } catch (e) {
       setState(() {
           _error = true;
       });
    }
}

void subscribeToMessages() {
    // The following handler is called, when App is in the background.
    FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

    // The following function is not called, when a message was received by the device.
    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        print('Got a message whilst in the foreground!');
        print('Message data: ${message.data}');

        if (message.notification != null) {
            print('Message also contained a notification: ${message.notification}');
        }
    });
}

Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
    print('message from background handler');
    print("Handling a background message: ${message.messageId}");
}

У меня такое ощущение, что подписки от onMessage (). Listen(...) нет и поэтому ничего не выполняется.

Есть ли у вас предложения, что я делаю не так?

Заранее спасибо, Уве

Среда

Обмен сообщениями Firebase Console Cloud

на

Huawei P20 и Samsung Galaxy Tab A 10, оба на Android 10.

pubspec.yaml

      firebase_core: "^1.0.1"
firebase_messaging: "^9.0.0"

android / build.gradle

      dependencies {
    ...
    classpath 'com.google.gms:google-services:4.3.5'

Android / приложение / build.gradle

      apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
...

android {
    compileSdkVersion 30
    ...
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 30
        ...

AndroidManifest.xml

      <activity ...>
    ...
    <intent-filter>
        <action android:name="FLUTTER_NOTIFICATION_CLICK" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</activity>

трепещущий доктор

      Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, 2.0.2, on macOS 11.2.1 20D75 darwin-x64, locale de)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[!] Xcode - develop for iOS and macOS
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
    Download at: https://developer.apple.com/xcode/download/
    Or install Xcode via the App Store.
    Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
        sudo xcodebuild -runFirstLaunch
[✓] Chrome - develop for the web
[✓] Android Studio
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Community Edition (version 2020.1.2)
[✓] VS Code (version 1.53.0)
[✓] Connected device (3 available)

! Doctor found issues in 1 category.

2 ответа

У меня была точно такая же проблема. Сразу после

      await Firebase.initializeApp();

Я добавил эту строку:

      await FirebaseMessaging.instance.getToken();

в моем main.dart и включен API обмена сообщениями в приложении Firebase на облачной консоли Google

Возникла проблема с плагином firebase_messaging 9.0.0.

Если вы перейдете к определению фабрики RemoteMessage.fromMap () с помощью Cmd+Click или Ctrl+Click при наведении курсора мыши на класс RemoteMessage), в операторе return измените

      contentAvailable: map['contentAvailable'], 
mutableContent: map['mutableContent'],

к

      contentAvailable: map['contentAvailable'] ?? false,
to mutableContent: map['mutableContent'] ?? false,

Возможно, вам придется подтвердить, что вы хотите изменить пакет. Это должно помочь вам до тех пор, пока пакет не будет обновлен.

Другие вопросы по тегам