Xamarin IOS - 应用程序关闭时显示本地通知
Xamarin IOS - Show local notification when application is closed
我有一个 Xamarin IOS 应用程序,它每 10 秒获取一次用户位置,即使该应用程序被终止也是如此。我使用这个库:“https://jamesmontemagno.github.io/GeolocatorPlugin/”.
我想要的是:当应用程序关闭或打开并且用户在特定位置时,我想显示本地通知。当应用程序关闭时,这甚至可能吗?我找不到这方面的信息,因为它总是关于远程通知。
应在应用程序启动后立即请求通知权限,方法是将以下代码添加到 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;
}
iOS10 的新增功能,当应用程序位于前台并触发通知时,它可以以不同方式处理通知。通过提供 UNUserNotificationCenterDelegate
并实现 UserNotificationCentermethod
,应用程序可以接管显示通知的责任。例如:
using System;
using ObjCRuntime;
using UserNotifications;
namespace workplat
{
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();
}
}
}
要创建自定义操作并向系统注册,请使用以下代码:
public void RegisterNotification(long time)
{
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
//creat a UNMutableNotificationContent which contains your notification content
UNMutableNotificationContent notificationContent = new UNMutableNotificationContent();
notificationContent.Title = "xxx";
notificationContent.Body= "xxxx";
notificationContent.Sound = UNNotificationSound.Default;
UNTimeIntervalNotificationTrigger trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(time, false);
UNNotificationRequest request = UNNotificationRequest.FromIdentifier("FiveSecond", notificationContent, trigger);
center.AddNotificationRequest(request,(NSError obj) =>
{
});
}
调用此方法时,例如:
RegisterNotification(20);//set the time you want to push notification
通知将在20秒后推送,enen如果您关闭您的应用程序。您可以在上传位置后放置此行。
我的demo已经上传到我的github,大家可以下载参考:Demo Link.
您可以访问 link 了解更多信息和详细信息:MicroSoft Document
我有一个 Xamarin IOS 应用程序,它每 10 秒获取一次用户位置,即使该应用程序被终止也是如此。我使用这个库:“https://jamesmontemagno.github.io/GeolocatorPlugin/”.
我想要的是:当应用程序关闭或打开并且用户在特定位置时,我想显示本地通知。当应用程序关闭时,这甚至可能吗?我找不到这方面的信息,因为它总是关于远程通知。
应在应用程序启动后立即请求通知权限,方法是将以下代码添加到 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;
}
iOS10 的新增功能,当应用程序位于前台并触发通知时,它可以以不同方式处理通知。通过提供 UNUserNotificationCenterDelegate
并实现 UserNotificationCentermethod
,应用程序可以接管显示通知的责任。例如:
using System;
using ObjCRuntime;
using UserNotifications;
namespace workplat
{
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();
}
}
}
要创建自定义操作并向系统注册,请使用以下代码:
public void RegisterNotification(long time)
{
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
//creat a UNMutableNotificationContent which contains your notification content
UNMutableNotificationContent notificationContent = new UNMutableNotificationContent();
notificationContent.Title = "xxx";
notificationContent.Body= "xxxx";
notificationContent.Sound = UNNotificationSound.Default;
UNTimeIntervalNotificationTrigger trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(time, false);
UNNotificationRequest request = UNNotificationRequest.FromIdentifier("FiveSecond", notificationContent, trigger);
center.AddNotificationRequest(request,(NSError obj) =>
{
});
}
调用此方法时,例如:
RegisterNotification(20);//set the time you want to push notification
通知将在20秒后推送,enen如果您关闭您的应用程序。您可以在上传位置后放置此行。
我的demo已经上传到我的github,大家可以下载参考:Demo Link.
您可以访问 link 了解更多信息和详细信息:MicroSoft Document