Xamarin.IOS UILocalNotification.UserInfo является нулевым после закрытия приложения - PullRequest
0 голосов
/ 08 марта 2019

Локальное уведомление работает как должно при открытии приложения. Но бывают случаи, когда локальное уведомление остается в центре уведомлений после закрытия приложения. А затем щелчок по уведомлению запускает приложение, и данные уведомления должны быть переданы в параметрах метода 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
}

1 Ответ

1 голос
/ 11 марта 2019

Кажется, NSDictionary не должен содержать значения NSNull.После удаления значений NSNull все в порядке, даже если документация NSDictionary https://developer.apple.com/documentation/foundation/nsdictionary говорит, что NSNull разрешен.

...