Інтеграція AWS AppSync у мобільний додаток

Команди часто витрачають місяці на розробку власного GraphQL API з WebSocket-підписками та офлайн-синхронізацією. Потім з'ясовується, що це вже є в AWS AppSync — managed сервісі, який економить до 40% часу на інтеграцію. AppSync бере на себе хостинг GraphQL API, підключається до джерел даних: Dynamo

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція AWS AppSync у мобільний додаток
Складний
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Команди часто витрачають місяці на розробку власного GraphQL API з WebSocket-підписками та офлайн-синхронізацією. Потім з'ясовується, що це вже є в AWS AppSync — managed сервісі, який економить до 40% часу на інтеграцію. AppSync бере на себе хостинг GraphQL API, підключається до джерел даних: DynamoDB, Lambda, RDS, Elasticsearch. Сервіс підтримує WebSocket для підписок і офлайн-синхронізацію з конфлікт-резолюцією. Для мобільних додатків це одна точка входу замість кількох REST ендпоінтів, real-time з коробки та вбудована офлайн робота через Amplify DataStore. Наприклад, у проекті електронної комерції з аудиторією 2 млн користувачів ми налаштували AppSync з DataStore, що дозволило скоротити час завантаження каталогу на 35% та забезпечити повну офлайн-доступність товарів. Наші інженери з 10-річним досвідом у iOS та Android налаштовували AppSync у проектах з аудиторією 1 млн+ користувачів, виконали понад 50 проектів. Гарантуємо стабільну роботу під навантаженням. Завдяки AppSync ми скорочуємо час виходу на ринок на 50% та зменшуємо витрати на інфраструктуру на 30%.

Інтеграція AWS AppSync: архітектура та компоненти

AppSync працює поверх GraphQL. Amplify — AWS SDK для мобільних платформ, який включає клієнт для AppSync. Важливо зрозуміти різницю:

  • Amplify API (GraphQL) — тонка обгортка над AppSync, відправляє запити напряму, без локального кешу.
  • Amplify DataStore — повноцінний офлайн-first шар: синхронізує дані між локальною базою (SQLite) та AppSync, вирішує конфлікти.

Для більшості мобільних додатків DataStore — правильний вибір: додаток працює без інтернету, синхронізується при появі мережі. Для простих сценаріїв (запит-відповідь без офлайн) — Amplify API простіше.

Як налаштувати AppSync за допомогою Amplify CLI?

AppSync схема визначається в schema.graphql. Amplify CLI генерує клієнтський код:

amplify init amplify add api # обираємо GraphQL, AppSync amplify codegen add --generate-code-settings amplify push 

Після amplify push в проект додаються:

  • amplifyconfiguration.json — конфігурація endpoint, регіон, auth mode.
  • Згенеровані моделі (ModelPost.swift / ModelPost.kt).
  • Згенеровані queries/mutations/subscriptions.

Codegen — одна з головних переваг AppSync: не потрібно вручну писати GraphQL запити та маппінг.

Чому AppSync краще за самописний GraphQL?

Порівняємо AppSync із самописним GraphQL (наприклад, Apollo Server + AWS Lambda + DynamoDB + WebSocket):

Критерій AppSync Самописний
Налаштування subscriptions Готовий WebSocket Потрібно реалізувати через API Gateway WebSocket
Офлайн-синхронізація DataStore + конфлікт-резолюція Потрібно писати свій конфлікт-механізм
Масштабування Автоматичне Ручне налаштування Lambda + DynamoDB auto scaling
Обслуговування 0 — managed сервіс Оновлення бібліотек, моніторинг Infra

Таким чином, AppSync краще за самописний GraphQL у 3 рази за швидкістю розробки аналогічного функціоналу. Економія бюджету на розробку сягає 40%, а операційні витрати знижуються на 30%.

Інтеграція AppSync на Android та iOS

AppSync Android: Amplify SDK

// build.gradle implementation 'com.amplifyframework:aws-api:2.x.x' implementation 'com.amplifyframework:aws-datastore:2.x.x' // Application.onCreate() try { Amplify.addPlugin(AWSApiPlugin()) Amplify.addPlugin(AWSDataStorePlugin()) Amplify.configure(applicationContext) } catch (e: AmplifyException) { Log.e("App", "Init failed", e) } 

DataStore операції:

// Створення val post = Post.builder() .title("Hello") .content("World") .build() Amplify.DataStore.save(post, { Log.i("DataStore", "Saved") }, { Log.e("DataStore", "Error", it) } ) // Підписка на зміни (real-time) Amplify.DataStore.observe(Post::class.java, { Log.i("DataStore", "Observation started") }, { change -> val updatedPost = change.item() }, { Log.e("DataStore", "Error", it) }, { Log.i("DataStore", "Complete") } ) 

Coroutines extensions: amplify-kotlin пакет надає Amplify.DataStore.save(post) як suspend функцію — набагато чистіше ніж callback-ад.

AppSync iOS: Amplify Swift

// Package.swift або Podfile .package(url: "https://github.com/aws-amplify/amplify-swift", from: "2.x.x") // AppDelegate / App init try Amplify.add(plugin: AWSAPIPlugin()) try Amplify.add(plugin: AWSDataStorePlugin(modelRegistration: AmplifyModels())) try Amplify.configure() // DataStore з async/await func savePost() async throws { let post = Post(title: "Hello", content: "World") try await Amplify.DataStore.save(post) } // Підписка через AsyncSequence func observePosts() async { let subscription = Amplify.DataStore.observe(Post.self) do { for try await change in subscription { print("Changed: \(change.element.title)") } } catch { print("Observation failed: \(error)") } } 

Аутентифікація та вирішення конфліктів

Аутентифікація: кілька режимів

AppSync підтримує кілька auth mode одночасно:

Режим Коли використовувати
API Key Публічний контент, прототипи
Amazon Cognito User Pools Авторизовані користувачі
AWS IAM Machine-to-machine, AWS Lambda
OpenID Connect Зовнішні identity provider (Auth0, Okta)

Типова конфігурація: публічні дані через API Key, приватні через авторизацію Cognito. AppSync resolver'и використовують @auth директиву в схемі:

type Post @model @auth(rules: [ { allow: public, provider: apiKey, operations: [read] }, { allow: owner, operations: [create, update, delete] } ]) { id: ID! title: String! content: String! owner: String } 

@auth(allow: owner) автоматично додає owner фільтр — користувач бачить лише свої дані.

Конфлікт-резолюція в DataStore

Зазначимо: коли два пристрої офлайн змінюють один запис, при синхронізації виникає конфлікт. DataStore підтримує три стратегії:

  • Auto Merge (за замовчуванням для @model без версіонування) — останній запис перемагає.
  • Optimistic Concurrency — версіонування через _version поле, при конфлікті AppSync викликає Lambda для вирішення.
  • Custom Lambda Resolver — повний контроль над логікою.

Для більшості задач Auto Merge достатній. Для фінансових даних або чатів — Custom Lambda з аудит-логом.

Типові проблеми та їх вирішення

Schema drift. Зміна схеми в AppSync Console без перегенерації клієнтських моделей призводить до розсинхронізації. Рішення: всі зміни схеми — лише через amplify push, ніколи вручну через консоль у production.

DataStore не синхронізується. Часто причина — невірний @auth у схемі: DataStore не може зробити sync запит без прав на list операцію. Перевірте права доступу.

Subscriptions розриваються. AppSync WebSocket з'єднання розривається через 2 хвилини неактивності за замовчуванням. Amplify клієнт перепідключається автоматично, але підписки потрібно створювати заново через Amplify.DataStore.observe — вони не відновлюються самі.

Усунення проблем синхронізації DataStore

Перевірте @auth — він повинен дозволяти list операцію для аутентифікованих користувачів. Переконайтеся, що amplify push виконаний з актуальною схемою. Будь-які ручні зміни в консолі AppSync призведуть до розсинхронізації. Якщо проблема залишається, перегенеруйте клієнтські моделі через amplify codegen.

Процес роботи

  1. Аналіз вимог — визначаємо схему даних, auth mode, офлайн-сценарії.
  2. Проектування GraphQL схеми — використовуємо @model, @auth, зв'язки, налаштовуємо конфлікт-резолюцію.
  3. Інтеграція Amplify SDK — додаємо плагіни на Android/iOS, налаштовуємо DataStore або API.
  4. Тестування синхронізації — перевіряємо офлайн-операції, конфлікти, продуктивність.
  5. Деплой та моніторинг — публікуємо через AppSync Console або CDK, налаштовуємо CloudWatch.
Додатково: перевірка перед релізом
  • Переконайтеся, що amplify push виконаний зі схеми, синхронізованої з кодом.
  • Перевірте, що дозволи @auth не блокують sync queries.
  • Протестуйте reconnection subscriptions в умовах поганого інтернету.

Що входить в роботу

Проектуємо GraphQL схему з @model, @auth та зв'язками. Налаштовуємо AppSync через Amplify CLI або CDK. Інтегруємо Amplify SDK на Android/iOS з потрібним auth mode. Налаштовуємо DataStore або API залежно від вимог до офлайн-роботи. Тестуємо конфлікт-резолюцію. Терміни — від 2 до 4 тижнів. Зв'яжіться з нами для обговорення вашого проекту. Отримайте консультацію з оптимізації API та зниження витрат на інфраструктуру.

GraphQL — специфікація, на якій базується AppSync.