Я работаю над приложением Apple TV, которое использует Parse-Server в качестве бэкэнда и RxSwift, и я пытаюсь настроить систему аутентификации, аналогичную той, что используется в приложениях для потоковой передачи ТВ.
Прямо сейчас у меня есть объект AuthenticationCode в базе данных синтаксического анализа, в котором есть код, идентификатор устройства и столбец токена сеанса. Я пытаюсь использовать интервал RxSwift для выполнения выборки объекта каждые 5 секунд и проверяю, заполнен ли столбец токена сеанса.
Вот код:
func poll(authorizationCode: AuthorizationCode) -> Observable<AuthorizationCode> {
return Observable<Int>.interval(5, scheduler: MainScheduler.instance).flatMap({ _ in
return Observable<AuthorizationCode>.create { observer -> Disposable in
authorizationCode.fetchInBackground(block: { (authorizationCode, error) in
if let authorizationCode = authorizationCode as? AuthorizationCode {
observer.onNext(authorizationCode)
if authorizationCode.sessionToken != nil {
observer.onCompleted()
}
} else if let error = error {
observer.onError(error)
}
})
return Disposables.create()
}
})
}
Я генерирую событие onNext каждый раз, когда извлекаю объект, и хочу завершить последовательность, когда существует код сеанса.
Проблема, с которой я столкнулся с этим кодом, заключается в том, что даже после заполнения токена сеанса и вызова onCompleted таймер по-прежнему срабатывает, а подписчик никогда не получает событие onCompleted.
Любая помощь с этим приветствуется.
Кроме того, если я не понимаю, как мне это делать, дайте мне знать.
Я бы использовал живые запросы Parse-Server, но в настоящее время они не поддерживают tvOS.
Спасибо.