Двойные уведомления в обмене сообщениями Flutter FirebaseAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Двойные уведомления в обмене сообщениями Flutter Firebase

Сообщение Anonymous »

Недавно я обновлен до firebase_messaging: ^10.0.0, когда приложение не работает, и если уведомление приходит, оно отображается дважды. Я изменил данные уведомления в коде после получения и отображения их. Даже тогда я вижу модифицированные и не модифицированные уведомления. Я не знаю, куда запускается это уведомление. Но когда приложение работает, он отображает уведомление только один раз (работает нормально). Вот мой код < /p>

Код: Выделить всё

/*main.dart*/
Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// If you're going to use other Firebase services in the background, such as Firestore,
// make sure you call `initializeApp` before using other Firebase services.
//await Firebase.initializeApp();

// await HomePageState.handleMessage(message);
String title="${message.notification!.title}";
String body="${message.notification!.body}";

_flutterLocalNotificationsPlugin.show(0, title, body, platformChannelSpecifics, payload: jsonEncode(message.data));

AppDatabase database= await $FloorAppDatabase.databaseBuilder(Constants.dataBaseName).addMigrations([migration1to2]).build();
if(!title.toLowerCase().contains("cancelled")){
var date=DateFormat("dd-MMM-yyyy hh:mm aa").format(DateTime.now());
NotificationModel notification=NotificationModel(title: title,message: body,read: 0,date: date);
await database.notificationDao.insertNotification(notification);
}

print("Handling a background message: ${message.messageId}");
}
Future main() async {
//this line make sure all the required widgets are loaded before main application starts
//SharedPreferences.setMockInitialValues({});
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();

var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_notification');
var initializationSettingsIOS = new IOSInitializationSettings(onDidReceiveLocalNotification: onDidReceiveLocalNotification);
//var initializationSettings = new InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);
var initializationSettings = new InitializationSettings(android: initializationSettingsAndroid,iOS: initializationSettingsIOS);
_flutterLocalNotificationsPlugin.initialize(initializationSettings,onSelectNotification: onSelectingNotification);

FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

//Initializing repository and carrying forward to avoid multiple instances of database
Repository _repository = Repository();

// runApp(BlocProvider(
//   create: (_) => ThemeBloc()..add(ThemeLoadStarted()),
//   child: MyApp(
//     repository: _repository,
//   ),
// ));
SentryOptions options=SentryOptions(dsn: APIs.sentryAPI);
final SentryClient _sentry = SentryClient(options);

Future _reportErrorToSentry(dynamic error, dynamic stackTrace) async {
// Print the exception to the console.
print('Caught error: $error');
await  _sentry.captureException(
error,
stackTrace: stackTrace,
);
}

runZonedGuarded(() async{
// runApp(BlocProvider(
//   create: (_) => ThemeBloc()..add(ThemeLoadStarted()),
//   child: MyApp(
//     repository: _repository,
//   ),
// ));

await SentryFlutter.init(
(options) => options.dsn = APIs.sentryAPI,
appRunner: () => runApp(BlocProvider(
create: (_) =>  ThemeBloc()..add(ThemeLoadStarted()),
child: MyApp(
repository: _repository,
),
)),
);
}, (error, stackTrace) {
print('runZonedGuarded: Caught error in my root zone.');
FirebaseCrashlytics.instance.recordError(error, stackTrace);
_reportErrorToSentry(error,stackTrace);
});

}
< /code>
application.kt
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingBackgroundService

class Application : FlutterApplication(), PluginRegistrantCallback {

override fun registerWith(registry: PluginRegistry) {
//FirebaseCloudMessagingPluginRegistrant.registerWith(registry)
FlutterLocalNotificationPluginRegistrant.registerWith(registry)
SqflitePluginRegistrant.registerWith(registry)
}
}
< /code>
firebasecloudmessagingpluginregistrant.kt, который я прокомментировал в Application.kt < /p>
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin
class FirebaseCloudMessagingPluginRegistrant {
companion object {
fun registerWith(registry: PluginRegistry) {
if (alreadyRegisteredWith(registry)) {
return
}
FlutterFirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"))
}

fun alreadyRegisteredWith(registry: PluginRegistry): Boolean {
val key = FirebaseCloudMessagingPluginRegistrant::class.java.name
if (registry.hasPlugin(key)) {
return true
}
registry.registrarFor(key)
return false
}
}
}
< /code>
android manifest.xml
































Эта проблема также находится в Android, а также только при приложении. Где я делаю не так?

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

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

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

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

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

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