Pull to refresh

Где хранить пользовательские настройки

Reading time2 min
Views3K
Когда-то, во времена Вседозволенности и Хаоса программы хранили настройки пользователей где-придётся. Многие держали одну копию настроек на всю систему. Со временем все ОС обзавелись нормальными профилями пользователей, начали ограничивать доступ к системным папкам и всех программистов стали с яслей учить хранить настройки пользователя в папке (ветке) его профиля. Казалось бы, на том и сказочке конце. Но нет. Есть случаи, когда этот подход не работает. Я продемонстрирую это на примере ошибки (именно архитектурной ошибки, а не банального бага в следствии опечатки) в одном из приложений Google.

Речь идёт о сервисе Google Music. Как известно, слушать\скачивать музыку в этом сервисе можно через WEB-интерфейс, а вот закачивать на сервер — только из специального приложения Google Music Manager. После установки и логина оно попросит Вас указать папки, откуда Вы хотели бы загружать музыку в облако Google. Выберем пару штук:



Программа начнёт автоматически загружать файлы. По окончанию скажет, что всё успешно загружено. Ну ок, пока всё нормально.

Теперь разлогинимся и войдём под другим аккаунтом Google Music. И, внимание, что же мы видим:



В этом аккаунте уже прописаны те же папки и более того, уже идёт загрузка песенок в другой аккаунт! Всё это произошло само по себе, без каких-либо действий с нашей стороны. Для тех, кто еще не понял всю эпичность фэйла, я приведу аналогию: Вы приходите в гости к другу, проситесь за его комп проверить почту, логинитесь под своим аккаунтом — и вдруг в Ваш почтовый ящик начинают попадать письма из почты Вашего друга. Круто? Круто.

Почему же так вышло? Разгадка проста:



Google Music Manager хранит настройки расшаренных папок в профиле пользователя в реестре. При перелогине в программе настройки не меняются. Тот факт, что у одного пользователя может быть несколько аккаунтов или ситуация «залогинюсь на чужом компе» не учитывается вообще. А это есть баг.

Вывод


Если Ваше приложение спрашивает у пользователя логин\пароль и куда-то коннектится, Вы должны предусмотреть хранение его настроек не в профиле пользователя ОС, а в собственных файлах профилей пользователей. Пользователи ОС != пользователи внешних сервисов.
Tags:
Hubs:
Total votes 22: ↑12 and ↓10+2
Comments11

Articles