Шрифт
VK.com — твой бесплатный бэкенд. Пишем свой клиент для стены группы vk.com
Play

VK.com — твой бесплатный бэкенд. Пишем свой клиент для стены группы vk.com

В прошлой статье мы рассмотрели несколько интересных способов использования бездонных хранилищ наследия Павла Дурова. В сегодняшнем материале я предложу тебе развить эту тему и поделюсь навыками разработки клиента для нашей любимой социальной сети.

Опять теория

Для получения записей со стены используется метод wall.get. Он вернет нам массив записей (JSON), начиная с последней (если нам нужно получать записи с начала списка, то придется использовать в запросе параметр offset ), а в поле соunt попадет число всех записей.

Стоит отметить, что пока этот метод построен не очень гибко. Придется делать два запроса к API вместо одного, первый раз — чтобы получить количество записей (count), а второй раз — уже нужные записи, используя первое значение как смещение. Записи в массиве будут располагаться в порядке от ранних к поздним.

У каждого элемента массива записей со стены может быть до десяти приложений (документы, музыка, видео, фото). Вот пример ответа:

Поле type указывает на тип вложения, каждый из них нужно обрабатывать по-своему. Для новостного приложения обычно достаточно текста и картинок. Текст мы получим из поля text , а описание картинки нужно брать из аттача с типом photo , который обладает такими характеристиками, как ширина, высота, ссылки на картинку в разных размерах и собственно описание.

Для обработки видео нам нужно получить его id и сделать дополнительный запрос к методу video.get с параметром videos . Значение для этого параметра должно состоять из owner_id + id (-50536551_171623222) . Если владелец видео — группа, то owner_id берется со знаком - . В ответ придет описание видеообъекта.

В поле files лягут прямые ссылки на видео в разном разрешении или ссылка на внешний источник. В нашем примере это YouTube. Приложение с типом audio (как и doc ) обладает еще и полем url со ссылкой на файл — MP3 или текстовый соответственно.

Получение данных

Для клиентского приложения важно получить данные из сети, сохранить их и отобразить пользователю. Способов работы с сетью предостаточно — это могут быть стандартные инструменты или сторонние библиотеки. Для работы с интернетом в SDK есть стандартный класс URLConnection. Ответ нужно разбирать вручную и как-то обрабатывать. Обычно для ответов собирают массив классов, где классы описывают объекты из API.

Сегодня для работы с сетью многие предпочитают использовать сторонние инструменты. Часто это вызвано необходимостью обеспечивать адекватную работоспособность при плохой связи (да-да, во многих местах нашей обширной родины качество мобильного интернета оставляет желать лучшего — операторы связи арендуют друг у друга оборудование, и в пиковые часы оно бывает тупо перегружено).

Сейчас в отрасли стандартом де-факто стало использование связки Retrofit + OkHttp. Хорошую статью по ее применению ты найдешь здесь. Удобна эта связка тем, что позволяет работать с сетью как синхронно, так и асинхронно, что очень важно, поскольку Андроид не дает работать с сетью в главном потоке.

Разбор ответа

Разбор ответов сервера делается автоматически, через механизм описания модели данных. Проиллюстрирую этот процесс кодом. Здесь мы в главном потоке запрашиваем список новых GIF-картинок для таблички с котами:

Работа с методами API описана в интерфейсе:

Если API сервиса написан сложно, то приходится делать дополнения к парсингу ответов с помощью класса JsonDeserializer . Иногда бывает трудно понять, что ушло на сервер, а что вернулось, в этой ситуации нам поможет HttpLoggingInterceptor . Вот так выглядит рабочий сервис-генератор:

Из описания записи со стены приложения нам нужно получить лишь текст и ссылку на документ. В тексте содержится разрешение картинки, а ссылка нужна для загрузки картинки.

Загружать картинку в пользовательский интерфейс можно вручную с помощью AsyncTask. А можно немного полениться и воспользоваться библиотекой Fresco (от Facebook) или Glide (рекомендует Гугл). Они же позаботятся о кеше и сэкономят трафик.

Тут все просто: говорим, откуда грузим картинку, куда вставляем и как работаем с кешем.

Хранение данных

Работа с видео, аудио и базами данных — темы обширные и достойные отдельных статей. И по этим направлениям андроид-кодеры имеют неплохой простор для творчества. В качестве БД можно использовать родную SQLite (кстати, создатели Telegram пересобрали ее и получили нехилый прирост производительности), кому-то нравится библиотека Realm — по некоторым тестам она в разы обгоняет SQLite.

Если структура данных не очень сложная, то можно наш массив классов сохранить как текст (gson) в SharedPreferences:

И восстанавливать его при каждом запуске:

Не забудь подключить библиотеку gson в файле gradle:

Вот и все

Этой статьей я заканчиваю наш мини-цикл по использованию возможностей VK.com в качестве бесплатного бэкенда для твоих приложений. Надеюсь, полученные знания помогут тебе написать настоящий шедевр и сэкономить при этом немного денежек. Удачи и до новых встреч на наших виртуальных страницах!

Владимир Тимофеев Check Also

Взломанные устройства на Android используются для создания аккаунтов-однодневок

Эксперты Trend Micro изучали сервисы SMS PVA (phone-verified account) и обнаружили мошенни…

📎📎📎📎📎📎📎📎📎📎