Интеграция 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
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Интеграция 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 поддерживает несколько 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 — они не восстанавливаются сами.

Что входит в работу

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

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