Ви вбудовуєте ChatGPT у мобільний застосунок. Перша проблема: API-ключ не можна зберігати в коді, інакше його вкрадуть. Друга: синхронний запит змушує користувача чекати 3–8 секунд — це вбиває UX. Третя: кожен токен коштує грошей, і без контролю витрати вийдуть за бюджет. Наші інженери вирішують ці задачі вже понад п'ять років, маючи за плечима десятки проєктів з інтеграції AI у мобільні застосунки. Ми сертифіковані Apple та Google, гарантуємо безпеку та продуктивність.
Як захистити API-ключ OpenAI у мобільному застосунку?
Єдиний безпечний спосіб — не зберігати ключ на клієнті. Ми проєктуємо backend-proxy: застосунок надсилає запити на ваш сервер, сервер авторизує користувача, застосовує rate limiting, логує витрати, підставляє ключ OpenAI та повертає відповідь. Додатково proxy кешує типові відповіді, знижуючи витрати на input_tokens на 20–30%. У результаті ні ключ, ні історія викликів не доступні на пристрої. Це підтверджується рекомендаціями Apple App Store Review Guidelines (Section 5.1).
Як організувати потокове виведення?
OpenAI повертає відповідь порціями через Server-Sent Events. Клієнт отримує рядки data:, кожен містить фрагмент delta.content. На iOS використовуємо URLSessionDataDelegate:
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { let lines = String(data: data, encoding: .utf8)?.components(separatedBy: "\n") ?? [] for line in lines where line.hasPrefix("data: ") { let jsonString = String(line.dropFirst(6)) guard jsonString != "[DONE]" else { return } // парсимо delta.content з JSON } } На Android — OkHttp з okhttp-sse:
val eventSource = EventSources.createFactory(client) .newEventSource(request, object : EventSourceListener() { override fun onEvent(source: EventSource, id: String?, type: String?, data: String) { if (data == "[DONE]") return // парсимо delta.content } }) Перший токен приходить через 200–400 мс. UI оновлюємо не частіше 50–100 мс, щоб не перевантажувати потік. Потокове виведення зменшує час очікування першої відповіді в 10 разів порівняно з повним завантаженням — користувач бачить текст практично миттєво.
Як керувати контекстом діалогу?
ChatGPT stateless — історію передаєте ви в масиві messages. Щоб не перевищити 128k токенів і не розоритися, застосовуємо одну з тактик:
- Sliding window — останні 10–15 повідомлень, решту відкидаємо (економія 40–60%).
- Summarization — при перевищенні порогу 8000 токенів стискаємо стару історію окремим запитом (економія 20–30%, але додає один API-виклик).
- Selective memory — зберігаємо лише факти, які користувач явно вказав (економія 10–15%, складніша в реалізації).
| Тактика | Економія токенів | Додаткові запити |
|---|---|---|
| Sliding window | 40–60% | 0 |
| Summarization | 20–30% | 1 на стиснення |
| Selective memory | 10–15% | 0 (потрібен парсинг важливості) |
Як відстежувати витрати?
Кожна відповідь містить usage.total_tokens. Логуємо його в Firebase або ваш backend. Встановлюємо жорсткий cap через OpenAI Usage Limits dashboard. Обмежуємо max_tokens під задачу — не 4096 там, де достатньо 256. Кешуємо system prompt через Prompt Caching — це знижує input-вартість на 35%.
Кейс: застосунок для мов з AI-репетитором (наш клієнт)
Наш клієнт розробляв застосунок для вивчення мов з AI-репетитором. Ми використовували gpt-4o-mini, streaming, контекст — останні 10 повідомлень + system prompt (300 токенів). Середній запит: 450 input + 180 output токенів. При 500 DAU і 15 повідомленнях у сесію — 3.4M токенів/день. Prompt Caching заощадив 35% input-вартості, що знизило щомісячні витрати на кілька сотень доларів.
Обробка помилок і типові помилки
429 — експоненційний backoff: 1s, 2s, 4s, до 3 retry. 503 — аналогічно. 400 — зазвичай неправильний формат messages. Всі помилки логуємо в Crashlytics / Sentry без ключа.
Типові помилки при інтеграції:
- Зберігання ключа в UserDefaults / SharedPreferences.
- Відсутність debounce на введення — кожен символ надсилає запит.
- Ігнорування SSE парсингу на Android — використовують
ResponseBodyзамістьEventSource. - Перевищення лімітів токенів без summarization — контекст зростає нескінченно.
Що входить у роботу
- Документація API та архітектура backend-proxy
- Вихідний код інтеграції на Swift/Kotlin/Flutter
- Навантажувальне тестування зі звітом
- Інструкція з розгортання та CI/CD
- Навчання команди (1–2 години вебінару)
- Підтримка при публікації в App Store / Google Play
Як ми це робимо
Процес із п'яти кроків:
- Аналітика — розбираємо вашу архітектуру, вибираємо стратегію контексту та кешування.
- Проєктування — проєктуємо backend-proxy, схему маршрутизації, специфікацію API.
- Реалізація — пишемо код на Swift/Kotlin/Flutter, налаштовуємо streaming, логування, обробку помилок.
- Тестування — навантажувальне тестування з емуляцією реального трафіку, перевірка безпеки.
- Деплой — розгортання backend-proxy, налаштування CI/CD, публікація в App Store / Google Play.
Терміни та вартість
Базова інтеграція з потоковим виведенням, керуванням контекстом і backend-proxy — 3–5 робочих днів. Вартість розраховується індивідуально. Отримайте консультацію: напишіть нам, обговоримо ваш проєкт. Замовте інтеграцію ChatGPT API вже сьогодні.







