Selloby: как мы делали слонов под Android
Selloby — это сервис частных объявлений в стиле Твиттера и наш самый первый проект под Android. Несмотря на сравнительно небольшой объём кода (чуть более 8 KLOC), в процессе реализации проекта Selloby мы опробовали ряд техник и методологий, которые пригодились в дальнейшей работе. Также Selloby дал нам возможность почувствовать, пускай и в миниатюре, как устроен Твиттер, что, помимо саморазвития, добавило интереса нашей работе.
Основная идея проекта — все объявления в системе, подобно записям в Твиттере, однородны, а клиент при помощи набора фильтров получает из этого потока ту информацию, которая ему интересна.
Фильтры
Скорее всего, пользователю будут нужны только объявления, отобранные по определённым критериям. Например, из его города и из какой-то одной категории. Для этого реализована функция поиска по городам и категориям. Ленты объявлений на главном экране имеет три варианта отображения:
- все объявления (если фильтры не настроены и не указан город)
- объявления с учётом фильтров по хеш-тегам
- объявления для конкретного города
С хеш-тегами есть одна хитрость. Для цены указывается не значение, а максимальную и минимальную допустимые цены. Это дополнительно усложнило серверную логику, так как им пришлось делать выборку из довольно большого объёма данных не по точному совпадению, а по вхождению в интервал. Я верю, что когда-нибудь наши бек-енд разработчики напишут об этом отдельную статью.
Текущий город может быть определён автоматически по GPS-координатам. Это одна из тех фишек, которая использовалась нами в дальнейших разработках. На сервере у нас хранится словарь населённых пунктов. С помощью простого веб-сервиса мы посылаем туда наши текущие координаты и получаем название и айдишник города. Ну или деревни :)
Создание объявлений и хеш-теги
Само собой, кроме просмотра объявлений пользователь должен иметь возможность их создавать. Как раз в создании объявления, а именно в использовании хеш-тегов, заключается основное сходство Selloby с Тwitter. Хеш-теги могут быть следующие:
- ! — действие (например, "! продам", "! куплю", "! сниму" и т.п.)
- # — объект ("#телефон", "#автомобиль", "#комната")
- @ — метсоположение ("@Москва", "@Уфа")
- $ или символ рубля — стоимость товара, услуги или предложения
О последнем теге, стоимости, стоит поговорить отдельно. Он выбирается в зависимости от текущей локали. Если системный язык русский, то ставится знак рубля. Иначе ставится знак доллара. Для каждого тега есть автоподстановка из наиболее часто вводимых значений.
К объявлению может быть добавлено до трёх фотографий. Фотографии можно загрузить как из галлереи телефона, так и получить непосредственно с камеры. Тут внезапно обнаружилось, что в андроиде есть баг, и разные телефоны по-разному работают с камерой. Одни преедают сфотографированную картинку в интенте, другие сохраняют её во временный каталог. Проблему решил несложный воркэраунд.
Помимо хеш-тегов и местоположения, каждое объявление принадлежит одной из нескольких десятков категорий, которые объеденные по группам (товары, работа, недвижимость, услуги, туриз и т.п.).
Каждое объявление можно добавить в избранное, что удобно, если есть необходимость позже вернуться к ранее просмотренному объявлению.
Авторизация
Кроме собственного механизма входа в систему в Selloby реализована авторизация через Фейсбук и Твиттер.
Сложнее всего нам далась авторизация через Твиттер, так как на тот момент там не было собственного sdk. Для этого был у нас поднят специальный веб-сервис, который выполнял авторизацию. Мобильное приложение конектилось к этому сервису, а не к серверу Твиттера. Кстати, авторизация в системе не обязательна — просматривать объявления можно и без ввода логина и пароля. Для работы с Facebook мы использовали Facebook Android SDK.
Библиотеки
В этом приложении для работы с базой данных мы использовали библиотеку OrmLite. Это повлекло за собой некоторые трудности в составлении сложных запросов и модификации базы, поэтому в следующих проектах мы отказались от неё. А вот другая библиотека, RoboGuice — IoC-контейнер для Android-приложений, показала с себя с наилучшей стороны, и ее использование стало обязательным для всех Android-приложений, разрабатываемых в Parcsis. Для отображения списка в духе Твиттера использовалась библиотека PullToRefresh.
Заключение
Первая версия Selloby для Android была опубликована 15 июля 2011 года. В настоящий момент приложение находится в стадии доработки, и в будущем его ждут значительные изменения. Следите за нашими новостями!