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

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

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

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

29.04.2016, 19:58. Просмотров 585. Ответов 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 приложений я новичок, передо мной поставили на работе задачу создать приложение,...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SergioO
95 / 184 / 63
Регистрация: 13.12.2015
Сообщений: 999
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
95 / 184 / 63
Регистрация: 13.12.2015
Сообщений: 999
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
95 / 184 / 63
Регистрация: 13.12.2015
Сообщений: 999
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 это асинктаск
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2016, 21:39
Привет! Вот еще темы с ответами:

Нужен совет в проектировании приложения - Java EE
Добрый день. Много лет программировал в delphi + СУБД (firebird, oracle). Сейчас осваиваю java (базовый курс пройден). Для более быстрого...

Нужен совет по архитектуре многопоточного приложения - C# WPF
Здравствуйте. Есть приложение WPF MVVM, которое обрабатывает файлы. Так как обработка файлов занимает время, то хотелось бы информировать...

Нужен совет по организации сетевого приложения - Java
Добрый день. Прошу не конкретных решений, а так сказать вектор - куда копать ) Проект так сказать, ради "спортивного интереса" и...

Нужен совет на что обратить внимание при покупки ноутбука для работы в AutoCAD - AutoCAD
Добрый день. Прошу прощения если пишу не в том разделе, но мне нужна помощь знающих людей работающих в AutoCAD. На какие характеристики...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.04.2016, 21:39
Ответ Создать тему
Опции темы

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