Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > iOS > Анализ конкретного проекта.


Автор: Dimanoss 22.7.2013, 10:48
День добрый, всемогущий и всёзнающий All,

Начальство решило клиенту написать программульку такого плана:

1. при старте приложения, если доступна сеть, идёт обращение к серверу в интернете и происходит обновление локальной БД.
2. пользователь проходит аутентификацию и попадает в что-то, сильно напоминающее онлайн-шоп.  Т.е. - есть товары, распределённые по категориям, и есть "корзина", которую пользователь может наполнять/редактировать.
3. по требованию пользователя и/или при выходе из приложения происходит синхронизация локальной базы с интернет-сервером.

По задумке клиента, он выдаёт своему работнику iPad, тот выезжает к клиенту, и "в поле", в процессе консультации, заказывает те или иные товары.  Заказчику важна возможность работы в офф-лайне и контроля, кто из консультантов кому что заказал.

Никогда не писал для мобильных платформ, когда-то писал на Яве и совсем немного - на С++.  Последние лет пятнадцать работал исключительно в xAMP, поэтому с серверной частью проблемы вряд ли возникнут.  Но вот с iOS заковык много.  Есть кое-что под рукой из литературы, но там пока что ответов на некоторые вопросы найти не смог.  Поэтому обращаюсь к тем, у кого опыта явно поболе...

Итак, задумка такова.  Первый ViewController проводит синхронизацию, тянет с сервера XML-файл, парсит его и обновляет локальную базу.  По результатам, если нужно, тащит с сервера картинки товаров.  Затем проводит аутентификацию и переходит к другому.  Там уже - навигация по товарам, возможность посмотреть более детальную инфу по каждому наименованию и работа с корзиной.

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

Заранее спасибо за посильную помощь..

Автор: Bitter 22.7.2013, 11:51
Нет, схема плохая однозначно. Должна быть примерно такая
1. Первым делом загружается рабочий вьюконтроллер, который должен отображать навигацию по товарам. И Этот контроллер при загрузке отображает контроллер логина. Таким образом при старте пользователь видит контроллер логина.
2. Контроллер логина первым делом пробует автологиниться использую сохраненные ранее логи и пароль. Если нет логина и пароля или логин не удался, то показываете поля ввода логина/пароля и кнопки Login, Register и тд.
3. Когда логин произошел, запускаете синхронизацию базы, это должен делать отдельный класс, отвечающий за базу данных. Что-то типа DatabaseManager.
4. Когда синхронизация закончилась (ее надо делать не с помощью XML, а с помощью JSON) - закрываете контроллер логина, возвращаясь в рабочий контроллер.
5. Если пользователь нажимает LogOut - снова отображаете контроллер логина

Избежать подключения... Если пользователи не знают логина/пароля то не подключатся. Для синхронизации базы можно использовать сгенерированный на сервере sessionKey во время логина.

Автор: Dimanoss 22.7.2013, 12:09
Цитата(Bitter @  22.7.2013,  11:51 Найти цитируемый пост)
Когда синхронизация закончилась (ее надо делать не с помощью XML, а с помощью JSON)

хм, это такая принципиальная разница?  Вроде, iOS и с XML неплохо работает?  Там вот в чём заковыка - не исключено, что к серверной части впоследствии ещё что-то будет прикручиваться (тот же Android), поэтому хотелось бы как-то поуниверсальнее это сваять (чтоб впоследствии не переписывать).

Ах, да, вот вопросец вдогонку возник.  При передаче/сохранения пароля по понятным причинам используется hash. iOS с MD5 дружит?

Автор: Bitter 22.7.2013, 12:52
Цитата(Dimanoss @  22.7.2013,  12:09 Найти цитируемый пост)
хм, это такая принципиальная разница?

JSON намного проще и удобнее

Цитата(Dimanoss @  22.7.2013,  12:09 Найти цитируемый пост)
iOS с MD5 дружит?

с MD5 дружит даже листик бумаги, так как это всего лишь алгоритм

Автор: Dimanoss 14.8.2013, 10:49
Цитата

1. Первым делом загружается рабочий вьюконтроллер, который должен отображать навигацию по товарам. И Этот контроллер при загрузке отображает контроллер логина. Таким образом при старте пользователь видит контроллер логина.
2. Контроллер логина первым делом пробует автологиниться использую сохраненные ранее логи и пароль. Если нет логина и пароля или логин не удался, то показываете поля ввода логина/пароля и кнопки Login, Register и тд.
3. Когда логин произошел, запускаете синхронизацию базы, это должен делать отдельный класс, отвечающий за базу данных. Что-то типа DatabaseManager.
4. Когда синхронизация закончилась (ее надо делать не с помощью XML, а с помощью JSON) - закрываете контроллер логина, возвращаясь в рабочий контроллер.
5. Если пользователь нажимает LogOut - снова отображаете контроллер логина


Попробую следовать.  С некоторыми изменениями.  Тут вот что открылось.  Количество синхронизируемых наименований, оказывается - порядка 15.000.  И это только на сегодня, само собой - возможно расширение.  И каждое наименование - не только Название/описание, но и картинка (вообще,  iPad такое вытянет?)  Так что синхронизацию при старте, если делать и буду, то только - таблицу с пользователями.  И автологин тоже не нужен - клиент просил, т.к. количество iPad'ов будет явно превосходить сотрудников, с ними работающих.




Автор: Bitter 14.8.2013, 14:04
Цитата(Dimanoss @  14.8.2013,  10:49 Найти цитируемый пост)
вообще,  iPad такое вытянет?

Вытянет столько, сколько есть свободного месте на диске. Только не забудьте делать синхронизацию в отдельном потоке, иначе зависните на долго. В этом потоке можете возвращать в главный поток какой нибудь прогресс, чтобы показывать пользователю сколько осталось до конца.

Автор: Dimanoss 14.8.2013, 15:08
Да, как-то я примерно так и думал.  Должна быть какая-то кнопка для синхронизации, синхронизация шуршит паралельно, возвращая процент сделанного (например - кол-во переработанных записей из БД по отношению к общему).

Если таковая возможность имеется, не ткнёте носом в примерчик обращения к внешней базе / аутентификации / получения данных?

Автор: Bitter 14.8.2013, 20:24
Ну это можно сделать сервисами. Пишете сервис на пхп или на чем-то другом, который делает запрос и шлет вам JSON. Вы его ловите и парсите, загоняя при этом в базу. Ну вот такая схема

Автор: Dimanoss 16.8.2013, 11:42
проект потихоньку меняется.  Клиент отказался от картинок вообще, плюс к тому - сократил всю базу до 300-т наименований, плюс планирует обновление базы товаров не более 4-х раз в год.  Тут всё упрощается.  Усложняется история с синхронизацией - там у них какой-то свой интерфейс, который поковырять не дают.  XML есть точно, а вот с  JSON, похоже, облом...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)