Интеграция 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 — по тем же причинам, что и любые сервисные ключи. Обязательная схема: бэкенд хранит credentials и обновляет токен, мобильный клиент работает через проксирующий 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 через проксирующий бэкенд
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
)
Потоковый режим возвращает 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 последних), иначе входной контекст быстро переполнится.
Процесс работы
Проектирование прокси-сервиса с управлением OAuth-токеном и его автоматическим обновлением. Решение SSL-вопроса (CA Сбера или свой домен). Выбор модели под сценарий. Интеграция потокового чата в мобильное приложение с типичным bubble-UI. Тестирование на качество русскоязычных ответов — GigaChat особенно хорош для деловой переписки и финансовых текстов.
Ориентиры по срокам
Настройка авторизации и базовых запросов — 2–3 дня. Полный чат с историей, потоковой генерацией и обработкой изображений — 6–10 дней.







