Связь между ReceivedRemoteNotification и DidReceiveRemoteNotification - PullRequest
0 голосов
/ 18 октября 2018

Вы поверите, ни одного результата, когда я ищу это.API-интерфейсы Xamarin на developer.xamarin также не упоминают о какой-либо взаимосвязи между ними.

И чтобы сделать вещи еще более сложными, developer.apple говорит, что DidReceiveRemoteNotification устарела, но нет упоминания об этом устаревании для разработчика..xamarin.Более того, https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-xamarin-ios-get-started-push поможет вам в его использовании.

Так что теперь в миксе также есть WillPresentNotification.

Может кто-нибудь пролить свет на эти вопросы?В частности, как они связаны и какой использовать, когда.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

application:didReceiveRemoteNotification:fetchCompletionHandler: НЕ считается устаревшим.Все еще требуется обрабатывать фоновые уведомления (те, которые пробуждают ваше приложение, чтобы делать вещи в фоновом режиме).

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

0 голосов
/ 18 октября 2018

Я рекомендую прочесть о новом шаблоне дизайна. Apple имеет пост iOS 10+ для Пользовательские уведомления

Старые удаленные уведомления всегда обрабатывались протоколом / интерфейсом UIApplicationDelegate итак как ваш класс AppDelegate по умолчанию реализует этот протокол, обычной практикой является обработка входящих удаленных уведомлений оттуда с устаревшим

application:didReceiveRemoteNotification:fetchCompletionHandler:.

В iOS 10+ Apple абстрагировала уведомления в инфраструктуру UNUserNotificationCenter, и чтобы назначить делегата, вы должны назначить UNUserNotificationCenter.Current.Delegate либо для пользовательского класса, который подкачивает из UserNotificationCenterDelegate, либо, как я,Заставьте свой AppDelegate реализовать интерфейс и обрабатывать вещи там.

Вот как я мог бы реализовать вещи в Xamarin.iOS:

using Foundation
using UIKit;
using UserNotifications;

    public class AppDelegate : UIApplicationDelegate, IUNUserNotificationCenterDelegate
    {
        public override UIWindow Window { get; set; }

        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            UNUserNotificationCenter.Current.Delegate = this;
            return true;
        }

        [Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
        public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler)
        {
            //Handle Notification if user interacts with notification in Notification Center of iOS.
        }

        [Export("userNotificationCenter:willPresentNotification:withCompletionHandler:")]
        public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, System.Action<UNNotificationPresentationOptions> completionHandler)
        {
            //Handle Notification if app is in the foreground when recieved.
        }
    }

Конечно, вы захотите взглянуть на User Notifications framework, чтобы увидеть, как реализоватьклассы, такие как UNNotification и UNNotification, если вы не знакомы с этими классами.

...