Сохранять и доставлять запланированные локальные уведомления после обновления приложения iOS.IOS

Программируем под IOS
Ответить
Anonymous
 Сохранять и доставлять запланированные локальные уведомления после обновления приложения iOS.

Сообщение Anonymous »

У меня есть приложение, которое можно загрузить в Apple App Store. Приложение отправляет локальные уведомления, которые планируются по запросу пользователя. Недавно я узнал, что когда новые версии моего приложения развертываются и автоматически обновляются на устройстве пользователя, ранее запланированные локальные уведомления НЕ доставляются. Учитывая дизайн моего приложения, пользователь МОЖЕТ перезапустить приложение, чтобы перепланировать локальные уведомления. Однако это небольшая проблема, поскольку часть ценности моего приложения заключается в напоминании пользователю - поэтому после запроса локального уведомления пользователь ожидает получить локальное уведомление, а затем запустить приложение, а не наоборот.< /p>
Я разместил вопрос об этом на форуме разработчиков Apple, и инженер Apple (я думаю) ответил и сказал, что локальные уведомления должны продолжать доставляться по расписанию после обновления приложения. Для меня это имело смысл — в противном случае эта проблема кажется фатальной проблемой для бесперебойных обновлений приложений. Однако верно и то, что в моем приложении возникает эта проблема. Локальные уведомления работают точно так, как задумано, когда не было обновления версии. Я пытаюсь выяснить, ошибся ли инженер Apple (маловероятно) или что-то не так с моим планированием локальные уведомления означают, что они не будут сохраняться после обновления приложения (более вероятно, но также и странное поведение).
Я включил свой код для планирования локальных уведомлений ниже. Я запускаю этот код, когда мое приложение меняет фазу и переходит в .background. Видит ли кто-нибудь в моем коде что-нибудь, что могло бы объяснить, почему обновление приложения нарушает доставку локальных уведомлений?
func createLocalNotifications() {
UNUserNotificationCenter.current().removeAllDeliveredNotifications()

// Clear all the old notifications to replace them with newly scheduled notifications in this function
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

let context = sharedModelContainer.mainContext
var query = FetchDescriptor(predicate: #Predicate { item in item.reminder == true},
sortBy: [SortDescriptor(\Item.reminderDate,
order: .forward)])
query.fetchLimit = 60

do {
let items = try context.fetch(query)

for notificationItem in items {

if notificationItem.reminder == true {
let content = UNMutableNotificationContent()
content.title = "Reminder"
content.body = notificationItem.name
content.sound = .default

// Local notification trigger
let calendar = Calendar.current
var triggerDate = calendar.dateComponents([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year], from: notificationItem.reminderDate!)

triggerDate.hour = Calendar.current.component(.hour, from: userSettings.reminderTimeOfDay)
triggerDate.minute = Calendar.current.component(.minute, from: userSettings.reminderTimeOfDay)

let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: false)

// Local notification request with content and trigger
let notificationUUID = "\(notificationItem.id)" + "-localNotificationID"
let request = UNNotificationRequest(identifier: notificationUUID, content: content, trigger: trigger)

// Schedule the request
UNUserNotificationCenter.current().add(request) { error in
guard error == nil else { return }
}

} // End of notificationItem.reminder == true
} // End of notificationItem in items

} catch {
print("Local notification error")
} // End of catch

} // End of createLocalNotifications()


Подробнее здесь: https://stackoverflow.com/questions/793 ... app-update
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»