Локальное уведомление работает как должно при открытии приложения. Но бывают случаи, когда локальное уведомление остается в центре уведомлений после закрытия приложения. А затем щелчок по уведомлению запускает приложение, и данные уведомления должны быть переданы в параметрах метода AppDelegate.FinishedLaunching . Опции содержат ключ UIApplicationLaunchOptionsLocalNotificationKey , который имеет значение типа UIKit.UILocalNotification . Это значение содержит свойство UserInfo, которое должно быть заполнено данными уведомления. Но это UserInfo не имеет значения.
Другая проблема возникает, когда локальное уведомление остается в центре уведомлений и приложение перезапускается. При нажатии на уведомление приложение запускается снова и сразу останавливается.
Была ли у вас такая проблема? Это проблема с Xamarin? Как справиться с такими сценариями?
Создание уведомления:
public void DisplayNotification(MessageInfo info)
{
var notificationCenter = UNUserNotificationCenter.Current;
var content = new UNMutableNotificationContent();
content.Title = info.Title;
content.Body = info.Body;
content.UserInfo = IosStaticMethods.CreateNsDictFromMessageInfo(info);
UNNotificationTrigger trigger;
trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(0.1, false);
var id = (++_LastNotificationId).ToString();
var request = UNNotificationRequest.FromIdentifier(id, content, trigger);
notificationCenter.Delegate = new UserNotificationCenterDelegate();
notificationCenter.AddNotificationRequest(request, (error) =>
{
//handle error
});
}
internal class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
completionHandler(UNNotificationPresentationOptions.Alert);
}
public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
{
//do something
}
}
Обработка уведомлений в AppDelegate.FinishedLaunching
if (options != null)
{
var notification = options["UIApplicationLaunchOptionsLocalNotificationKey"] as UIKit.UILocalNotification;
var userInfo = notification.UserInfo;//the userInfo is null
}