![]() |
|
![]() ![]() ![]() |
|
Dimanoss |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
День добрый, всемогущий и всёзнающий All,
Начальство решило клиенту написать программульку такого плана: 1. при старте приложения, если доступна сеть, идёт обращение к серверу в интернете и происходит обновление локальной БД. 2. пользователь проходит аутентификацию и попадает в что-то, сильно напоминающее онлайн-шоп. Т.е. - есть товары, распределённые по категориям, и есть "корзина", которую пользователь может наполнять/редактировать. 3. по требованию пользователя и/или при выходе из приложения происходит синхронизация локальной базы с интернет-сервером. По задумке клиента, он выдаёт своему работнику iPad, тот выезжает к клиенту, и "в поле", в процессе консультации, заказывает те или иные товары. Заказчику важна возможность работы в офф-лайне и контроля, кто из консультантов кому что заказал. Никогда не писал для мобильных платформ, когда-то писал на Яве и совсем немного - на С++. Последние лет пятнадцать работал исключительно в xAMP, поэтому с серверной частью проблемы вряд ли возникнут. Но вот с iOS заковык много. Есть кое-что под рукой из литературы, но там пока что ответов на некоторые вопросы найти не смог. Поэтому обращаюсь к тем, у кого опыта явно поболе... Итак, задумка такова. Первый ViewController проводит синхронизацию, тянет с сервера XML-файл, парсит его и обновляет локальную базу. По результатам, если нужно, тащит с сервера картинки товаров. Затем проводит аутентификацию и переходит к другому. Там уже - навигация по товарам, возможность посмотреть более детальную инфу по каждому наименованию и работа с корзиной. А теперь - вопросы. Во первых - годится ли такой план, на Ваш взгляд в целом. Во-вторых - как избежать подключение к серверу сторонних пользователей? На первое время, думаю, можно будет закрытую директорию создать, но потом, конечно же, хотелось бы чего-то более изящного. В третьих - как тормознуть процесс аутентификации до того, пока БД не будет полностью обновлена. Думаю, вопросы не все, по ходу дела ещё появятся... Заранее спасибо за посильную помощь.. |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
Нет, схема плохая однозначно. Должна быть примерно такая
1. Первым делом загружается рабочий вьюконтроллер, который должен отображать навигацию по товарам. И Этот контроллер при загрузке отображает контроллер логина. Таким образом при старте пользователь видит контроллер логина. 2. Контроллер логина первым делом пробует автологиниться использую сохраненные ранее логи и пароль. Если нет логина и пароля или логин не удался, то показываете поля ввода логина/пароля и кнопки Login, Register и тд. 3. Когда логин произошел, запускаете синхронизацию базы, это должен делать отдельный класс, отвечающий за базу данных. Что-то типа DatabaseManager. 4. Когда синхронизация закончилась (ее надо делать не с помощью XML, а с помощью JSON) - закрываете контроллер логина, возвращаясь в рабочий контроллер. 5. Если пользователь нажимает LogOut - снова отображаете контроллер логина Избежать подключения... Если пользователи не знают логина/пароля то не подключатся. Для синхронизации базы можно использовать сгенерированный на сервере sessionKey во время логина. |
|||
|
||||
Dimanoss |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
хм, это такая принципиальная разница? Вроде, iOS и с XML неплохо работает? Там вот в чём заковыка - не исключено, что к серверной части впоследствии ещё что-то будет прикручиваться (тот же Android), поэтому хотелось бы как-то поуниверсальнее это сваять (чтоб впоследствии не переписывать). Ах, да, вот вопросец вдогонку возник. При передаче/сохранения пароля по понятным причинам используется hash. iOS с MD5 дружит? |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
||||
|
||||
Dimanoss |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Попробую следовать. С некоторыми изменениями. Тут вот что открылось. Количество синхронизируемых наименований, оказывается - порядка 15.000. И это только на сегодня, само собой - возможно расширение. И каждое наименование - не только Название/описание, но и картинка (вообще, iPad такое вытянет?) Так что синхронизацию при старте, если делать и буду, то только - таблицу с пользователями. И автологин тоже не нужен - клиент просил, т.к. количество iPad'ов будет явно превосходить сотрудников, с ними работающих. |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
Вытянет столько, сколько есть свободного месте на диске. Только не забудьте делать синхронизацию в отдельном потоке, иначе зависните на долго. В этом потоке можете возвращать в главный поток какой нибудь прогресс, чтобы показывать пользователю сколько осталось до конца. |
|||
|
||||
Dimanoss |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Да, как-то я примерно так и думал. Должна быть какая-то кнопка для синхронизации, синхронизация шуршит паралельно, возвращая процент сделанного (например - кол-во переработанных записей из БД по отношению к общему).
Если таковая возможность имеется, не ткнёте носом в примерчик обращения к внешней базе / аутентификации / получения данных? |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
Ну это можно сделать сервисами. Пишете сервис на пхп или на чем-то другом, который делает запрос и шлет вам JSON. Вы его ловите и парсите, загоняя при этом в базу. Ну вот такая схема
|
|||
|
||||
Dimanoss |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
проект потихоньку меняется. Клиент отказался от картинок вообще, плюс к тому - сократил всю базу до 300-т наименований, плюс планирует обновление базы товаров не более 4-х раз в год. Тут всё упрощается. Усложняется история с синхронизацией - там у них какой-то свой интерфейс, который поковырять не дают. XML есть точно, а вот с JSON, похоже, облом...
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | iOS | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |