BGTaskScheduler.shared.submit(request) вызывается, но задача отменяется после убийства приложенияIOS

Программируем под IOS
Ответить
Anonymous
 BGTaskScheduler.shared.submit(request) вызывается, но задача отменяется после убийства приложения

Сообщение 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)
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ling-after
Ответить

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

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

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

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

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