Таймер TOTP привязан к абсолютному времени, а не к моменту открытия строки. Используйте один общий ticker, вычисляйте номер 30-секундного окна и обновляйте коды при его изменении.
Отображение TOTP‑кодов с обновляющимися таймерами через корутины
Таймер TOTP привязан к абсолютному времени, а не к моменту открытия строки. Используйте один общий ticker, вычисляйте номер 30-секундного окна и обновляйте коды при его изменении.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Задача: вывести список одноразовых паролей (TOTP). Каждый пароль должен сопровождаться таймером, отсчитывающим 30 секунд. По истечении этого периода пароль генерируется заново. Реализовать логику обновления с использованием корутин.
Ответ
Таймер TOTP привязан к абсолютному времени, а не к моменту открытия строки. Используйте один общий ticker, вычисляйте номер 30-секундного окна и обновляйте коды при его изменении.
Для стандартных T0 = 0 и шага 30 секунд counter = floor(unixSeconds / 30), оставшееся время = 30 − unixSeconds % 30. Каждую секунду корутина заново читает часы: простое уменьшение счётчика накопит дрейф и ошибётся после паузы. При смене counter пересчитайте все коды через проверенную реализацию TOTP. Обновления UI привяжите к lifecycle, секреты не логируйте и не храните в открытом виде. Отдельная бесконечная корутина на каждую видимую строку не нужна.
Источник: www.rfc-editor.org.