Інтеграція GigaChat API у мобільний додаток
GigaChat від Сбера — альтернатива OpenAI для російського ринку з кількома специфічними особливостями: OAuth 2.0-авторизація через https://ngw.devices.sberbank.ru:9443/api/v2/oauth, власний формат multipart-запитів для роботи з зображеннями та можливість роботи в закритому контурі без передачі даних за кордон. Останнє критично для фінтех та медичних додатків.
Авторизація: розповсюджені помилки
OAuth-токен GigaChat живе 30 хвилин. Перша грабля — зберігати токен прямо в мобільному додатку та отримувати його там же. Client Secret для GigaChat не можна вбудовувати в APK або IPA — з тих же причин, що й будь-які сервісні ключі. Обов'язкова схема: backend зберігає облікові дані та оновлює токен, мобільний клієнт працює через proxy API.
Сертифікат Сбера для ngw.devices.sberbank.ru не включений у стандартні trust stores Android та iOS. При першій інтеграції це дає SSLHandshakeException / URLError.serverCertificateUntrusted без зрозумілого повідомлення. Рішення — або Certificate Pinning з додаванням Сбер CA, або проксирування через власний домен із валідним TLS.
// Android: OkHttp з користувацьким TrustManager для Сбер-сертифіката
val sberCertStream = context.assets.open("sber_ca.crt")
val cf = CertificateFactory.getInstance("X.509")
val sberCert = cf.generateCertificate(sberCertStream)
val keyStore = KeyStore.getInstance(KeyStore.getDefaultType()).apply {
load(null, null)
setCertificateEntry("sber", sberCert)
}
val tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()).apply {
init(keyStore)
}
val sslContext = SSLContext.getInstance("TLS").apply {
init(null, tmf.trustManagers, null)
}
val client = OkHttpClient.Builder()
.sslSocketFactory(sslContext.socketFactory, tmf.trustManagers[0] as X509TrustManager)
.build()
Робота з API: формат запитів
GigaChat підтримує формат, сумісний з OpenAI (/chat/completions), що спрощує перенесення логіки з GPT-4. Різниця — в параметрі model: використовуйте GigaChat, GigaChat-Plus, GigaChat-Pro.
// iOS: запит до GigaChat через proxy backend
struct GigaChatMessage: Codable {
let role: String
let content: String
}
struct GigaChatRequest: Encodable {
let model: String
let messages: [GigaChatMessage]
let stream: Bool
let temperature: Double
}
let request = GigaChatRequest(
model: "GigaChat",
messages: [
GigaChatMessage(role: "system", content: systemPrompt),
GigaChatMessage(role: "user", content: userInput)
],
stream: true,
temperature: 0.7
)
Режим streaming повертає Server-Sent Events — обробка подібна до YandexGPT: парсинг рядків data: через URLSessionDataDelegate на iOS або EventSource на Android.
Особливості для мобільного UX
GigaChat вміє працювати з зображеннями (GigaChat-Pro). Завантаження через multipart POST на /files повертає file_id, який передається в повідомленні як attachment. Для мобільного додатку це означає: спочатку завантажити фото, отримати id, потім відправити в чат — два окремі запити.
Обмеження токенів: GigaChat — 8k, GigaChat-Pro — 32k. На мобільному клієнті скорочуйте історію діалогу до розумної кількості повідомлень (10–15 останніх), інакше вхідний контекст швидко переповниться.
Процес реалізації
Проектування proxy-сервісу з керуванням OAuth-токеном та його автоматичним оновленням. Вирішення SSL-питання (Сбер CA або власний домен). Вибір моделі під сценарій. Інтеграція потокового чату в мобільний додаток з типовим bubble-UI. Тестування якості російськомовних відповідей — GigaChat особливо гарний для ділової переписки та фінансових текстів.
Орієнтири за часом
Налаштування авторизації та базових запитів — 2–3 дні. Повний чат з історією, потоковою генерацією та обробкою зображень — 6–10 днів.







