Можно ли создавать мобильные приложения в автономном режиме с помощью AWS AppSync?

Я бы хотел использовать AWS AppSync для разработки мобильных приложений (Android/iOS), но я не уверен в его автономных возможностях.

Согласно документации, данные будут доступны в автономном режиме и будут автоматически синхронизироваться, если клиент снова подключится к сети. Но я не могу найти никакой информации о том, нужно ли клиенту приложения сначала подключиться к AWS, прежде чем использовать AppSync для создания и изменения автономных данных.

Я не знаком с базовыми технологиями AppSync (например, GraphQL), и у меня нет доступа к общедоступной предварительной версии, чтобы протестировать ее самостоятельно.

Я хотел бы позволить пользователям, чувствительным к конфиденциальности, использовать приложение без подключения к AWS, но при этом использовать AppSync в качестве автономной базы данных. Только если впоследствии пользователь решит использовать данные резервного копирования / синхронизации на разных устройствах, он или она сможет подключиться к AWS.

Будет ли этот вариант использования возможен с AWS AppSync?

Без использования какого-либо другого локального хранилища (например, SharedPreferences, SQLite, Realm и т. Д.)

5 ответов

Это должно быть возможно с Firestore, AWS AppSync или вашим собственным решением Backend. Любой подход, который вы используете, вы будете контролировать, когда захотите начать сохранять / синхронизировать вещи в Интернете.

Вы должны справиться со всем этим при разработке этого приложения. Предлагаемый подход

Давайте рассмотрим пример простого приложения ToDo

  • Я позволю Пользователю добавлять и сохранять Тодос в приложении

  • Все эти данные будут сохранены на диске (используя SQLLITE, Preferences или File и т. Д.)

  • Если пользователь очищает данные или переустанавливает приложение, все эти данные теряются
  • Если пользователь хочет получить премию, я позволю ему синхронизировать эти данные с моим решением Backend (любым из вышеупомянутых решений)

Пример реализации с использованием предпочтения Android Shared в качестве локального хранилища

public void saveLocalTodo(String title, String details) {
    ArrayList<Todo> todos;
    Todo todo = new Todo(title, details);
    String listOfTodo = sharedPreference.getString(TODOS_LIST, null);
    if (listOfTodo == null)
        todos = new ArrayList<Todo>();
    else
        todos = gson.fromJson(listOfTodo, new TypeToken<ArrayList<Todo>>() {
        }.getType());

    //save at 0th position, recent should always come first
    todos.add(0, todo);
    sharedPreference.edit().putString(TODOS_LIST, gson.toJson(todos)).apply();
}

public ArrayList<Todo> getLocalTodos() {
    ArrayList<Todo> todos;
    String listOfTodos = sharedPreference.getString(TODOS_LIST, null);
    if (listOfTodos == null)
        todos = new ArrayList<Todo>();
    else
        todos = gson.fromJson(listOfTodos, new TypeToken<ArrayList<Todo>>() {
        }.getType());
    return todos;
}

public void saveOnBackend() {
    // Connect to Backend solution

    // Get all local todos from preference
    // Save all at once in batches

    //OR

    // Get all local todos from preference
    // Save one by one
}

Вы можете прочитать https://docs.aws.amazon.com/appsync/latest/devguide/building-a-client-app-reactnative.html

AWS AppSync поддерживает автономный режим, и вы можете использовать базу данных для своего приложения

Используйте базу данных Realm для управления всеми автономными и онлайн-данными и сохранения, если приложение удаляется

Если вы хотите сохранить и повторно обработать свой Apollo Cache у поставщика хранилища, такого как AsyncStorage или localStorage, вы можете использовать apollo-cache-persist:

https://www.apollographql.com/docs/react/advanced/caching.html https://github.com/apollographql/apollo-cache-persist

Для использования автономной синхронизации данных Azure приложение ToDo, указанное в качестве образца, более чем достаточно.

Мобильный SDK Azure предоставляет необходимые классы и методы для онлайн-синхронизации и автономной синхронизации. SDK сам создает местный Sqlite wrapper storage что следующего.

com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore

Нам, как разработчику, не нужно явно обращаться к другим библиотекам. Но опять же зависит от требования

Я использовал SDK для Android и обнаружил следующее. Используя методы, данные, мобильный SDK будет загружать в соответствии с логикой программистов. Я имею в виду pull Метод будет синхронизировать ожидающие данные, которые имеют изменения относительно серверной БД.

Предположим, ваше имя таблицы MobileServiceSyncTable<YourClass> mTable

После проверки доступности сети или ее отсутствия в зависимости от вашего состояния вы можете перейти к синхронизации с сервером.

if (condition) 
{
  mTable.pull(queryTable,queryId).get();
}

Теперь queryTable может быть сформирован в соответствии с требованием. Для меня я должен был рассмотреть все столбцы, определенные в моем mTable Был ли запрос, который я создал, был таким

Query queryTable = mClient.getTable(YourClass.class).select();

Но на стороне сервера, соответственно, должна присутствовать ожидаемая реализация Azure. В противном случае данные будут не соответствовать. Поскольку внутренне SDK отправит запрос на сервер с параметрами, которые серверу необходимо учесть и реализовать

Для автономного поиска данных нам не нужно использовать метод pull. В приведенном ниже примере будут получены данные.

Есть соответствующий метод и классы для iOS а также в Azure SDK за iOS,

mTable.read(queryTable).get();

Но, согласно моим исследованиям, я не смог найти метод / классы, которые бы автоматически синхронизировали SDK онлайн. В моем приложении я решал, основываясь на моей бизнес-логике, когда мне нужно синхронизировать данные и когда читать из локального хранилища. Если у кого-то есть лучшее понимание этого, пожалуйста, дайте мне знать

Если у вас есть доступ к ссылкам SDK и API, нижеуказанные классы могут рассматриваться как важные.

1) com.microsoft.windowsazure.mobileservices.MobileServiceClient
2) com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable
3) com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext
4) com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore
5) com.microsoft.windowsazure.mobileservices.table.query.Query
Другие вопросы по тегам