Функция BGTaskScheduler.shared.submit(request) работает нормально, но ожидающая задача исчезает после закрытия приложения и воссоздает фоновую задачу после повторного запуска приложения. Но это не так, как должно быть. Я тестирую на реальном устройстве.
1.
Я активировал фоновые режимы в разделе «Подписание и возможности» с фоновой выборкой и обработкой
Я добавляю свой идентификатор в Info.plist Разрешенные идентификаторы планировщика фоновых задач
2.
Сначала я использую BGTaskScheduler.shared.register для выполнения self.handleTask(task: Task) при вызове фоновой задачи.
3.
Я вызываю Schedule(), чтобы отправить задачу, если в настоящее время нет ожидающих задач. Это работает нормально. Если я запущу приложение в первый раз, задание будет запланировано. Если бы я снова вызвал Schedule(), он не был бы отправлен снова, потому что задача находится в ожидании. Если я оставлю свое приложение в фоновом режиме и не уничтожу его вручную, задача в какой-то момент будет выполнена правильно. Но если я остановлю свое приложение и запущу снова, оно отправит новую задачу, потому что ожидающих задач больше нет. Поэтому моя задача отменяется сразу после закрытия приложения. Если я создам и запущу свое приложение из Xcode дважды, оно создаст задачу при первом запуске, а не при втором, потому что мое приложение не будет уничтожено между обоими запусками. Так что все работает нормально.
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
BGTaskScheduler.shared.register(forTaskWithIdentifier: "notification", using: nil) { task in
guard let task = task as? BGAppRefreshTask else { return }
self.handleTask(task: task)
}
// Call function to submit task
schedule()
return true
}
func schedule() {
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("Pending Tasks: ", requests)
guard requests.isEmpty else { return }
let today = Calendar.current.startOfDay(for: .now)
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)!
let begin = Calendar.current.date(bySettingHour: 1, minute: 0, second: 0, of: tomorrow)!
let request = BGAppRefreshTaskRequest(identifier: "notification")
request.earliestBeginDate = begin
do {
try BGTaskScheduler.shared.submit(request)
print("Background Task Scheduled!")
} catch(let error) {
print("Scheduling Error \(error.localizedDescription)")
}
}
}
func handleTask(task: BGAppRefreshTask) {
schedule()
// This creates my local notifications
NotificationManager.shared.shedulePrayerNotifications()
// This is only to check if the background task is executed
let content = UNMutableNotificationContent()
content.title = "Updated Notifications"
content.subtitle = "Check it now!"
UNUserNotificationCenter.current().add(UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)))
task.setTaskCompleted(success: true)
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... ling-after
BGTaskScheduler.shared.submit(request) вызывается, но задача отменяется после убийства приложения ⇐ IOS
Программируем под IOS
1771782795
Anonymous
Функция BGTaskScheduler.shared.submit(request) работает нормально, но ожидающая задача исчезает после закрытия приложения и воссоздает фоновую задачу после повторного запуска приложения. Но это не так, как должно быть. Я тестирую на реальном устройстве.
1.
Я активировал фоновые режимы в разделе «Подписание и возможности» с фоновой выборкой и обработкой
Я добавляю свой идентификатор в Info.plist Разрешенные идентификаторы планировщика фоновых задач
2.
Сначала я использую BGTaskScheduler.shared.register для выполнения self.handleTask(task: Task) при вызове фоновой задачи.
3.
Я вызываю Schedule(), чтобы отправить задачу, если в настоящее время нет ожидающих задач. Это работает нормально. Если я запущу приложение в первый раз, задание будет запланировано. Если бы я снова вызвал Schedule(), он не был бы отправлен снова, потому что задача находится в ожидании. Если я оставлю свое приложение в фоновом режиме и не уничтожу его вручную, задача в какой-то момент будет выполнена правильно. Но если я остановлю свое приложение и запущу снова, оно отправит новую задачу, потому что ожидающих задач больше нет. Поэтому моя задача отменяется сразу после закрытия приложения. Если я создам и запущу свое приложение из Xcode дважды, оно создаст задачу при первом запуске, а не при втором, потому что мое приложение не будет уничтожено между обоими запусками. Так что все работает нормально.
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
BGTaskScheduler.shared.register(forTaskWithIdentifier: "notification", using: nil) { task in
guard let task = task as? BGAppRefreshTask else { return }
self.handleTask(task: task)
}
// Call function to submit task
schedule()
return true
}
func schedule() {
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("Pending Tasks: ", requests)
guard requests.isEmpty else { return }
let today = Calendar.current.startOfDay(for: .now)
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)!
let begin = Calendar.current.date(bySettingHour: 1, minute: 0, second: 0, of: tomorrow)!
let request = BGAppRefreshTaskRequest(identifier: "notification")
request.earliestBeginDate = begin
do {
try BGTaskScheduler.shared.submit(request)
print("Background Task Scheduled!")
} catch(let error) {
print("Scheduling Error \(error.localizedDescription)")
}
}
}
func handleTask(task: BGAppRefreshTask) {
schedule()
// This creates my local notifications
NotificationManager.shared.shedulePrayerNotifications()
// This is only to check if the background task is executed
let content = UNMutableNotificationContent()
content.title = "Updated Notifications"
content.subtitle = "Check it now!"
UNUserNotificationCenter.current().add(UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)))
task.setTaskCompleted(success: true)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79894097/bgtaskscheduler-shared-submitrequest-is-called-but-the-task-is-canceling-after[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия