Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
1

Нужен совет по правильной логике для авторизации пользователя при запуске приложения

29.04.2016, 19:58. Показов 2920. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Новичок в java и android, так что прошу сильно не пинать за терминологию

Итак. Хочу ради самообучения сделать приложение, которое будет при старте (сразу после показа основного layout) пытаться авторизоваться на веб-сервере: для этого отправлять запрос get вида http//myserver/auth?l=login&p=password (логин и пароль читаются из сохраненных настроек) и дожидаться ответ.

Если логин и пароль не заданы или авторизация на сервере не успешна, то выводить на экран активити с полями ввода логина, пароля и кнопками "войти" и "закрыть".

По кнопке "Войти" - попытка авторизации на сервере. Если успешна, то возврат на основное активити, если не успешна - остаемся на активити с вводом логина/пароля.

По кнопке "Закрыть" надо закрыть все приложение.

На данный момент есть основное активити Main, есть активити с Логином/Паролем actAuth, есть класс сохраняющий и получающий настройки.

На данный момент сделал только так:
в Main в OnCreate запускаю процесс авторизации с помощью AsyncTask. Но поскольку результат получаю с помощью .get() то пока не пройдет процесс авторизации или не кончится тайм-оут основное окно не отрисовано и кажется, что приложение висит. Пытался вывести информацию через ProgressDialog, но он тоже отрисовывается только после процесса авторизации - оно и понятно весь UI заблокирован из-за .get()


Подскажите правильную архитектуру подобной задачи, или ссылку на исходники где есть подобная логика.

Спасибо.

Добавлено через 7 минут
Добавлю:
В onResume у Main проверял: если нет авторизации, то закрывал приложение через finish() т.к. в onResume исполнение попадало только если активити с логином/паролем закрывалось...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2016, 19:58
Ответы с готовыми решениями:

Авторизация пользователя при запуске приложения. Домен
Добрый день, есть такой вопрос, нужно организовать такую штуку: Пользователь запускает программу,...

Нужен совет в выборе языка для приложения
Добрый день Дамы и Господа! Нужна помощь в выборе языка для приложения. Приложение под Андроид....

Нужен совет по выбору шаблона для веб приложения
Добрый день. Нужно сделать прототип вебприложения похожего на сервис https://www.airbnb.ru/ С...

Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера
Здравствуйте, тут такое дело, в программировании android приложений я новичок, передо мной...

20
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 20:14 2
попробуйте через socket - тема рядом. можно сразу на онкрейт запускать
после загрузки меняете содержимое или новый активити вызываете.
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 20:18  [ТС] 3
Я уже думал о сокетах, но мне кажется вопрос не в методике передачи данных, а в принципе в архитектуре - я понимаю, что не правильно запускать процесс авторизации в onCreate напрямую, ибо активити даже не отрисовывается тогда. Точнее авторизацию надо запускать именно в onCreate, но видимо в отдельном потоке, а результат отлавливать отдельно вообще.. .видимо через handler как-то... вот и не могу пока сообразить как правильно всё организовать..
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 20:52 4
Запустите создание активити, потом включите какую-нибудь анимацию, даже обычный индикатор загрузки, выведите пользователю подсказку, типа "идет запрос на сервер...". После этого посылайте свой запрос на сервер и обрабатываете ответ. Конечно, запрос на сервер и обработка ответа должна идти как минимум в асинктаске.
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 20:54  [ТС] 5
Alexvp, дык не выводится ничего, из-за того, что авторизация идет в onCreate и еще не отрисован даже основной лайоут... Пытался вывести ProgressDialog.... ничего
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 20:58 6
Так сначала отрисуйте лайоут, в нем выведите индикатор, а потом посылайте запрос.

Добавлено через 1 минуту
Поставьте себя на место пользователя. Вы долго будете ждать старта приложения? Поэтому вначале надо что-то показать пользователю, а потом делать скрытый процесс.
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 20:59  [ТС] 7
Вот код:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

appSettings = PreferenceManager.getDefaultSharedPreferences(this);

setContentView(R.layout.main);

..сразу после этого выводился ProgressDialog и запускался процесс авторизации. (к сожалению уже переделал код)

Так при старте был просто белый экран до окончания процесса авторизации

Добавлено через 33 секунды
и только после процесса авторизации показывался диалог с прогрессом...
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 21:01 8
Цитата Сообщение от smwed Посмотреть сообщение
только после процесса авторизации показывался диалог с прогрессом
Концептуально неверно. Если пользователь запустил приложение, то он ожидает что-то увидеть. Для этого прогрессбар и придуман.
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 21:03  [ТС] 9
Так я и пишу же: сначала я пытался вывести прогрессбар, и только потом запускал процесс авторизации.. а в результате получал при старте приложения белый экран, который висел до конца процесса авторизации и только затем показывался прогрессбар и сам основной лайоут.. Я и пытаюсь с этим бороться!
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 21:09 10
Цитата Сообщение от smwed Посмотреть сообщение
Я уже думал о сокетах, но мне кажется вопрос не в методике передачи данных, а в принципе в архитектуре - я понимаю, что не правильно запускать процесс авторизации в onCreate напрямую, ибо активити даже не отрисовывается тогда. Точнее авторизацию надо запускать именно в onCreate, но видимо в отдельном потоке, а результат отлавливать отдельно вообще.. .видимо через handler как-то... вот и не могу пока сообразить как правильно всё организовать..
работа с сокетом никак не зависит от прорисовки активити.
те грузите приветствие - активити намбер ван(параллельно, но асинхронно работает сокет у которого есть таймаут, например 2 сек), если сокет авторизуется, то грузится активити намбер ван, если таймаут, то окошко регистрации.
и сокет и програссбар запускайте, когда все прорисуется так красивее будет.
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 21:09 11
Цитата Сообщение от smwed Посмотреть сообщение
Так я и пишу же
Дорогой, я уже третий раз вам толкую. Чтобы вместо белого экрана пользователь что-то видел, то ему это надо показать. Процесс запроса на сервер обычно требует с десяток секунд. Примерно столько висит ваш белый экран. Бороться с этим бесполезно, так как приложение ожидает ответа от сервера для определения дальнейших шагов. Поэтому, если вас раздражает пустой экран (он и пользователя будет раздражать), то перед запросом на сервер покажите что-то на экране.
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 21:15 12
Цитата Сообщение от Alexvp Посмотреть сообщение
сервер обычно требует с десяток секунд
что это за сервера такие лютые, которые авторизуют за 10 секунд? таймаута в 2 сек более чем достаточно, ну 5... и то никуда не годится
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 21:27 13
SergioO,
Дело не только в самом сервере, но и в каналах связи. Для своих приложений я закладываю максимальный тайм-аут порядка 15 секунд. Хотя обычно хватает 1-3 сек.
P.S. Для целей безопасности, защита от подбора паролей, на сервере я делаю принудительный тайм-аут в 2 секунды. Это плюс к обычной задержке.
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 21:31  [ТС] 14
Так. Давайте по-порядку... Мух от котлет..

В какой момент надо запустить процесс авторизации если не в onCreate ?
Если я его запускаю в онкрейт, то активити не отрисовывается до окончания процесса, не смотря на то, что процесс запускается последней строкой в онкрейт
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 21:39 15
Примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.load);
    ProgressBar ProgressBar = (ProgressBar)findViewById(R.id.progressBar);
    ProgressBar.setVisibility(View.VISIBLE);
    TextView loadServer = (TextView)findViewById(R.id.textViewLoad1);
    loadServer.setText(R.string.connecting);
        sPref = getSharedPreferences(Const.APP_PREFERENCES, Context.MODE_PRIVATE);
        login = sPref.getString(Const.APP_PREFERENCES_LOGIN, "");
        passwd = sPref.getString(Const.APP_PREFERENCES_PASSWD, "");
 
        ServerTaskAutoLogin taskLoginLoad = new ServerTaskAutoLogin();
        taskLoginLoad.execute(new String[]{"url"});
       
    }
ServerTaskAutoLogin это асинктаск
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 21:45 16
у меня активити отработало за 2,48 секунды. притом что там циклически еще по странице пробежала и плюсовала строки + параллельно в консоль писала и тд.
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 21:49  [ТС] 17
Alexvp, прогрессбар на лайоуте лежит? а я всплывающим окном с крутилкой пытался.. оно вообще не показывается до окончания авторизации
0
100 / 79 / 9
Регистрация: 03.08.2014
Сообщений: 447
29.04.2016, 21:52 18
Цитата Сообщение от smwed Посмотреть сообщение
а я всплывающим окном с крутилкой пытался
Может быть я невнимательно читал тему, но этот момент не увидел. Честно говоря как верно сделать в вашем случае не знаю. Никогда не пробовал.
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 22:01 19
smwed, вы можете данные предоставить или просто какую страницу прогружать?
давайте я попробую через сокеты сделать. какой API ?
0
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 22:05  [ТС] 20
А в onCreate можно отменить создание и вернуться на вызвавший код?

Это я к тому, что может в Main открывать активити с логином/паролем,а в ней при открытии делать авторизацию если есть сохраненные логин/пароль. И в случае успешной авторизации даже не показывать лайоут, а сразу закрывать ?

Добавлено через 2 минуты
SergioO, спасибо, конечно, но не вижу смысла, так как в дальнейшем приложение должно активно работать с сервером - получать с него разные данные в xml, а реализацию этого я планирую на HttpURLConnection построить..

Добавлено через 44 секунды
Просто логика построение приложения на андроиде (все эти активити и их onCreate, onStop и т.д.) для меня нова... изучаю потихоньку..
0
29.04.2016, 22:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2016, 22:05
Помогаю со студенческими работами здесь

Нужен совет по выбору БД (или нечто похожего) для приложения
Приветствую всех. На работе есть огромная БД, хранящая абсолютно всю ин-цию о компании. Мое...

Нужен совет по ограничению действий пользователя
Есть приложение, достаточно объемное. Главная форма, на ней сплит контроллер, в одной части дерево...

Управление Рабочей областью пользователя. Нужен совет.
Добрый день!Нужен совет! Необходимо добавить всем пользователем Lotus новый лист с ярлыками...

Структура приложения(нужен совет)
Пишу код программы и возник вопрос: нужно ли использовать полиморфизм в приложении? Дело в том,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru