Обновление токена фонового доступа iOS

Я хочу продлить срок действия токена доступа, обновив токен в фоновом режиме. Время истечения срока действия в настоящее время установлено на 30 минут (на стороне сервера), и это значение не должно быть изменено, идея состоит в том, что каждые 29 минут я буду вызывать метод, который обновляет токен доступа, чтобы поддерживать его в течение еще 1,5 часов (это означает, что токен доступа остается активным почти 2 часа). Я читал, что выполнение фоновых задач должно занимать до 5 секунд, тогда, если для использования UIKit требуется больше времени, хотя это позволит выполнить необходимые задачи всего за несколько минут.

Существуют ли какие-либо особые обстоятельства, которые позволят мне сделать это в фоновом режиме, или есть лучший способ сделать это? Спасибо за любую помощь!


person Reece Reynolds    schedule 09.10.2019    source источник
comment
вы должны использовать присягу или подобное решение и обновлять токены только тогда, когда вам это нужно   -  person Lu_    schedule 09.10.2019


Ответы (1)


В AppDelegate.swift сделайте это.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    Timer.scheduledTimer(timeInterval: (60.0 * 29.0), target: self, selector: #selector(self.doThisEvery29Min), userInfo: nil, repeats: true)
    return true
}

@objc func doThisEvery29Min () {
    if Constant.uToken != nil {
        ServiceManager.sharedInstance.RefreshTokens() {
            (result) in
            switch result {
            case .Success(let responce):
                // update token
            case .FailureDueToService(let error):
                print(error)
                break
            case .Failure(let error):
                print(error)
                break
            }
        }
    }
}

person Muneeb Awan    schedule 09.10.2019
comment
Timer не сработает, если приложение приостановлено. - person Paulw11; 09.10.2019
comment
@Paulw11 Paulw11 Насколько я понимаю, он имеет в виду фоновое, а не приостановленное состояние ... он не сможет выполнить какой-либо код, если приложение было приостановлено. - person Muneeb Awan; 09.10.2019
comment
Приостановленное состояние — это состояние, в котором приложение не выполняется активно в фоновом режиме. Когда приложение перемещается с переднего плана, оно ненадолго работает в фоновом режиме, пока не перейдет в состояние ожидания. Он остается приостановленным, если пользователь не вернет его на передний план или что-то не заставит его временно перейти в фоновое выполнение (обновление местоположения, тихая отправка). Таймер не заставит приложение выйти из приостановленного состояния. - person Paulw11; 09.10.2019
comment
@ Paulw11, тогда какое решение вы бы предложили? - person Muneeb Awan; 10.10.2019
comment
Им необходимо использовать систему аутентификации с более длительным периодом обновления токена или принять тот факт, что пользователю может потребоваться повторная аутентификация, если срок действия его токена истечет. В зависимости от того, как они изначально получают токен, они могут хранить учетные данные пользователя в цепочке ключей и просто автоматически повторно аутентифицироваться при необходимости. - person Paulw11; 10.10.2019
comment
Спасибо за ваш ответ! После долгого обсуждения мы решили отказаться от этого, так как это только продлит проблему взаимодействия с пользователем, с которой мы столкнулись. Вместо того, чтобы продлить срок действия токена до 2 часов, мы работаем над упрощением процесса входа в систему для пользователя, например. Идентификатор лица, Touch ID, пин-код - person Reece Reynolds; 10.10.2019