我需要使用UNUserNotificationCenterDelegate中的iOS 10功能。如何在c#/ Xamarin中实现此委托?
答案 0 :(得分:5)
使用UNUserNotificationCenterDelegate
时,请确保使用应用程序WillFinishLaunching
中的FinishedLaunching
或UIApplicationDelegate
方法进行分配。
您必须在应用完成启动之前将您的委托对象分配给UNUserNotificationCenter对象。
参考:UNUserNotificationCenterDelegate
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert, (approved, err) =>
{
// Handle the user approval or refusal of your notifications...
});
UNUserNotificationCenter.Current.Delegate = new MyUNUserNotificationCenterDelegate();
return true;
}
在该示例中,我正在创建/分配名为MyUNUserNotificationCenterDelegate
的委托类,因此您需要实现该类。
此UNUserNotificationCenterDelegate
示例将捕获发送的每个本地通知,并在锁定屏幕上显示或将详细信息输出到系统日志之间切换。
public class MyUNUserNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
bool toggle;
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
if (toggle)
completionHandler(UNNotificationPresentationOptions.Alert);
else
{
Console.WriteLine(notification);
completionHandler(UNNotificationPresentationOptions.None);
}
toggle = !toggle;
}
}
现在您实际上需要发送一些通知,这会设置一个简单的重复通知:
// Schedule a repeating Notification...
var content = new UNMutableNotificationContent();
content.Title = new NSString("From SushiHangover");
content.Body = new NSString("StackOverflow rocks");
content.Sound = UNNotificationSound.Default;
var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(timeInterval: 60, repeats: true);
var request = UNNotificationRequest.FromIdentifier(identifier: "FiveSecond", content: content, trigger: trigger);
UNUserNotificationCenter.Current.AddNotificationRequest(request, (NSError error) =>
{
if (error != null) Console.WriteLine(error);
});
每60秒发送一次通知,如果您在锁定屏幕上,您将每隔120秒收到一次警报......
iOS使用Objective-C委托来实现委托模式,其中一个对象将工作传递给另一个对象。完成工作的对象是第一个对象的委托。一个对象通过在某些事情发生后发送消息来告诉其委托来完成工作。在Objective-C中发送这样的消息在功能上等同于在C#中调用方法。委托实现方法以响应这些调用,从而为应用程序提供功能。