如何通过 firebaseUI 使用 google api(如 google Drive)

问题描述 投票:0回答:1

嗨,我按照使用 FirebaseUI 将用户身份验证流程添加到 Flutter 桌面应用程序的教程进行操作,之后我想使用 google api。


Future<void> _createFile() async{
  var httpClient = ???? ;

  final driveApi = drive.DriveApi(httpClient);

  final folder = drive.File()
    ..name = 'My New Folder'
    ..mimeType = 'application/vnd.google-apps.folder';
  final folderInfo = await driveApi.files.create(folder);

  final list = await driveApi.files.list();
  for (var file in list.files!) {
    print('${file.name})');
  }
  if(list.files!.isEmpty){
    debugPrint("aucun fichier dans le drive");
  }
}
I don't know how to get the httpClient.


在我使用的Android上


GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'email',
    'https://www.googleapis.com/auth/drive',
  ],
);

var httpClient = (await _googleSignIn.authenticatedClient())!;
但它在 Windows 上不起作用

firebaseui
1个回答
0
投票

希望这对兄弟有帮助,

首先,确保将 googleapis 和 googleapis_auth 包添加到 pubspec.yaml 中。

dependencies:
  googleapis: ^1.0.0
  googleapis_auth: ^1.0.0
  # ... other dependencies ...

然后您需要在 Google Cloud Console 中设置 OAuth 2.0 凭据:

转到 Google Cloud Console。 创建一个新项目或选择现有项目。 导航到“API 和服务”>“凭据”部分。 单击“创建凭据”并选择“OAuth 客户端 ID”。 选择“桌面应用程序”作为应用程序类型。 保存客户端 ID 和客户端密钥。

实现身份验证:使用googleapis_auth包进行身份验证。

import 'package:googleapis_auth/auth_io.dart';
import 'package:googleapis/drive/v3.dart' as drive;
import 'dart:io' show Platform;

final identifier = ClientId("Your_Client_ID", "Your_Client_Secret");
final scopes = [drive.DriveApi.driveScope];

void prompt(String url) {
  print("Please go to the following URL and grant access:");
  print("  => $url");
  print("");
}

Future<AuthClient> getHttpClient() async {
  var client = await clientViaUserConsent(identifier, scopes, prompt);
  return client;
}

创建 Google Drive API 实例:

Future<void> _createFile() async {
  try {
    var httpClient = await getHttpClient();
    final driveApi = drive.DriveApi(httpClient);

    final folder = drive.File()
      ..name = 'My New Folder'
      ..mimeType = 'application/vnd.google-apps.folder';
    final folderInfo = await driveApi.files.create(folder);

    final list = await driveApi.files.list();
    for (var file in list.files!) {
      print('${file.name})');
    }
    if (list.files!.isEmpty) {
      debugPrint("No files in drive");
    }
  } catch (e) {
    print('Error creating file: $e');
  }
}

当您运行应用程序并调用 _createFile() 时,它将提示您输入 URL 以通过网络浏览器进行身份验证。一旦通过身份验证,它将继续进行 API 调用。

© www.soinside.com 2019 - 2024. All rights reserved.