11

我想使用 AWS AppSync 进行移动开发 (Android/iOS),但我不确定它的离线功能。

根据文档,数据将在离线时可访问,如果客户端再次在线,数据将自动同步。但在使用 AppSync 创建和修改离线数据之前,我找不到有关应用程序客户端是否需要先连接到 AWS 的任何信息。

我不熟悉 AppSync 的底层技术(例如 GraphQL),也无法访问公共预览版来自己测试它。

我想让对隐私敏感的用户能够在不连接到 AWS 的情况下使用应用程序,同时仍然能够将 AppSync 用作离线数据库。只有当用户后来决定跨设备使用备份/同步数据时,他或她才能选择连接到 AWS。

AWS AppSync 是否可以使用此用例?

不使用任何其他本地存储(如 SharedPreferences、SQLite、Realm 等)

4

3 回答 3

1

Firestore、AWS AppSync 或您自己的后端解决方案应该可以实现。您使用的任何方法,您都可以控制何时开始在线保存/同步内容。

在设计此应用程序时,您需要处理所有这些。建议的方法

让我们以简单的ToDo 应用为例

  • 我会让用户在应用程序中添加和保存待办事项

  • 所有这些数据都将保存在磁盘上(使用 SQLLITE、首选项或文件等)

  • 如果用户确实清除数据或重新安装应用程序,所有这些数据都会丢失
  • 如果用户想要付费,我会让他将这些数据与我的后端解决方案同步(上述任何一种解决方案)

使用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
}
于 2018-01-06T17:32:47.957 回答
0

您可以阅读 https://docs.aws.amazon.com/appsync/latest/devguide/building-a-client-app-reactnative.html

AWS AppSync 支持离线模式,您可以为您的应用程序使用数据库

于 2018-01-08T12:25:18.863 回答
0

使用 Realm Database 管理所有离线和在线数据,并在应用程序卸载时保存

于 2018-01-07T06:39:01.193 回答