Интеграция Одноклассники API в мобильное приложение
Одноклассники (OK.ru) — вторая по размеру русскоязычная социальная сеть. Аудитория сдвинута в сторону 35+, поэтому актуальна для приложений из сегментов ретейла, медиа, сервисов для семьи. API называется OK API, OAuth-поток стандартный, но подпись запросов отличается от ВКонтакте.
Регистрация приложения и ключи
На dev.ok.ru создаём приложение, получаем три ключа: application_id, application_key (публичный), application_secret_key (приватный, только на сервере). Тип приложения — «Mobile».
Авторизация: 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.
Подпись запросов
Это главное отличие OK API. Каждый запрос подписывается:
sig = MD5(params_sorted_alphabetically + MD5(access_token + application_secret_key))
Шаги:
- Берём все параметры запроса кроме
sigиaccess_token. - Сортируем по имени параметра, конкатенируем в строку
key=value. - Считаем
session_secret = MD5(access_token + application_secret_key)— это делается на сервере, секрет не передаётся клиенту. -
sig = MD5(params_string + session_secret).
Передавать application_secret_key на клиент нельзя — только через бэкенд-прокси. Архитектура: клиент запрашивает ваш бэкенд → бэкенд добавляет подпись → проксирует запрос к OK API.
OK SDK для мобильных платформ
iOS: OKLoginSDK через CocoaPods или SPM (неофициальный). Официального поддерживаемого Swift SDK нет — обычно реализуют OAuth-поток вручную через ASWebAuthenticationSession.
Android: Официальный ok-android-sdk на GitHub. Подключение через Gradle:
implementation 'ru.ok.android:sdk:3.0.18'
Авторизация:
OkAuthManager.startOkAutoExternal(activity, listOf(OkScope.GET_EMAIL, OkScope.VALUABLE_ACCESS))
// В onActivityResult:
val token = OkAuthManager.onActivityResult(requestCode, resultCode, data, listener)
Получение данных пользователя
GET https://api.ok.ru/fb.do
?method=users.getCurrentUser
&fields=NAME,PIC_1,LOCATION,EMAIL,GENDER
&access_token=...
&application_key=...
&sig=...
&format=json
Поля профиля OK отличаются от VK: NAME — имя, LAST_NAME — фамилия, PIC_1 — аватар 50x50, PIC_3 — аватар 128x128. Email выдаётся только при scope GET_EMAIL и только если пользователь его указал.
Публикация в OK
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.
Ошибки
-
PARAM_SESSION_EXPIRED— токен истёк. OK токены живут 30-60 дней, refresh token — дольше. -
PERMISSION_DENIED— недостаточно scope. -
SERVICE_UNAVAILABLE— API временно недоступен, повтор через экспоненциальный backoff.
Сроки
Авторизация через OK + импорт профиля с бэкенд-прокси для подписи — 2-3 дня. Публикация с медиа — ещё 1 день. Стоимость рассчитывается индивидуально.







