如何为 flutter 应用备份 Google Drive 和 Dropbox 上的用户数据?

Sal*_*bri 6 backup android ios flutter

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

我见过一些应用程序允许用户通过谷歌驱动器登录并定期备份到用户云。

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

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

Ade*_*ouh 5

这是一种非常简单的谷歌方式,但我还没有处理过投递箱

\n
\n

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

\n
\n

按着这些次序:

\n

1-添加依赖项:

\n
dependencies:\n  googleapis: ^0.56.1\n  google_sign_in: ^4.5.6\n
Run Code Online (Sandbox Code Playgroud)\n

2-添加这些导入:

\n
import \'package:googleapis/drive/v3.dart\' as drive;\nimport \'package:google_sign_in/google_sign_in.dart\' as signIn;\n
Run Code Online (Sandbox Code Playgroud)\n

3-谷歌登录

\n

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

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

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

\n

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

\n

5-启用 Google Drive API:

\n

您还可以转到Google Cloud Console,查找搜索栏并搜索 \xe2\x80\x9cGoogle Drive API\xe2\x80\x9d。单击\xe2\x80\x9cENABLE\xe2\x80\x9d。

\n

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

\n

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

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

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

\n
final authHeaders = await account.authHeaders;\nfinal authenticateClient = GoogleAuthClient(authHeaders);\nfinal driveApi = drive.DriveApi(authenticateClient);\n
Run Code Online (Sandbox Code Playgroud)\n

最后,让\xe2\x80\x99s上传一个文件:

\n
final Stream<List<int>> mediaStream =\n    Future.value([104, 105]).asStream().asBroadcastStream();\nvar media = new drive.Media(mediaStream, 2);\nvar driveFile = new drive.File();\ndriveFile.name = "hello_world.txt";\nfinal result = await driveApi.files.create(driveFile, uploadMedia: media);\nprint("Upload result: $result");\n
Run Code Online (Sandbox Code Playgroud)\n