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

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

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

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

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

AWS AppSync — managed GraphQL сервіс від Amazon. Він бере на себе хостинг GraphQL API, підключення до джерел даних (DynamoDB, Lambda, RDS, Elasticsearch), WebSocket-підключення для subscriptions та оффлайн-синхронізацію через конфлікт-резолюцію. Для мобільних додатків це означає: одна точка входу замість кількох REST еендпоїнтів, real-time з коробки та вбудована оффлайн-робота через Amplify DataStore.

Архітектура: AppSync + Amplify vs голий Amplify SDK

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

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

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

Налаштування: amplify.json та codegen

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 запити та маппінг.

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-ад.

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 підтримує кілька режимів аутентифікації одночасно:

Режим Коли використовувати
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 з audit-логом.

Типові проблеми при інтеграції

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

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

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

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

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

Термін: 2–4 тижні залежно від складності схеми даних та вимог до оффлайн-функціональності.