Можно ли создавать мобильные приложения в автономном режиме с помощью 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