Локальное уведомление Pu sh не работает в Xamarin iOS - PullRequest
0 голосов
/ 19 марта 2020

Я использую Xamarin.forms и внедрил локальное уведомление pu sh для iOS. Он успешно работает, когда я отлаживаю приложение с помощью Visual Studio, даже когда приложение свернуто, приложение может получать уведомления. Но при запуске приложения напрямую, без отладки в Visual Studio, приложение не может отображать уведомление. Пожалуйста, наведите меня на это.

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

Я уже выбрал Свойство «Фоновая выборка» в разделе «Фоновые режимы» в Info.plist. Я также добавил ниже строки в моем методе FinishedLaunching

UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);

Полная реализация кода выглядит так:

   public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        try
        {
            UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);

            try
            {                    

                if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
                {
                    UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert |
                        UNAuthorizationOptions.Sound |
                        UNAuthorizationOptions.Sound,
                        (granted, error) =>
                        {
                            if (granted)
                            {
                                InvokeOnMainThread(UIApplication.SharedApplication.RegisterForRemoteNotifications);                                    
                            }
                        });
                }
                else if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
                {
                    var pushSettings = UIUserNotificationSettings.GetSettingsForTypes(
                    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                    new NSSet());

                    UIApplication.SharedApplication.RegisterUserNotificationSettings(pushSettings);
                    UIApplication.SharedApplication.RegisterForRemoteNotifications();
                }
                else
                {
                    UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
                    UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes);
                }

                bool IsRegistered = UIApplication.SharedApplication.IsRegisteredForRemoteNotifications;
            }
            catch (Exception ex)
            {
                UIAlertView avAlert = new UIAlertView("FinishedLaunching Push Notification Exception", ex.Message, null, "OK", null);
                avAlert.Show();
            }

            UNUserNotificationCenter.Current.Delegate = new UserNotificationCenterDelegate();

            LoadApplication(new MessengerClient.App());

        }
        catch (Exception ex)
        {
            NativeHelper.SendUnhandledException(ex, NativeHelper.iOS + ": FinishedLaunching");
        }
        return base.FinishedLaunching(app, options);
    }

    public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
    {  
        /// reset our badge
        UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;

        /// Cancel/clear all Local notifications fronm the tray.
        UIApplication.SharedApplication.CancelLocalNotification(notification);

        /// Cancel/clear all notifications fronm the tray.
        UIApplication.SharedApplication.CancelAllLocalNotifications();
    }

Код для отображения уведомления приведен ниже.

UILocalNotification notification = new UILocalNotification();
        notification.FireDate = NSDate.FromTimeIntervalSinceNow(1);
        notification.AlertAction = title;
        notification.AlertBody = content;
        notification.AlertTitle = title;
        notification.SoundName = UILocalNotification.DefaultSoundName;
        notification.ApplicationIconBadgeNumber = 1;            
        UIApplication.SharedApplication.ScheduleLocalNotification(notification);

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

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете проверить с помощью этого Уведомления в Xamarin. iOS.

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

Приложение может обработать уведомление по-разному. Например, приложение может просто отображать предупреждение, чтобы напомнить пользователям о каком-либо событии. Либо уведомление может использоваться для отображения предупреждения пользователю о завершении процесса, например синхронизации файлов с сервером.

В следующем коде показано, как обрабатывать локальное уведомление, отображать предупреждение и сбрасывать номер значка до нуля:

public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
    // show an alert
    UIAlertController okayAlertController = UIAlertController.Create(notification.AlertAction, notification.AlertBody, UIAlertControllerStyle.Alert);
    okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

    Window.RootViewController.PresentViewController(okayAlertController, true, null);

    // reset our badge
    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}

Кроме того , есть образец , который вы можете загрузить для проверки. Это работает независимо от того, Отладка или Релиз Модель на моем локальном сайте (iOS 13.3).

enter image description here

Эффект:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...