Інтеграція Однокласники API в мобільний додаток
Помилка підпису — головний біль при інтеграції OK API. Без правильного підпису API повертає PARAM_SESSION_EXPIRED або PERMISSION_DENIED. Типова проблема — передача секретного ключа на клієнт, що веде до компрометації. Цього можна уникнути, використовуючи бекенд-проксі, який підписує запити, не розкриваючи ключ. Передача application_secret_key на клієнт робить додаток вразливим до реверс-інжинірингу та крадіжки ключа. Використання HTTPS з сертифікатом не вирішує проблему — ключ повинен зберігатися тільки на бекенді. Архітектура з проксі-сервером гарантує, що секретний ключ ніколи не покине вашу інфраструктуру. Клієнт відправляє запит на ваш сервер, сервер додає підпис і проксіює його в OK API.
Однокласники (OK.ru) — друга за розміром російськомовна соцмережа з аудиторією 35+. Вона актуальна для рітейлу, медіа та сімейних сервісів. Наш досвід — 7+ років мобільної розробки, більше 50 проєктів з інтеграцією соцмереж. Інтеграція OK API включає три ключові завдання: авторизацію через OAuth 2.0, підпис запитів і публікацію контенту. Кожна вимагає точного дотримання протоколу. Отримайте консультацію з інтеграції OK API — ми оцінимо ваш проєкт за 1 день.
Як працює підпис запитів до OK API?
Це головна відмінність API. Кожен запит підписується:
sig = MD5(params_sorted_alphabetically + MD5(access_token + application_secret_key)) Згідно з документацією OK, підпис обов'язковий для всіх запитів до API. Кроки:
- Беремо всі параметри запиту крім
sigіaccess_token. - Сортуємо за ім'ям параметра, конкатенуємо в рядок
key=value. - Рахуємо
session_secret = MD5(access_token + application_secret_key)— це session_secret обчислюється на сервері, секрет не передається клієнту. -
sig = MD5(params_string + session_secret).
Передавати application_secret_key на клієнт не можна — тільки через бекенд-проксі. Архітектура: клієнт запитує ваш бекенд → бекенд додає підпис → проксіює запит до OK API.
Реєстрація додатку та ключі
На dev.ok.ru створюємо додаток, тип — «Mobile». Отримуємо три ключі: application_id, application_key (публічний), application_secret_key (приватний, тільки на сервері). Для iOS вкажіть bundle ID, для Android — package name та SHA1-відбиток.
Які SDK використовувати для інтеграції з Однокласниками?
| Платформа | SDK | Доступність | Статус |
|---|---|---|---|
| iOS | OKLoginSDK (CocoaPods/SPM) | Обмежена (неофіційний) | Ручна реалізація |
| Android | ok-android-sdk (Gradle) | Офіційний | Активний |
iOS: Офіційного Swift SDK немає — зазвичай реалізують OAuth-потік вручну через ASWebAuthenticationSession.
Android: Офіційний ok-android-sdk на GitHub. Підключення:
implementation 'ru.ok.android:sdk:3.0.18' Авторизація:
OkAuthManager.startOkAutoExternal(activity, listOf(OkScope.GET_EMAIL, OkScope.VALUABLE_ACCESS)) val token = OkAuthManager.onActivityResult(requestCode, resultCode, data, listener) Офіційний Android SDK у 2 рази прискорює інтеграцію порівняно з самописним OAuth-потоком.
Як уникнути помилок підпису при інтеграції з OK API?
Помилки підпису — часте джерело проблем. Ось типові сценарії та їх вирішення:
- Виключення access_token з параметрів підпису:
access_tokenне бере участі в генераціїsig. Якщо випадково включити його, підпис стане недійсним. За статистикою, ~70% запитів з помилкою підпису викликані цією причиною. - Порядок параметрів: Сортування за алфавітом строге. Навіть один параметр не на місці — помилка
PARAM_SESSION_EXPIRED. - Кодування: Параметри повинні бути в UTF-8, без URL-кодування. Подвійне кодування ламає підпис.
- Термін життя session_secret: Обчислюється один раз і кешується на час сесії. Не перераховуйте його на кожен запит.
Авторизація: OAuth 2.0 + підпис запитів
Авторизація через WebView або системний браузер:
https://connect.ok.ru/oauth/authorize?client_id=YOUR_APP_ID&scope=GET_EMAIL;VALUABLE_ACCESS;PHOTO_CONTENT&response_type=code&redirect_uri=yourapp://oauth
Після отримання code — обмінюємо на access_token через POST на https://api.ok.ru/oauth/token.do.
Що потрібно для публікації контенту?
Scope VALUABLE_ACCESS обов'язковий. Публікація через mediatopic.post:
POST https://api.ok.ru/fb.do method=mediatopic.post &type=USER_STATUS &attachment={"media":[{"type":"text","text":"Текст поста"}]} Для публікації з фото: спочатку завантажуємо через photosV2.getUploadUrl, потім використовуємо photo token в attachment.
Отримання даних користувача
GET https://api.ok.ru/fb.do?method=users.getCurrentUser&fields=NAME,PIC_1,LOCATION,EMAIL,GENDER&access_token=...&application_key=...&sig=...&format=json
| Поле | Опис |
|---|---|
NAME |
Ім'я користувача |
LAST_NAME |
Прізвище |
PIC_1 |
Аватар 50x50 |
PIC_3 |
Аватар 128x128 |
EMAIL |
Email (тільки з scope GET_EMAIL) |
GENDER |
Стать |
LOCATION |
Локація |
Помилки та їх обробка
-
PARAM_SESSION_EXPIRED— токен вичерпався. OK токени живуть 30-60 днів, refresh token — довше. -
PERMISSION_DENIED— недостатньо scope. -
SERVICE_UNAVAILABLE— API тимчасово недоступний, повтор через експоненційний backoff.
Чому варто обрати нашу інтеграцію?
Гарантуємо коректний підпис запитів та безпеку ключів. Входимо до пулу сертифікованих розробників зі стажем 7+ років. Надаємо документацію та підтримку після впровадження. Замовте інтеграцію OK API під ключ — ми реалізуємо повний цикл від налаштування OAuth до публікації контенту.
Терміни та обсяг робіт
Авторизація через OK + імпорт профілю з бекенд-проксі — 2-3 дні. Публікація з медіа — ще 1-2 дні. Вартість розраховується індивідуально.
Зв'яжіться з нами для оцінки вашого проєкту.







