Как отправить несколько уведомлений с разными идентификаторами категорий с помощью Xamarin iOS? - PullRequest
0 голосов
/ 04 июля 2019

Мне нужно отправить два разных уведомления, каждое с разным идентификатором категории.

Когда я устанавливаю только одно из этих уведомлений, действия отображаются правильно. Однако, если я установлю оба уведомления когда-нибудь в будущем, второе будет иметь соответствующие действия.

if(condition){
        var content = new UNMutableNotificationContent();
        content.Title = "Notification1";
        content.Body = "blah blah balh";
        content.Badge = 1;
        content.CategoryIdentifier = "cat1";

        var requestID = pos1.ToString();
        var date = new NSDateComponents();
        date.Hour = this.time.Hour;
        date.Minute = this.time.Minute;
        date.Weekday = i + 1;
        var trigger = UNCalendarNotificationTrigger.CreateTrigger(date, true);

        var request = UNNotificationRequest.FromIdentifier(requestID, content, trigger);
        UNUserNotificationCenter.Current.AddNotificationRequest(request, (error) => {
            if (error != null) {
                Console.WriteLine($"Error: {error.LocalizedDescription ?? ""}");
            }
            else {
                Console.WriteLine("Scheduled alarm for " + date);
            }
        });
        // Create actions
        var action1 = UNNotificationAction.FromIdentifier("action1", "Action1", UNNotificationActionOptions.Foreground);
        var cancelID = "cancel";
        var cancel_title = "Cancel";
        var cancel_action = UNNotificationAction.FromIdentifier(cancelID, cancel_title, UNNotificationActionOptions.Destructive);

        // Create Category
        var actions = new UNNotificationAction[] { action1, cancel_action };

        var intentIDs = new string[] { };
        var categoryOptions = new UNNotificationCategoryOptions[] { };
        var category = UNNotificationCategory.FromIdentifier("cat1", actions, intentIDs, UNNotificationCategoryOptions.None);

        // Register Category
        var categories = new UNNotificationCategory[] { category };
        UNUserNotificationCenter.Current.SetNotificationCategories(new NSSet<UNNotificationCategory>(categories));
    }
if(condition2){
        var content = new UNMutableNotificationContent();
        content.Title = "Notification2";
        content.Body = "blah";
        content.Badge = 1;
        content.CategoryIdentifier = "Cat2";
        var requestID = pos2.ToString();
        var date = new NSDateComponents();
        date.Hour = this.time.Hour;
        date.Minute = this.time.Minute;
        date.Weekday = i + 1;
        var trigger = UNCalendarNotificationTrigger.CreateTrigger(date, true);

        var request = UNNotificationRequest.FromIdentifier(requestID, content, trigger);
        UNUserNotificationCenter.Current.AddNotificationRequest(request, (error) => {
            if (error != null) {
                Console.WriteLine($"Error: {error.LocalizedDescription ?? ""}");
            }
            else {
                Console.WriteLine("Scheduled alarm for " + date);
            }
        });
        var action2 = UNNotificationAction.FromIdentifier("action2","Action2", UNNotificationActionOptions.Foreground);
        var cancelID = "cancel";
        var cancel_title = "Cancel";
        var cancel_action = UNNotificationAction.FromIdentifier(cancelID, cancel_title, UNNotificationActionOptions.Destructive);

        // Create Category
        var actions = new UNNotificationAction[] { action2, cancel_action };
        Console.WriteLine(this.time + actions[0].ToString());
        var intentIDs = new string[] { };
        var categoryOptions = new UNNotificationCategoryOptions[] { };
        var category = UNNotificationCategory.FromIdentifier("Cat2", actions, intentIDs, UNNotificationCategoryOptions.None);

        // Register Category
        var categories = new UNNotificationCategory[] { category };
        UNUserNotificationCenter.Current.SetNotificationCategories(new NSSet<UNNotificationCategory>(categories));
}

Если верно только условие или условие2, одно уведомление будет отправлено правильно, при этом будут показаны два действия. Когда оба условия выполняются, оба уведомления будут отправлены, однако только второе уведомление будет иметь действия.

1 Ответ

0 голосов
/ 05 июля 2019

Из документа о UNUserNotificationCenter.Current.SetNotificationCategories :

Вызовите этот метод во время запуска, чтобы зарегистрировать активные типы уведомлений вашего приложения.Этот метод регистрирует все ваши категории одновременно, заменяя все ранее зарегистрированные категории новыми s в параметре категорий. Обычно этот метод вызывается только один раз.

Вы вызывали эту функцию дважды в своем коде, и второй вызов заменит Ваш первый звонок.Вот почему только у второго есть правильные действия.

Решение - вызвать эту функцию только один раз и зарегистрировать все категории в это время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...