你相信吗,当我搜索这个时,没有一个结果。developer.xamarin上的Xamarin API也没有提到两者之间的任何关系。
更复杂的是,developer.apple表示DidReceiveRemoteNotification
已被弃用,但在developer.xamarin上没有提到这种弃用。此外,https://learn.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-xamarin-ios-get-started-push 指导您使用它。
所以现在也有WillPresentNotification
。有人可以解释一下这些吗?具体来说,它们是如何相关的,以及何时使用哪一个。
我建议阅读苹果发布iOS 10 +用于用户通知的新设计模式
过去的远程通知始终由UIApplicationDelegate
协议/接口处理,并且由于您的AppDelegate
类默认实现该协议,因此通常的做法是处理来自那里的传入远程通知,现在没有使用那么多
application:didReceiveRemoteNotification:fetchCompletionHandler:
.
在iOS 10+中,苹果将通知抽象到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.
}
}
当然,如果您不熟悉这些类,则需要查看用户通知框架,了解如何实现UNNotification
和UNNotification
响应等类。
application:didReceiveRemoteNotification:fetchCompletionHandler:
不被弃用。它仍然需要处理后台通知(唤醒应用以在后台执行操作的通知(。
UNUser通知中心主要处理与UI相关的通知或操作,但仍然无法处理后台通知。