Xamarin iOS 中的可操作推送通知
Posted
技术标签:
【中文标题】Xamarin iOS 中的可操作推送通知【英文标题】:Actionable push notification in Xamarin iOS 【发布时间】:2019-12-11 09:35:14 【问题描述】: var acceptAction = UNNotificationAction.FromIdentifier("AcceptAction", "Accept", UNNotificationActionOptions.None);
var declineAction = UNNotificationAction.FromIdentifier("DeclineAction", "Decline", UNNotificationActionOptions.None);
// Create category
var meetingInviteCategory = UNNotificationCategory.FromIdentifier("MeetingInvitation",
new UNNotificationAction[] acceptAction, declineAction , new string[] , UNNotificationCategoryOptions.CustomDismissAction);
// Register category
var categories = new UNNotificationCategory[] meetingInviteCategory ;
UNUserNotificationCenter.Current.SetNotificationCategories(new NSSet<UNNotificationCategory>(categories));
如何接收自定义的可操作推送通知以及需要将上述代码放在哪个文件中?
【问题讨论】:
应用程序启动后,应通过将上述代码添加到 AppDelegate 的 FinishedLaunching 方法并设置所需的通知类型 (UNAuthorizationOptions) 来请求通知权限。检查docs.microsoft.com/en-us/xamarin/ios/platform/… 我会把它作为答案发布,你能接受吗?会帮助更多的人。 【参考方案1】:在 iOS 应用程序可以向用户发送通知之前,应用程序必须在系统中注册,并且由于通知是对用户的中断,因此应用程序必须在发送通知之前明确请求权限。
应在应用启动后立即请求通知权限,方法是将以下代码添加到 AppDelegate 的 FinishedLaunching 方法并设置所需的通知类型 (UNAuthorizationOptions):
...
using UserNotifications;
...
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
....
//after iOS 10
if(UIDevice.CurrentDevice.CheckSystemVersion(10,0))
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
center.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.UNAuthorizationOptions.Badge, (bool arg1, NSError arg2) =>
);
center.Delegate = new NotificationDelegate();
else if(UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
var settings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert| UIUserNotificationType.Badge| UIUserNotificationType.Sound,new NSSet());
UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
return true;
iOS 10 的新功能,当应用程序在前台并触发通知时,它可以以不同的方式处理通知。通过提供一个 UNUserNotificationCenterDelegate 并实现 UserNotificationCenter 方法,应用程序可以接管显示通知的责任。例如:
using System;
using ObjCRuntime;
using UserNotifications;
namespace xxx
public class NotificationDelegate:UNUserNotificationCenterDelegate
public NotificationDelegate()
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
// Do something with the notification
Console.WriteLine("Active Notification: 0", notification);
// Tell system to display the notification anyway or use
// `None` to say we have handled the display locally.
completionHandler(UNNotificationPresentationOptions.Alert|UNNotificationPresentationOptions.Sound);
public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
// Take action based on Action ID
switch (response.ActionIdentifier)
case "reply":
// Do something
break;
default:
// Take action based on identifier
if (response.IsDefaultAction)
// Handle default action...
else if (response.IsDismissAction)
// Handle dismiss action
break;
// Inform caller it has been handled
completionHandler();
【讨论】:
以上是关于Xamarin iOS 中的可操作推送通知的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin iOS - 推送通知 - 区分点击的推送通知与到达