Pull to refresh

Приложение «Общие группы ВКонтакте»

Intro


ВКонтакте Вы можете с легкостью посмотреть общих друзей с любым пользователем. Есть приложения, которые позволяют посмотреть общие аудиозаписи с каждым другом. Но в то же время, ВКонтакте не позволяет посмотреть список групп, общих с каким-то отдельным пользователем. Вы только можете видеть на его странице список групп, в которых он состоит; либо список друзей, которые вступили в конкретную группу.

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

Инструменты для достижения цели


Для загрузки данных с сайта vk.com естественно был использован VkApi, который предоставляет все требуемые методы для получения списка друзей и групп пользователя, а также данных о том, какие друзья в каких группах состоят. При этом данные будут достоверными и актуальными, даже если какой-либо друг скрыл список своих групп в настройках приватности, так как приложение не загружает список групп каждого друга, а использует метод vkapi.groups.isMember, который позволяет получать данные о наличии или отсутствии друга в конкретной группе.

Так как количество друзей и групп пользователя может составлять несколько сотен, количество данных, которые необходимо загрузить оказывается достаточно большим. VkApi накладывает ряд ограничений на частоту запросов и количество вызовов методов в одном запросе. К примеру, обращаться к VkApi можно не чаще 3 раз в секунду, а одном обращении может быть не более 25 вызовов методов. Также в одном запросе можно получить информацию о наличии или отсутствии в группах не более 500 друзей.

Немного оптимизации


Таким образом, если, к примеру, пользователь имеет менее 500 друзей и состоит в 300 группах, данные о наличии его друзей в группах будут загружены и обработаны в течение 8-10 секунд. Около секунды из них тратится на загрузку списков друзей и групп. Остальное время тратится на выполнение запросов о наличии друзей в группах к VkApi, обработку результатов этих запросов, сортировку друзей в соответствии с количеством общих групп и сортировку групп в соответствии с количеством друзей в них.

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

Чтобы позволить пользователю быстро переключаться между режимами просмотра списка друзей (в алфавитном порядке и в порядке уменьшения количества общих групп), было решено выполнять сортировку сразу после загрузки друзей и хранить в оперативной памяти оба списка. Таким образом, мы избавляемся от необходимости производить сортировку при каждом переключении режима просмотра. Список групп также сохраняется в оперативной памяти в отсортированном порядке и в порядке по умолчанию (как он есть в разделе «Мои группы»).


Список друзей в алфавитном порядке и в порядке уменьшения количества общих групп

Дополнительные возможности


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


Результаты поиска по списку друзей и списку групп

Кроме того, в приложении имеется возможность просматривать список групп каждого друга и вступать в группы. Также имеется возможность добавлять и удалять пользователей из друзей и выходить из групп. При этом списки друзей и групп и данные о наличии друзей в группах автоматически обновляются.

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

Вместе с тем, в приложение была добавлена функция отправки другу сообщения со списком общих групп.


Отправка сообщения

Open Source


Исходный код приложения «Общие группы ВКонтакте» находится в свободном доступе.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.