ReceivedRemoteNotification和DidReceiveRemoteNotification之间的关系

时间:2018-10-18 09:19:31

标签: push-notification xamarin.ios remote-notifications

您会相信吗,当我搜索此结果时不会有一个结果。 developer.xamarin上的Xamarin API均未提及两者之间的任何关系。

为了使事情变得更加复杂,developer.apple说DidReceiveRemoteNotification已过时,但在developer.xamarin上没有提及此过时。此外,https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-xamarin-ios-get-started-push指导您使用它。

所以现在也有WillPresentNotification

有人可以阐明这些吗?具体来说,它们如何关联以及何时使用哪个。

2 个答案:

答案 0 :(得分:1)

我建议您阅读苹果公司针对User Notifications发布了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框架,那么您将希望了解如何实现诸如UNNotificationUNNotification之类的类。

答案 1 :(得分:0)

application:didReceiveRemoteNotification:fetchCompletionHandler:不被弃用。仍然需要处理后台通知(那些唤醒您的应用程序在后台执行操作的通知)。

UNUserNotificationCenter主要处理与UI相关的通知或操作,但仍无法处理后台通知。