Тост-уведомления не работают на XF Android 8.0 / 1 - PullRequest
0 голосов
/ 12 ноября 2018

У меня кроссплатформенное приложение XF.

Я использую Toast.Forms для отправки уведомлений локальных приложений, плагин работает как на iOS, так и на Android. В iOS он работает отлично, но в Android он работает только для версий ниже 7.1, для oreo 8.0 или 8.1 (> API 26) он больше не работает.

Вот мой класс тостов:

internal class ToastService : IToastService
{
    private readonly IAppDeviceDependency _DeviceDependency;

    public ToastService([NotNull] IAppDeviceDependency deviceDependency)
    {
        _DeviceDependency = deviceDependency ?? throw new ArgumentNullException(nameof(deviceDependency));
    }

    public void ShowToast(string title, string description, bool isClickable, bool clearFromHistory)
    {
        DeviceToastProvider.ShowToast(title, description, isClickable, clearFromHistory);
    }

    private IToastProvider DeviceToastProvider => _DeviceDependency.Get<IToastProvider>();
}

Поставщик Android-тостов:

[assembly: Dependency(typeof(AndroidToastProvider))]

namespace MyApp.Droid.Providers
{
public class AndroidToastProvider : IToastProvider
{
    public async void ShowToast(string title, string description, bool isClickable, bool clearFromHistory)
    {
        var notificator = DependencyService.Get<IToastNotificator>();
        await notificator.Notify(new NotificationOptions
        {
            Title = title,
            Description = description,
            IsClickable = isClickable,
            ClearFromHistory = clearFromHistory
        });
    }
}
}

Провайдер яблочных тостов

[assembly: Dependency(typeof(AppleToastProvider))]
namespace MyApp.iOS.Providers
{
public class AppleToastProvider : IToastProvider
{
    public async void ShowToast(string title, string description, bool isClickable, bool clearFromHistory)
    {
        var notificator = DependencyService.Get<IToastNotificator>();
        await notificator.Notify(new NotificationOptions
        {
            Title = title,
            Description = description,
            IsClickable = isClickable,
            ClearFromHistory = clearFromHistory
        });
    }
}
}

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Нашел решение проблемы. По-видимому, я компилировал с использованием Android версии 7.1, которая не поддерживает новый канал уведомлений Android Oreo 8.0. Сейчас я компилирую с использованием Android 8.1 (Oreo), я обновил Toast.plugin до последней версии, и он прекрасно работает на всех версиях ниже Android 8.1

Подробнее о проблеме можно узнать здесь: https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/notifications/local-notifications

0 голосов
/ 12 ноября 2018

Android 8 требует, чтобы уведомления имели назначенный им канал для отображения (см. Подробнее здесь: https://developer.android.com/guide/topics/ui/notifiers/notifications). Если ваш плагин не поддерживает, вы можете попросить авторов обновить его надлежащим образом или вы может создавать свой собственный код с использованием нативных API.

...