Обмен сообщениями Firebase вызывает ANR при получении уведомления в приложении Flutter (даже с минимальным обработчиком)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обмен сообщениями Firebase вызывает ANR при получении уведомления в приложении Flutter (даже с минимальным обработчиком)

Сообщение Anonymous »

Я работаю над проектом Flutter, в котором настроил уведомления с помощью Firebase Messaging. До недавнего времени все работало идеально. После долгого возвращения в проект и повторного запуска кода приложение вылетает с сообщением ANR (приложение не отвечает) при получении уведомления.
Уведомление получено, и обработчик переднего плана получает данные, но затем приложение немедленно завершает работу.
После отладки я понял, что после получения уведомления что-то обрабатывается долго, что, вероятно, и приводит к сбою.
Для дальнейшего расследования я удалил все тяжелые задачи и оставил внутри обработчика только простой журнал печати, но сбой все равно происходит.
Вот сообщение об ошибке, отображаемое при сбое приложения:
ANR in com.company
PID: 24618
Reason: Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=com.company cmp=com.company/uk.orth.push.FirebaseMessagingReceiver (has extras) }
ErrorId: f29624e4-05d6-4b28-960f-81a2550b55eb
Frozen: false
Load: 3.89 / 3.9 / 3.99

Далее следуют другие статистические данные по памяти и процессору, которые, похоже, указывают на нагрузку на систему, но я больше не делаю ничего интенсивного в обработчике. Однако сбой продолжается.
Теперь я застрял и не знаю, что делать дальше.
Если кто-то сталкивался с подобной проблемой или знает, что может быть ее причиной, подскажите, как ее исправить.
вот код, вызывающий ошибку (фактический код отличается, но для этого кода он не работает)
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';

// This is the background message handler. This should be run on a background isolate.
Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
print("Handling a background message: ${message.messageId}");

// Perform background processing here, but ensure no UI updates happen here.
// You can log data, fetch data, or update your database.
}

void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();

// Register the background message handler
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

runApp(MyApp());
}

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;

@override
void initState() {
super.initState();

// Request notification permissions for iOS
_firebaseMessaging.requestPermission();

// Handle foreground messages
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print("Received message while the app is in the foreground: ${message.messageId}");

// Handle foreground notification here (e.g., show a dialog, update UI)
if (message.notification != null) {
print("Notification title: ${message.notification!.title}");
print("Notification body: ${message.notification!.body}");
}
});

// Handle message when the app is resumed from background (user taps on notification)
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print("Message clicked! Opening app...");
// Perform navigation or specific actions on notification tap
});

// Get the FCM token (to register the device for notifications)
_firebaseMessaging.getToken().then((String? token) {
print("FCM Token: $token");
});
}

@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter FCM Demo',
home: Scaffold(
appBar: AppBar(
title: Text("Flutter FCM Demo"),
),
body: Center(child: Text("Push Notification Example")),
),
);
}
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... -even-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»