Интеграция ВКонтакте API в мобильное приложение
ВКонтакте API — один из немногих крупных социальных графов, доступных для интеграции в СНГ-рынке. Основные сценарии: авторизация через VK ID, импорт профиля, публикация контента на стену, получение списка друзей. API использует OAuth 2.0, но есть нюансы с токенами, которые отличают ВКонтакте от стандартного OAuth-потока.
Авторизация через VK ID
Официальный SDK: VKID (iOS и Android, open source на GitHub). Заменил устаревший VK-ios-sdk и VK-android-sdk.
iOS:
import VKID
let vkid = try! VKID(config: Configuration(appCredentials: AppCredentials(
clientId: "YOUR_APP_ID",
clientSecret: "YOUR_SECRET"
)))
vkid.authorize(with: AuthConfiguration(flow: .authorizationCode)) { result in
switch result {
case .success(let session):
let accessToken = session.accessToken.value
// Токен для API-запросов
case .failure(let error):
print(error)
}
}
Android:
val vkid = VKID(context)
vkid.authorize(
activity = this,
config = AuthConfiguration.build {
oAuth = OAuthListWidget.OAuthItem.VK
}
) { result ->
when (result) {
is AuthResult.Success -> val token = result.token.accessToken
is AuthResult.Failure -> // обработка ошибки
}
}
Токен VK — пользовательский, привязан к конкретному user_id и набору permissions (scope). Scope запрашивается при авторизации: wall для публикации, friends для доступа к друзьям, email для e-mail (выдаётся отдельно и не всегда).
Срок действия токена — до 1 года или бессрочный (зависит от типа приложения). Refresh token появился в новых версиях VKID SDK — используйте его для обновления без повторной авторизации.
VK API: запросы
Все методы — https://api.vk.com/method/{method}?access_token=...&v=5.199. Версию API фиксируйте — 5.199 на момент написания. Без фиксации версии поведение методов может измениться.
Получение профиля:
GET /method/users.get?fields=photo_200,city,bdate&v=5.199&access_token=...
Публикация на стену:
POST /method/wall.post
{ message: "Текст поста", v: "5.199", access_token: "..." }
Получение друзей:
GET /method/friends.get?fields=photo_100,online,city&order=hints&count=100&v=5.199
Лимиты: 3 запроса в секунду на один токен. При превышении — код ошибки 6 (Too many requests). Используйте execute для батч-запросов (до 25 методов в одном вызове).
Публикация контента
Публикация с фото требует двух шагов: загрузить фото через photos.getWallUploadServer → POST на полученный URL → photos.saveWallPhoto → wall.post с attachments=photo{owner_id}_{photo_id}.
Частая ошибка: пытаться опубликовать изображение напрямую через wall.post. API так не работает — фото должно быть предварительно загружено и сохранено.
Ошибки и edge-кейсы
- Код 15 — Access denied. Пользователь ограничил доступ к данным в настройках VK.
- Код 17 — Требуется подтверждение через captcha. В мобильных приложениях редко, но бывает при массовых запросах.
- Код 5 — Invalid token. Токен истёк или отозван — триггер для повторной авторизации.
- Поле
emailможет отсутствовать даже при scopeemail— VK выдаёт его только если пользователь подтвердил почту.
Flutter
Официального Flutter-пакета от VK нет. Варианты: flutter_vk_sdk (community, не всегда актуален) или реализовать OAuth-поток самостоятельно через flutter_web_auth_2 + прямые HTTP-запросы к API. Второй вариант надёжнее — нет зависимости от поддержки пакета.
Сроки
Авторизация через VK ID + импорт профиля — 1-2 дня. Публикация контента с медиа — ещё 1 день. Стоимость рассчитывается индивидуально.







