Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
#1

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

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

Новичок в 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 исполнение попадало только если активити с логином/паролем закрывалось...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2016, 19:58     Нужен совет по правильной логике для авторизации пользователя при запуске приложения
Посмотрите здесь:
Android Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера
Android Ошибка при запуске приложения
Android Ошибка при запуске приложения
Android Обучение при первом запуске приложения
Android Ошибка верификации при запуске приложения
Android При запуске приложения выдается ошибка
Android При запуске приложения подвисает ui поток
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
29.04.2016, 20:14     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #2
попробуйте через socket - тема рядом. можно сразу на онкрейт запускать
после загрузки меняете содержимое или новый активити вызываете.
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 20:18  [ТС]     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #3
Я уже думал о сокетах, но мне кажется вопрос не в методике передачи данных, а в принципе в архитектуре - я понимаю, что не правильно запускать процесс авторизации в onCreate напрямую, ибо активити даже не отрисовывается тогда. Точнее авторизацию надо запускать именно в onCreate, но видимо в отдельном потоке, а результат отлавливать отдельно вообще.. .видимо через handler как-то... вот и не могу пока сообразить как правильно всё организовать..
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
29.04.2016, 20:52     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #4
Запустите создание активити, потом включите какую-нибудь анимацию, даже обычный индикатор загрузки, выведите пользователю подсказку, типа "идет запрос на сервер...". После этого посылайте свой запрос на сервер и обрабатываете ответ. Конечно, запрос на сервер и обработка ответа должна идти как минимум в асинктаске.
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 20:54  [ТС]     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #5
Alexvp, дык не выводится ничего, из-за того, что авторизация идет в onCreate и еще не отрисован даже основной лайоут... Пытался вывести ProgressDialog.... ничего
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
29.04.2016, 20:58     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #6
Так сначала отрисуйте лайоут, в нем выведите индикатор, а потом посылайте запрос.

Добавлено через 1 минуту
Поставьте себя на место пользователя. Вы долго будете ждать старта приложения? Поэтому вначале надо что-то показать пользователю, а потом делать скрытый процесс.
smwed
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 секунды
и только после процесса авторизации показывался диалог с прогрессом...
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
29.04.2016, 21:01     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #8
Цитата Сообщение от smwed Посмотреть сообщение
только после процесса авторизации показывался диалог с прогрессом
Концептуально неверно. Если пользователь запустил приложение, то он ожидает что-то увидеть. Для этого прогрессбар и придуман.
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 21:03  [ТС]     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #9
Так я и пишу же: сначала я пытался вывести прогрессбар, и только потом запускал процесс авторизации.. а в результате получал при старте приложения белый экран, который висел до конца процесса авторизации и только затем показывался прогрессбар и сам основной лайоут.. Я и пытаюсь с этим бороться!
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
29.04.2016, 21:09     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #10
Цитата Сообщение от smwed Посмотреть сообщение
Я уже думал о сокетах, но мне кажется вопрос не в методике передачи данных, а в принципе в архитектуре - я понимаю, что не правильно запускать процесс авторизации в onCreate напрямую, ибо активити даже не отрисовывается тогда. Точнее авторизацию надо запускать именно в onCreate, но видимо в отдельном потоке, а результат отлавливать отдельно вообще.. .видимо через handler как-то... вот и не могу пока сообразить как правильно всё организовать..
работа с сокетом никак не зависит от прорисовки активити.
те грузите приветствие - активити намбер ван(параллельно, но асинхронно работает сокет у которого есть таймаут, например 2 сек), если сокет авторизуется, то грузится активити намбер ван, если таймаут, то окошко регистрации.
и сокет и програссбар запускайте, когда все прорисуется так красивее будет.
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
29.04.2016, 21:09     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #11
Цитата Сообщение от smwed Посмотреть сообщение
Так я и пишу же
Дорогой, я уже третий раз вам толкую. Чтобы вместо белого экрана пользователь что-то видел, то ему это надо показать. Процесс запроса на сервер обычно требует с десяток секунд. Примерно столько висит ваш белый экран. Бороться с этим бесполезно, так как приложение ожидает ответа от сервера для определения дальнейших шагов. Поэтому, если вас раздражает пустой экран (он и пользователя будет раздражать), то перед запросом на сервер покажите что-то на экране.
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
29.04.2016, 21:15     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #12
Цитата Сообщение от Alexvp Посмотреть сообщение
сервер обычно требует с десяток секунд
что это за сервера такие лютые, которые авторизуют за 10 секунд? таймаута в 2 сек более чем достаточно, ну 5... и то никуда не годится
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
29.04.2016, 21:27     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #13
SergioO,
Дело не только в самом сервере, но и в каналах связи. Для своих приложений я закладываю максимальный тайм-аут порядка 15 секунд. Хотя обычно хватает 1-3 сек.
P.S. Для целей безопасности, защита от подбора паролей, на сервере я делаю принудительный тайм-аут в 2 секунды. Это плюс к обычной задержке.
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 21:31  [ТС]     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #14
Так. Давайте по-порядку... Мух от котлет..

В какой момент надо запустить процесс авторизации если не в onCreate ?
Если я его запускаю в онкрейт, то активити не отрисовывается до окончания процесса, не смотря на то, что процесс запускается последней строкой в онкрейт
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
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 это асинктаск
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
29.04.2016, 21:45     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #16
у меня активити отработало за 2,48 секунды. притом что там циклически еще по странице пробежала и плюсовала строки + параллельно в консоль писала и тд.
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 21:49  [ТС]     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #17
Alexvp, прогрессбар на лайоуте лежит? а я всплывающим окном с крутилкой пытался.. оно вообще не показывается до окончания авторизации
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
29.04.2016, 21:52     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #18
Цитата Сообщение от smwed Посмотреть сообщение
а я всплывающим окном с крутилкой пытался
Может быть я невнимательно читал тему, но этот момент не увидел. Честно говоря как верно сделать в вашем случае не знаю. Никогда не пробовал.
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
29.04.2016, 22:01     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #19
smwed, вы можете данные предоставить или просто какую страницу прогружать?
давайте я попробую через сокеты сделать. какой API ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2016, 22:05     Нужен совет по правильной логике для авторизации пользователя при запуске приложения
Еще ссылки по теме:
Android При запуске приложения появляется клавиатура
Ошибка при запуске простого приложения Android
Уведомление пользователя при выходе из приложения Android
Запустить мобильный интернет при запуске приложения Android
Android Запретить появляться клавиатуре при запуске приложения

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

Или воспользуйтесь поиском по форуму:
smwed
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 8
29.04.2016, 22:05  [ТС]     Нужен совет по правильной логике для авторизации пользователя при запуске приложения #20
А в onCreate можно отменить создание и вернуться на вызвавший код?

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

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

Добавлено через 44 секунды
Просто логика построение приложения на андроиде (все эти активити и их onCreate, onStop и т.д.) для меня нова... изучаю потихоньку..
Yandex
Объявления
29.04.2016, 22:05     Нужен совет по правильной логике для авторизации пользователя при запуске приложения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru