【问题标题】:How to backup user data on Google drive and Dropbox for flutter apps?如何在 Google Drive 和 Dropbox 上为 Flutter 应用备份用户数据?
【发布时间】:2021-02-19 22:23:54
【问题描述】:

如何备份用户谷歌驱动帐户和保管箱上的数据并在重新安装或在不同设备上安装应用程序后恢复它们?

我见过允许用户通过 google drive 登录并定期备份到用户云的应用程序。

用户数据包含图像文件、Sql 数据库和共享首选项。

我不想使用 firebase 云,因为数据是由用户自己而不是其他用户访问的,如果数据很大,成本会很高。有没有可用的软件包可以做到这一点?或教程,否则如何在颤振中实现这一目标?

【问题讨论】:

    标签: android ios flutter backup


    【解决方案1】:

    这是一种很简单的google方式,但是我还没有处理过Drop box

    注意:这里用一个简单的例子来说明方法

    按照以下步骤操作:

    1-添加依赖:

    dependencies:
      googleapis: ^0.56.1
      google_sign_in: ^4.5.6
    

    2-添加这些导入:

    import 'package:googleapis/drive/v3.dart' as drive;
    import 'package:google_sign_in/google_sign_in.dart' as signIn;
    

    3-Google 登录

    打开 main.dart,找到_incrementCounter() 函数,当用户点击加号按钮时调用该函数,然后编辑如下:

    Future<void> _incrementCounter() async {
      setState(() {
        _counter++;
      });
    
      final googleSignIn = signIn.GoogleSignIn.standard(scopes: [drive.DriveApi.DriveScope]);
      final signIn.GoogleSignInAccount account = await googleSignIn.signIn();
      print("User account $account");
    } 
    

    4-创建一个新的 Firebase 项目:

    您可以勾选this创建项目,并启用Auth Google

    5-启用 Google Drive API:

    您也可以前往Google Cloud Console,在搜索栏搜索“Google Drive API”。点击“启用”。

    6-将文件上传到 Google 云端硬盘:

    使用http 包创建一个新文件GoogleAuthClient.dart。 GoogleAuthClient 类基于BaseCleint,它已经支持所有标准的HTTP 请求:POST、GET 等。我们在里面包装另一个Client 并实现发送函数,稍后我们将在其中注入身份验证头。

    import 'package:http/http.dart' as http;
    
    class GoogleAuthClient extends http.BaseClient {
      final Map<String, String> _headers;
    
      final http.Client _client = new http.Client();
    
      GoogleAuthClient(this._headers);
    
      Future<http.StreamedResponse> send(http.BaseRequest request) {
        return _client.send(request..headers.addAll(_headers));
      }
    }
    

    现在我们使用上述用户帐户的身份验证标头创建一个 GoogleAuthClient,然后使用它创建一个 Google Drive API 对象 DriveApi。

    final authHeaders = await account.authHeaders;
    final authenticateClient = GoogleAuthClient(authHeaders);
    final driveApi = drive.DriveApi(authenticateClient);
    

    最后,让我们上传一个文件:

    final Stream<List<int>> mediaStream =
        Future.value([104, 105]).asStream().asBroadcastStream();
    var media = new drive.Media(mediaStream, 2);
    var driveFile = new drive.File();
    driveFile.name = "hello_world.txt";
    final result = await driveApi.files.create(driveFile, uploadMedia: media);
    print("Upload result: $result");
    

    【讨论】:

    • 应用数据应该如何保存和恢复?我应该压缩整个应用程序目录并上传吗?还有如何恢复数据。谢谢
    • 不错!但现在我想知道如何像 WhatsApp 一样备份数据。你知道吗?
    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多