Інтеграція AI-генерації відео (Runway/Sora) у мобільний застосунок під ключ
Уявіть: користувач натискає «Згенерувати відео», а через хвилину отримує готовий кліп прямо в застосунку. Але реальність така, що моделі на кшталт Runway Gen-3, Sora, Kling вимагають потужних GPU (A100/H100) і часу від 30 секунд до кількох хвилин. Завдання мобільного розробника — організувати асинхронний флоу так, щоб користувач не пішов в очікуванні. Ми інтегруємо ці API у ваш iOS/Android-застосунок, забезпечуючи надійну генерацію, кешування та сповіщення.
Як інтегрувати Runway API у мобільний застосунок?
Runway надає REST API з polling для перевірки статусу. На iOS ми реалізували сервіс з async/await та прогрес-баром, який симулює виконання на основі типового часу генерації. На Android використовуємо WorkManager з CoroutineWorker — завдання виконується у фоні навіть при згортанні застосунку. Ось приклад iOS-сервісу:
class VideoGenerationService { func generate(prompt: String, sourceImage: UIImage?) async throws -> URL { let taskId = try await runwayClient.createTask( prompt: prompt, imageURL: sourceImage.map { try await uploadImage($0) }, duration: 5, ratio: "1280:768" ) UserDefaults.standard.set(taskId, forKey: "pendingVideoTaskId") return try await pollWithBackoff(taskId: taskId) } private func pollWithBackoff(taskId: String) async throws -> URL { let intervals: [TimeInterval] = [3, 5, 8, 10, 10, 15, 15, 20, 20, 30] for interval in intervals + Array(repeating: 30.0, count: 10) { try await Task.sleep(nanoseconds: UInt64(interval * 1e9)) let task = try await runwayClient.getTask(id: taskId) switch task.status { case .succeeded: UserDefaults.standard.removeObject(forKey: "pendingVideoTaskId") return task.output.first! case .failed: throw VideoGenError.generationFailed(task.failure ?? "Unknown") default: continue } } throw VideoGenError.timeout } } На Android: WorkManager з CoroutineWorker — правильний вибір для довгих фонових завдань. Polling в doWork(), Result.retry() при PROCESSING, Result.success(outputData) при SUCCEEDED.
Що робити, якщо генерація займає більше хвилини?
Push-сповіщення — обов'язкова опція. Backend відстежує статус завдання та надсилає FCM/APNs при завершенні. Deep link (Universal Links / App Links) веде на екран результату з автовідтворенням. Якщо користувач згорнув застосунок, прогрес зберігається через pendingTaskId в UserDefaults.
Оцінка реального прогресу без даних від API
Більшість API не повертають відсоток виконання — лише статус PENDING/PROCESSING/SUCCEEDED. Ми використовуємо симульований прогрес-бар: таймер на 55 секунд (95%), потім очікування реальної відповіді. Це краще, ніж порожній спіннер.
Таблиця AI-відео API
| Провайдер | API | Довжина кліпу | Типовий час | Вхідні дані |
|---|---|---|---|---|
| Runway Gen-3 Alpha | REST + polling | 5–10 сек | 30–90 сек | Text, Image-to-Video |
| Kling AI | REST API | 5–10 сек | 60–180 сек | Text, Image-to-Video |
| Hailuo (MiniMax) | REST API | 6 сек | 45–120 сек | Text, Image-to-Video |
| Luma Dream Machine | REST API | 5 сек | 30–60 сек | Text, Image, Keyframes |
| Replicate (різні) | REST + WebSocket | 2–10 сек | 30–120 сек | Залежить від моделі |
Для вибору API орієнтуйтесь на час генерації та довжину кліпу. Runway API — найбільш зрілий з SDK для TypeScript/Python. Sora від OpenAI поки доступна лише через партнерську програму. Дотримання App Store Review Guidelines (розділ 4.2) обов'язкове для публікації.
Порівняння підходів до асинхронної генерації
| Аспект | Polling | WebSocket |
|---|---|---|
| Простота інтеграції | Висока | Середня |
| Точність прогресу | Низька (лише статус) | Висока (повідомлення про кожен крок) |
| Навантаження на сервер | Середнє (часті запити) | Мінімальне (подієво) |
| Відновлення при розриві | Автоматично (повторний запит) | Потрібен реконнект |
Вибір між polling та WebSocket залежить від частоти оновлень і критичності прогресу. Для простих сценаріїв достатньо polling, для складних — WebSocket.
Типові помилки при інтеграції AI-відео
- Не враховувати таймаути: якщо генерація триває довше очікуваного, користувач бачить вічний спіннер.
- Не зберігати
taskIdперед виходом із застосунку: втрата прогресу. - Ігнорувати квоти API: перевищення ліміту призводить до помилок.
- Не оптимізувати кеш: повторне завантаження відео при кожному вході.
Вирішуємо ці проблеми на етапі проєктування.
Що входить у нашу роботу?
- Аналіз: вибір оптимального API під ваші завдання (довжина кліпу, бюджет, якість).
- Інтеграція: реалізація асинхронного флоу з polling, прогрес-баром і кешуванням результату.
- Фонова обробка: WorkManager/BGTaskScheduler для тривалих завдань.
- Push-сповіщення: FCM/APNs з deep linking.
- Документація: керівництво з використання та підтримка.
- Гарантія: 3 місяці безкоштовної підтримки після здачі.
Процес роботи
- Аналітика — вивчаємо ваш застосунок, вибираємо API, оцінюємо навантаження.
- Проєктування — архітектура флоу, схема кешування, безпека.
- Реалізація — написання коду, інтеграція SDK, тестування.
- Тестування — перевірка на реальних пристроях, симуляція помилок.
- Деплой — публікація в App Store / Google Play, налаштування моніторингу.
Терміни та вартість
Базова інтеграція (один API, плеєр, кеш) — від 5 до 7 днів. Повний флоу з фоновими завданнями, push, Image-to-Video та галереєю — 3–4 тижні. Точна вартість розраховується індивідуально після ознайомлення з проєктом.
Наш досвід інтеграції AI-функцій — понад 5 років і 15+ успішних проєктів. Ми гарантуємо якість і дотримання App Store Review Guidelines (розділ 4.2).
Готові почати? Зв'яжіться з нами для попередньої оцінки. Отримайте консультацію з вибору API та архітектури вже сьогодні.







