Когда 6 марта опубликовали информацию о Транспортном Портале Санкт-Петербурга, я сразу взялся изучать их сайт. Меньше чем через сутки уже была первая версия приложения на основе наспех собранной html страницы, в app store, конечно, в таком виде меня не выпустили, хотя работало все достаточно быстро.
Под катом расскажу что же из всего этого получилось.
Выбор фреймворка
Гугл запрещает использовать свои карты для подобных платных приложений. Поэтому родной map-kit был отвергнут. html-based приложения со скрипом проходят проверку, apple советует переписывать все на html5, но тут же карты со стандартным фреймворком. Да и вообще понятно, что надо искать «нативные» пути.
В итоге c помощью все того же гугла я остановился на фреймворке route-me, а точнее его форке от Alpstein. Гугл же дает странный ответ на вопрос про слои: предлагается лепить целиком карты одну поверх другой и синхронизировать touch events. Хороший такой, годный бутерброд должен получаться.
Пришлось переписывать фреймворк для поддержки слоев, исходники пока опубликованы в виде патча, не доходят руки выложить целиком. Alpstein'цы почему-то не хотят перетащить изменения к себе, хотя речь идет, на мой взгляд, о базовой функциональности. Суть модификации сводится к тому, что в UIScrollView добавляется не вьюха с картой, как в оригинальном коде, а вьюха-контейнер. В контейнер складываются вьюхи с картами. Пара методов для добавления новых tileSources и вставки их по заданому индексу, и все.
Портал
Тут уже были статьи и про андройд верисию, и про html, но почему-то функциональность этих приложений сводится только к отображению слоев с транспортом. Поэтому я все-таки скажу пару слов о том, как сделать больше.
Главные инструменты тут – браузер, wget и какой-нибудь сниффер на выбор: ngrep, tcpdump, tcpflow, для ленивых есть еще графический HTTPScoop. Ползая по порталу и изучая запросы, удалось выяснить, что почти все построено на json'е, а таблицы на datatables. Я формировал свои запросы к datatables, на всякий случай вытаскивая информацию кусками по 25 страниц, как это делается на самом портале. Таким образом можно получить список маршрутов, прогноз для остановок, возможно что-то еще.
Следующий момент, это вдумчивое изучение страниц портала. Там оказались спрятаны уже неиспользуемые, но очень полезные для меня методы. Слои с маршрутами на портале реализованы через WFS, поддержки этого типа карт в route-me я не нашел. Зато внутри яваскрипта обнаружились функции, которые отображают слои в стандартном WMS формате, т.е. картинками.
С браузером и сниффером так же оказалось легко выяснить, как получить список остановок для маршрута или в определенной области. Тут стоит отметить, что две смежные остановки могут иметь идентичные координаты (особенно после конвертации в гугловскую проекцию), но разные ID. Я эту проблему пока никак не решал, стандартных методов в route-me нет, надо обрабатывать ситуацию наложения маркеров отдельно.
Организационные моменты
Гос-структуры и работающие с ними компании – это кошмар. Очень трудно объяснить савдеповским секретарям, про какой портал идет речь. Непросто выйти на разработчиков. Невозможно ни о чем с разработчиками договориться: они постоянно меняют настройки сайта, иногда таким образом, что программа перестает работать. Apple публикует новые версии примерно неделю…
Кстати, я ездил пару раз в офис к разработчикам, разговаривал там с безопасниками: секретари там подняли кипишь, решив, что «какой-то хаккер взломал портал». Посмотрел на модули глонасс, даже пособедовался. Принципиально никто не был против моей программы, но это никак не помогает решать проблемы, возникающие после очередных обновлений настроек безопасности.
Продажи
Продажи, конечно, смешные, за два месяца куплено около 50 аппликух. Любопытно, что с выходом английской версии сумма продаж по иностранным магазинам иногда превышает продажи в русском. Есть неприятное ощущение, что работа получилась в стол и разработка не окупится. Ну да много ли в Питере людей с айфоном, пользующихся общественным транспортом и готовых потратить целый доллар? Впорос, конечно, риторический.
Чем еще вас порадовать?
FXL4M7RJ4XHE
NN9NW7HJHHL3
JXN7FLEYLY7W
TJXW94JH763F
A7M9XMJ94YTK
Автор: hryamzik