Інтеграція ВКонтакте 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 та набору дозволів (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 день. Вартість розраховується індивідуально.







