Xamarin Forms - приложение, открытое из push-уведомлений, - изменение свойства Bound не влияет - PullRequest
0 голосов
/ 05 июня 2018

У меня есть ViewModel, который прослушивает push-уведомления и устанавливает bool в true, когда он его получает.Когда значение bool равно true, значок в соответствующем представлении становится красным.

Когда приложение находится на переднем плане и получает толчок, оно работает, как и ожидалось.Однако, когда приложение находится в фоновом режиме и открывается через уведомление, цвета значков не меняются.

Здесь код:

Disposables
    .Add(pushService
         .NewMessage
         .SubscribeOn(_schedulerProvider.Background)
         .ObserveOn(_schedulerProvider.Foreground)
         .Subscribe(_ => HasNewMessages = true, LogError));

В попытке понять, что происходитЯ сделал:

Disposables
    .Add(pushService
         .NewMessage
         .SubscribeOn(_schedulerProvider.Background)
         .ObserveOn(_schedulerProvider.Foreground)
         .Subscribe(async _ => 
         {
             await _navigationService.DisplayAlert("push", "push", "ok");
             HasNewMessages = true;
         }, LogError));

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

ОБНОВЛЕНИЕ

Я подумал, что, возможно, по причинам, которые я не мог понять, когда приложение было открыто из уведомления, наблюдение за событием не происходило в потоке пользовательского интерфейса, поэтому я попробовал следующее, но, конечно, это не было проблемой.

Disposables
    .Add(pushService
         .NewMessage
         .SubscribeOn(_schedulerProvider.Background)
         .Subscribe(_ => Device.BeginInvokeOnMainThread(() => HasNewMessages = true), LogError));

Также обратите внимание, что после того, как приложение было открыто с помощью уведомления, оно больше не «реагирует» на уведомление, когда находится на переднем плане.

1 Ответ

0 голосов
/ 05 июня 2018

Код мой вопрос в порядке.Проблема была с:

protected override void OnResume() { ImageService.Instance.SetExitTasksEarly(false); }

Моя иконка (та, которая должна стать красной) - это Svg от (великого) FFImageLoading , и вышеупомянутый вызов предотвращал ее (каким-то образом) от изменения цвета.Как только я удалил это переопределение, все заработало как положено.

...