您会相信吗,当我搜索此结果时不会有一个结果。 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
。
有人可以阐明这些吗?具体来说,它们如何关联以及何时使用哪个。
答案 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框架,那么您将希望了解如何实现诸如UNNotification
和UNNotification
之类的类。
答案 1 :(得分:0)
application:didReceiveRemoteNotification:fetchCompletionHandler:
不被弃用。仍然需要处理后台通知(那些唤醒您的应用程序在后台执行操作的通知)。
UNUserNotificationCenter主要处理与UI相关的通知或操作,但仍无法处理后台通知。