Pull to refresh

Как я VK Mobile Challenge принял

Reading time 5 min
Views 8.1K

Всем привет.

27 марта 2016 года завершился VK Mobile Challenge.
Условия конкурса можно прочитать здесь, а всем кому интересна история участия, добро пожаловать под кат.

Вступление или как все начиналось


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

На утро списались нашей командой. На тот момент все специалисты были на проектах, свободных ресурсов не было. Пообщавшись, мы принимаем решение, что писать проект буду я один, но в случае каких-то непредвиденных затруднений, коллеги приходят на помощь.

Определяюсь с направлением


Разработчикам было предложено несколько направлений на выбор:
  • Проведение live-трансляций с мобильных устройств.
  • Управление администрируемыми сообществами ВКонтакте.
  • Управление фотографиями ВКонтакте и их синхронизация с галереей мобильных устройств.
  • Маркетплейс на базе сервиса Товаров ВКонтакте.
  • Просмотр видеозаписей ВКонтакте: каталог, рекомендации, плейлисты, поиск.
  • Взаимодействие с сообществами и мероприятиями ВКонтакте.
  • Редактирование видеозаписей и их публикация ВКонтакте.
  • Управление документами ВКонтакте с возможностью удобного предпросмотра файлов (например, для чтения книг).


После ввода товаров ВКонтакте было интересно попробовать их в деле. Принимаю решение, что буду писать приложение с использованием товарных методов. Всё осложнялось тем, что до этого момента я ни разу не открывал раздел для разработчиков и абсолютно ничего не знал ни про API ВКонтакте ни про VK SDK.

На разработку оставался месяц. Положа руку на сердце, скажу, что были огромные сомнения успею ли один реализовать такой немалый объем кода.
Из окружения у меня было — moqups.com, развернутый redmine нашей команды, git репозиторий и AndroidStudio.

В ночь с 26го на 27е февраля, вооружившись пачкой бумаги и черными гелевыми ручками(обожаю черные гелевые ручки :), а так же ведерком с кофе, я приступил к первичному планированию и проектированию. Спустя несколько часов активного поглощения описания API, родилась первая задача в redmin'e:


Спустя две недели активной разработки появилась вторая задача с именем «бэклог», куда я записывал все хотелки, которые приходили в голову. ПризнАюсь — бОльшая часть задуманного не была реализована. Банальная нехватка времени.

Спойлер
Забегая вперед, расскажу, что приложение все-таки вышло в срок, с подачей заявки я успел. Но было это, признаюсь честно, ой как непросто.



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

Тогда я еще не знал какой сюрприз меня ожидает. По иронии судьбы буквально за неделю-две до окончания конкурса официальный android клиент обновляется, и пользователи получают возможность редактировать свои группы. Се ля ви :) Данный факт меня никак не опечалил, а наоборот придал сил и уверенности в том, что мы на правильном пути. Разработка продолжилась.

Отдельно хотелось бы затронуть визуальную составляющую.
С чувством прекрасного и красивого я на Вы (как-то даже показывал в своих статьях насколько все плохо :( ). Да что уж там… Если проводить аналогию с медведями и ушами, то мое чувство прекрасного повстречало в декабре шатуна. И кроме как буквенного обозначения оно больше никак себя не проявляет…
Разумеется, это не могло не сказаться на юзабилити приложения. Акцент был сделан на функциональной части. В идеале разрабатывался инструмент, а не массовое приложение. И, к моему глубочайшему сожалению, совсем не оставалось времени. Встал выбор — либо начать проектирование интерфейсов, но тогда с большой вероятностью не успеть, либо продолжить разработку функциональной части. Разработка продолжилась.
С вашего позволения мы простим приложению некоторые недоработки интерфейсов. К огромному счастью, пока пишутся эти строки, процесс переработки UI уже запущен.

Что имеем в итоге?
Конец приема заявок был определен датой 27 марта 2016 года в 23:59(МСК).
Суббота 26 и воскресенье 27 февраля были выделены под тестирование и глобальные правки. Здесь приходит на помощь команда. Собрал apk, разослал коллегам. Для меня эти два дня слились в один бесконечный марафон. За выходные удалось поспать буквально несколько часов. Но вот наступает вечер 27го. Все готово. Собираю архив, описываю идею и отправляю. Все. Точка. Мы успели. Мы все смогли.

Трудности и их решения


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

1) Отпечаток сертификата.
Очень долго не могли запустить приложение, которое было собрано на другой машине. Как оказалось — дело в дебажном fingerprint. Сейчас для нас это настолько очевидно, что наша оплошность невольно вызывает улыбку.
На каждом компьютере свой дебажный отпечаток, если вы разрабатываете приложения для ВКонтакте командой, не забудьте в настройках указать все fingerprint'ы разработчиков.
Вот здесь:


2) Каждый раз при попытке авторизоваться приложение запрашивало доступ.
Собрав тестовый пример, который разработчики ВКонтакте благородно положили в Android SDK, стало понятно в чем кроется проблема.
В документации для android я не нашел описание данного метода:
        VKSdk.wakeUpSession(this, new VKCallback<VKSdk.LoginState>() {
            @Override
            public void onResult(VKSdk.LoginState res) {
                switch (res) {
                    case LoggedOut:
                        startActivity(new Intent(SplashActivity.this, LoginActivity.class));
                        finish();
                        break;
                    case LoggedIn:
                        Intent intent = new Intent(SplashActivity.this, ListGroupsActivity.class);
                        startActivity(intent);
                        finish();
                        break;
                    case Pending:
                        break;
                    case Unknown:
                        break;
                }
            }

            @Override
            public void onError(VKError error) {

            }
        });

Данный метод вызывался на onCreate SplashActivity.

3. Внимательно читайте в документации описание методов и особенно блок Результат
Метод может вернуть коллекцию сущностей, а можем вернуть массив сущностей. Первые несколько дней я очень часто сталкивался с неправильной интерпретацией результата запроса.

Выводы и результаты


Приложение было написано одним человеком за 25 дней. В рабочие дни я садился за проект вечером, но частенько задерживался до утра. Все выходные дни с утра и до вечера-ночи уходили на проект(очень благодарен супруге за то, что она поняла меня и максимально помогала и поддерживала). В среднем вышло 7 часов в день.

Для того, чтобы начать пользоваться приложением, вы должны быть владельцем или входить в состав руководителей паблика с товарами.
Приложение может:
а) Редактировать информацию о группе — аналог страницы «Управление сообщество»;
б) Управление списком участников, руководителей;
в) Управление черным списком и настройками бана;
г) Управление списком ссылок
д) Поиск и фильтрация товаров
е) Редактирование/добавление/удаление товаров как из паблика так и из подборки товаров
ж) Редактирование/добавление/удаление подборок
з) Загрузка и удаление фотографий с обложек товаров и подборок.

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

Если у Вас появились какие-либо вопросы, предложения, пожелания, критика — с огромным удовольствием выслушаю!

Спасибо за внимание.
Всем добра!
Tags:
Hubs:
+2
Comments 8
Comments Comments 8

Articles