Используйте UNNotificationRequest (UserNotificationFramework) только для данных локального уведомления на iOS

Я хотел бы использовать UserNotificationFramework на iOS 10, чтобы отправлять себе уведомления только с данными, т. Е. Без текста или звука пользователя. В основном, чтобы использовать его как постоянный таймер, чтобы иметь возможность запускать приложение, если оно запускается при его запуске, для проверки таких вещей, как время ожидания сеанса из-за истечения срока действия токена.

Вроде как аналог "доступного контента" безликого push-уведомления в локальном уведомлении.

У меня все это работает, за исключением того, что я не могу получить уведомление о срабатывании без каких-либо данных пользователя, требующих участия.

Вот соответствующие части UNMutableNotificationContent объекта UNNotificationRequest, который добавляется в UNUserNotificationCenter для запуска уведомления.

//  content.body = "Expiration"
//  content.sound = UNNotificationSound(named: "silent-short.wav")
    content.threadIdentifier = typeIdentifier
    content.userInfo = ["1":"One"]
    content.setValue("YES", forKey: "shouldAlwaysAlertWhileAppIsForeground")

Как указано выше, уведомление не запускается вообще. Если я раскомментирую одну из этих строк - не имеет значения, какая из них - она ​​сработает. Но я не хочу, чтобы пользователь отображал баннер с текстовыми уведомлениями (в приложении или за его пределами), поэтому первое не поможет. Я пытался использовать тихий звук, чтобы система могла думать, что он воспроизводит звук, но пользователь ничего не испытывает. Но система создает удобную вибрацию. Что в этом случае не очень удобно. Есть ли способ получить уведомление, чтобы не вибрировать? Или любой другой способ получить уведомление только о локальных данных?

1 ответ

Решение

Вы не можете запланировать локальное уведомление, чтобы оно действовало как тихое push-уведомление и не отображалось в центре уведомлений. UserNotifications Фреймворк был разработан для отображения данных пользователю в виде уведомления.

Вы можете получать уведомления без вывода сообщений только с помощью push-уведомлений, в настоящее время нет способа достичь той же функциональности с помощью локальных уведомлений.

Вы можете использовать фоновое выполнение, если вам нужно выполнять задачи, когда ваше приложение находится не на переднем плане, но если вам нужно, чтобы ваши задачи выполнялись только тогда, когда ваше приложение находится на переднем плане, есть лучшие способы добиться этого, чем использовать уведомления. Даже если ваш вопрос довольно расплывчат в отношении того, чего вы на самом деле хотите достичь, вы упоминаете время ожидания сеанса. Для измерения тайм-аута сессии вы можете просто использовать обычные Date объекты, сохранить текущую дату при запуске сеанса и проверить истекшее время, используя Date().timeIntervalSince(date: startDate) прежде чем вам нужно будет использовать свой токен, чтобы решить, истек ли токен или нет.

Другие вопросы по тегам