Если вы работаете над проектом с большим трафиком и контентом, который частично (или полностью) генерируется пользователями, то, скорее всего, вы уже подумали, что было бы неплохо сделать мобильный клиент. Итак, работая над нашим проектом, мы решили, что пользователи будут охотнее использовать наш проект и активнее создавать новый контент. Кроме того, мы можем облегчить жизнь пользователю, так почему бы и нет. И мы это сделали.
Будьте внимательны, здесь много картинок и текста.
Самыми популярными мобильными платформами в России на данный момент являются iOS и Android. Мы решили сначала написать для iPhone.
Сценарий использования
Итак, существует портал с огромной базой данных ресторанов, баров и кафе, накопленной за долгую жизнь.Помимо базы ресторанов, о них имеется огромное количество отзывов.
Вы когда-нибудь оказывались в ситуации, когда, придя в какое-то место с друзьями, вы обнаруживали, что там нет мест, или шумно, или дымно, или по какой-то другой причине оно вам сегодня не подходит? Лично я и мои коллеги бывали в таких ситуациях.
Первое, о чем думаешь, есть ли поблизости где-нибудь, где можно провести вечер? Мы решили помочь пользователю в такой ситуации.
Мы начали думать о взаимодействии пользователя и приложения.
Они начали набрасывать некоторые схемы интерфейса.
Выполнение
Мы создали API для связи приложения с базой данных портала.Чтобы экономить трафик, быстрее загружать данные, а поскольку данные в базе данных хранятся именно в таком виде, мы решили перевести их в JSON. iOS 5 еще не была выпущена, что представило государственные средства для работы с JSON, поэтому мы взяли JSON-фреймворк .
Для навигации в приложении мы использовали UINavigationController вместе с UITabBarController. Пока мы изучали вопрос их совместного использования в приложении, пришли к двум вариантам:
- UINavigationController внутри UITabBarController — каждый ViewController внутри UITabBarController позволяет «углубиться» дальше, но при этом все это находится в рамках конкретной вкладки.
Вот как работает клиент Dropbox для iPhone. Схематический пример на видео.
- UITabBarController внутри UINavigationController — видим визуально то же, что и в первом случае, но «углубление» обзора происходит внутри самого приложения.
По такому принципу работает клиент ВКонтакте для iPhone. Схематический пример на видео.
Описание реализации обоих вариантов немного выходит за рамки данного поста, поэтому если кому интересно, пишите в личку, дам ссылку на описание + примеры (в личном сообщении - во избежание Хабра-эффект).
Итак, мы начали с помощи в описанной выше ситуации – того, что рядом.
Первое, что видит пользователь при запуске приложения (после экрана загрузки, конечно) — это карта.
Скрипт прост:
- запуск приложения;
- определение местоположения пользователя;
- загрузка заведений, координаты которых находятся внутри видимой на экране области (ограничивающей рамки);
- отображение маркеров на карте.
Для выбора ресторанов в окне приложения используется поиск по ограничивающей рамке вместе с модулем geocouch. Приложение передает границы окна API, а база данных делает выборку заведений в этом «прямоугольнике».
Все остальные запросы к базе данных используют стандартную документо-ориентированную структуру базы данных.
Например, при добавлении отзывов мы создаем в документе дополнительные поля, позволяющие легко находить отзывы, оставленные с конкретного устройства и т. д. Координаты заведений получаем от геокодера Яндекс.
Карт; на данный момент приложение использует карты Google (встроенный фреймворк MapKit), но в ближайшее время (после стабильного релиза) мы планируем перейти на использование Яндекс.
Карт, тем более, что российские города представлены гораздо полнее.
Результат на скриншоте:
Данные загружаются с помощью обычного асинхронного запроса через NSURLConnection, чтобы не блокировать на это время пользовательский интерфейс.
На втором экране показаны заведения, метки которых на данный момент загружены на карту, только в виде списка и с указанием расстояния до них.
Что меня порадовало, так это то, что в Objective-C класс CLLocation имеет встроенный метод distanceFromLocation для определения расстояния между двумя точками на карте (лично после беглого гугления мне не хотелось делать расчет по приведенным формулам мне в результатах).
Понятно, что в этом расчете не учтен тот факт, что двигаться нужно не по прямой, а по дорогам/переходам; значение не является точной длиной маршрута от текущего местоположения до заведения, а определение координат пользователя может дать ошибку или не успеть определить его местоположение более точно.
Но, тем не менее, эта информация может оказаться полезной и сыграть решающую роль, особенно если дело происходит зимой в сильный мороз и хочется быстрее добраться/добежать.
Или у вас пятница :)
Экран с информацией о ресторане/баре содержит краткую информацию о заведении, новости и отзывы пользователей портала.
Конечно, любой обзор или новость можно открыть и прочитать.
Текст новости/обзора также загружается с портала через API и отображается через UIWebView – на портале в обзоры можно вставлять изображения/фото; Я хотел, чтобы они были видны пользователям приложения.
Отзывы из приложения
Конечно, мы хотели, чтобы пользователи могли написать отзыв прямо из приложения.Например, вы сидите в известном ресторане, и вам уже 40 минут не приносят кофе.
Мы получили приложение и написали негативный отзыв о заведении (поверьте, менеджеры ресторана читают отзывы и учитывают их).
Чтобы не загромождать довольно ограниченный экран телефона, написание обзора было решено разделить на 3 экрана:
- написание текста отзыва + прикрепление фотографий;
- информация о посещении (дата/вид услуги/оценка);
- рекомендации и добавление самого отзыва.
После добавления отзыва он добавляется в базу данных сайта и поэтому виден как пользователям портала, так и пользователям мобильного приложения.
Добавление фотографий также осуществляется через API с помощью PUT-запроса.
Магазин приложений
Конечно, каждая подобная история должна содержать часть о том, как App Store стал популярным.Первую версию приложения мы отправили в App Store в начале октября.
Она попала туда с 3-го раза, каждая попытка занимала около недели.
Нам дважды отказывали, и, вероятно, по тем же причинам, что и все приложения, основанные на геолокации.
Первый отказ: попросили демонстрационное видео, потому что.
рецензенты не поняли, как работает приложение, а мы почему-то не предусмотрели такую ситуацию.
Запустили приложение, открылась карта где-то в штатах.
Вот и все.
Поскольку в нашей базе ресторанов и баров содержится только информация по городам России и Эстонии - больше ничего ни на карте, ни в списке они не увидели.
Мы записали видео и снова отправили заявку на рассмотрение.
Второй отказ: мы решили сделать приложение доступным по всему миру, но полноценно оно работает только в России и Эстонии.
Неделю на ветер мы выбрали нужные страны и отправили их еще раз.
С 3-й попытки приложение прошло проверку.
Сейчас у нас уже запланирован довольно большой объем работы над приложением.
Есть куда расти, к чему стремиться, да и вообще мы только в начале пути.
По странному совпадению, пока только для iOS 5 (еще одна оплошность с нашей стороны), но на этой неделе мы надеемся выпустить версию с поддержкой 4-й версии.
Приложение весит всего 200 килобайт, если вам интересно, будем рады видеть вас среди наших пользователей: ссылка на приложение .
Теги: #iOS #json #objective-c #разработка iOS
-
Теплый Ламповый Звук
19 Oct, 24 -
Nike: Напиши Будущее
19 Oct, 24 -
Пути Развития Сообществ (Форум)
19 Oct, 24 -
Хороший Мобильный Проект – Что Это?
19 Oct, 24 -
Google Выпускает Новую Поисковую Систему?
19 Oct, 24