# #xamarin #xamarin.forms #firebase-cloud-messaging
Вопрос:
У меня возникла проблема, которую я пытался решить разными способами, но безуспешно. Всякий раз, когда вы получаете сообщение через CrossFirebasePushNotification.Текущий.OnNotificationReceived Я получаю полезную нагрузку и могу ее прочитать, но я не могу сделать ничего «визуального» в своем приложении. Другими словами, я получаю уведомление, но когда я хочу либо перенаправить на другую страницу, либо даже отобразить сообщение DisplayAlert, ничего не происходит. Центр сообщений может быть получен, но любые инструкции в рамках процедуры, связанные с перенаправлением или отображением (что-либо, изменяющее пользовательский интерфейс, который он отображает), выполняться не будут. Ищу помощь в том, как визуально показать в приложении, что пользователь получил сообщение.
Это в файле MainShell.xaml.cs (я также поместил его в App.xaml.cs тоже):
CrossFirebasePushNotification.Current.OnNotificationReceived = (s, p) =>
{
System.Diagnostics.Debug.WriteLine("Received"); // this works
foreach (var data in p.Data)
{
System.Diagnostics.Debug.WriteLine($"{data.Key} : {data.Value}"); // this works
}
//TODO: Code to determine if user is signed in
if (true)
{
System.Diagnostics.Debug.WriteLine("Debug: Goto Registration page from MainShell"); // this works
//Task.Run(async () => await Shell.Current.GoToAsync("registration")); // this does not work (just ignores it and doesn't fire constructor)
//Task.Run(async () => await Current.DisplayAlert("Request Received", "A message is waiting...", "Ok")); // this does not work
MessagingCenter.Send(this, "RequestReceived"); // this works, the receiver will display debug info, but will not redirect nor display any UI messages or interact with the UI.
}
};
Спасибо вам за любую помощь или руководство,
Роберт
Комментарии:
1. вам необходимо использовать MainThread, чтобы убедиться, что операции пользовательского интерфейса выполняются в потоке пользовательского интерфейса. Смотрите документы Xamarin Essentials
2. Спасибо за предупреждение, я только что обнаружил это решение вскоре после этого. Приятно знать, что я двигался в правильном направлении. Добавил его в App.xaml.cs, и все работает так, как ожидалось.