Интеграция Одноклассники 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 дня. Стоимость рассчитывается индивидуально.
Свяжитесь с нами для оценки вашего проекта.







