You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中对Google Forms API请求进行身份验证?

在Flutter中用OAuth 2.0客户端ID验证Google Forms API请求

Google Forms API的/responses端点必须用OAuth 2.0授权,不能用普通API密钥——因为它要访问用户的私有表单数据。你手里的JSON凭证是OAuth客户端配置,得通过用户登录拿到有效的访问令牌(Access Token)才能完成验证。

实现步骤

1. 添加依赖

在pubspec.yaml里添两个必要的包:

dependencies:
  flutter:
    sdk: flutter
  google_sign_in: ^5.4.0 # 处理Google账号登录
  googleapis: ^11.0.0 # Google官方API客户端库

执行flutter pub get完成安装。

2. 配置OAuth客户端ID

  • 回到Google Cloud控制台,确认你创建的客户端ID匹配你的Flutter平台(Android/iOS/WEB)。
  • 按平台要求放置凭证文件:
    • Android:把google-services.json放到android/app/目录下
    • iOS:把GoogleService-Info.plist放到ios/Runner/目录下
    • WEB:在web/index.html中添加Google登录的配置脚本(参照Google官方配置说明)

3. 实现登录流程获取访问令牌

先完成Google账号登录,拿到能访问Forms API的令牌:

import 'package:google_sign_in/google_sign_in.dart';
import 'package:googleapis/forms/v1.dart' as forms;

// 声明需要的权限:只读访问表单响应
final List<String> scopes = [forms.FormsApi.formsResponsesReadonlyScope];

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: scopes,
  clientId: '你的客户端ID', // 从JSON凭证中提取client_id字段填入
);

// 获取访问令牌的函数
Future<String?> getAccessToken() async {
  try {
    final GoogleSignInAccount? account = await _googleSignIn.signIn();
    final GoogleSignInAuthentication auth = await account!.authentication;
    return auth.accessToken;
  } catch (e) {
    print('登录失败: $e');
    return null;
  }
}

4. 使用令牌调用Forms API

替换你原来的请求代码,将Authorization头替换为OAuth访问令牌:

import 'package:http/http.dart' as http;
import 'package:http/http.dart';

Future<void> fetchFormResponses() async {
  final String? accessToken = await getAccessToken();
  if (accessToken == null) return;

  final String formId = '你的表单ID';
  final Uri url = Uri.parse('https://forms.googleapis.com/v1/forms/$formId/responses');

  final Response response = await http.get(
    url,
    headers: {
      'Authorization': 'Bearer $accessToken', // 格式必须为「Bearer + 空格 + 令牌」
    },
  );

  if (response.statusCode == 200) {
    print('响应数据: ${response.body}');
  } else {
    print('请求失败: ${response.statusCode} - ${response.body}');
  }
}

注意事项

  • 必须先在Google Cloud项目中启用Google Forms API(前往API库搜索并启用)。
  • 测试用的Google账号需要拥有目标表单的访问权限(比如是表单创建者,或已被授权查看响应)。
  • 访问令牌存在过期时间,若需要长期访问,可以结合刷新令牌(Refresh Token)实现自动更新,避免重复要求用户登录。

内容的提问来源于stack exchange,提问作者Mikhail Beresnev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:04:56