ReceivedRemoteNotification 和 DidReceiveRemoteNotification 之间



你相信吗,当我搜索这个时,没有一个结果。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.
}
}

当然,如果您不熟悉这些类,则需要查看用户通知框架,了解如何实现UNNotificationUNNotification响应等类。

application:didReceiveRemoteNotification:fetchCompletionHandler:不被弃用。它仍然需要处理后台通知(唤醒应用以在后台执行操作的通知(。

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

相关内容

  • 没有找到相关文章

最新更新