Я работаю над приложением, которое защищает некоторые приложения, и когда пользователь достигает особого количества шагов, оно не снимает эти приложения. < /p>
Мое вдохновение - это приложение ниже. (Социальные пределы) Его основная цель - периодически работать и проверять, достиг ли пользователь определенные шаги и не снятие приложения, даже когда приложение прекращается или в фоновом режиме. (Протестировал это, отменив разрешение и видит, разблокирует ли оно приложение, но оно не без этого разрешения). < /P>
Как я могу достичь того, чего достиг социальный предел. < /P>
Это мой код: < /p>
BGTaskScheduler.shared.register(forTaskWithIdentifier: refreshTaskIdentifier, using: nil) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
< /code>
Я вызываю функцию, чтобы установить планировщик: < /p>
scheduleAppRefresh()
private func scheduleAppRefresh() {
// MARK: - e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.test.socialLimit.refreshTask"]
// BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: refreshTaskIdentifier)
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("\(requests.count) BGTask Pending")
guard requests.isEmpty else { return }
let request = BGAppRefreshTaskRequest(identifier: self.refreshTaskIdentifier)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) // Earliest 15 mins later
do {
try BGTaskScheduler.shared.submit(request)
print("TASK SCHEDULE")
} catch {
print("Could not schedule app refresh: \(error)")
}
}
}
< /code>
Это моя фактическая функция обработки работы: < /p>
private func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh() // Schedule the next refresh
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1
let operation = BackgroundRefreshOperation()
task.expirationHandler = {
queue.cancelAllOperations()
}
operation.completionBlock = {
task.setTaskCompleted(success: !operation.isCancelled)
}
queue.addOperation(operation)
}
< /code>
Проблема в том, что она работает при отладке с помощью команды
e -l objc -(void) [[bgtaskscheduler sharedscheduler] _simulatelaunchfortaskwithidiveifier:@"com.test.sociallimit.refreshtask"] < /p>
nt on apllight. Я даже ждал 24 часа.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ot-running