使用 Google API

Google APIs package 提供了许多你可以从 Dart 项目中使用的 Google 服务。

本页面描述了如何通过 Google 身份验证,使用这些 API 和终端用户数据交互。

用户数据 API 的例子包括 CalendarGmailYouTube 和 Firebase。

To add authentication to Firebase explicitly, check out the Add a user authentication flow to a Flutter app using FirebaseUI codelab and the Get Started with Firebase Authentication on Flutter docs.

概览

#

请遵循以下步骤使用 Google API:

  1. 选择所需的 API

  2. 启用 API 服务

  3. 使用所需的作用域对用户进行身份验证

  4. 获取身份验证后的 HTTP 客户端

  5. 创建并使用所需的 API 类

1. 选择所需的 API

#

文档 package:googleapis 采用 name_version 的形式,列举了每一个可以单独作为 Dart 库的 API。一起看看 youtube_v3 这个例子。

每个库都可能提供多种类型,但是一定会有一个以 Api 结尾的 类。在 YouTube 中,根类就是 YouTubeApi

Api 类不仅是你需要初始化的类(详见步骤 3),它还暴露了使用该 API 所需权限的作用域。例如, YouTubeApi 类中 常量 这一节,你会看到可用的作用域有哪些。为了获取终端用户的 YouTube 数据的读取(并非写入)权限,请使用 youtubeReadonlyScope 对用户进行验证。

dart
/// Provides the `YouTubeApi` class.
import 'package:googleapis/youtube/v3.dart';

2. 启用 API 服务

#

使用 Google API,你必须有一个 Google 账户和一个 Google 项目。你还需要启用所需的 API 服务。

在本示例中,你将需要启用 YouTube Data API v3 服务。

详情请看 入门指南

3. 使用所需的作用域对用户进行身份验证

#

使用 google_sign_in package 对用户进行 Google 身份验证。为你需要的平台配置登录。

dart
/// Provides the `GoogleSignIn` class
import 'package:google_sign_in/google_sign_in.dart';

当你初始化 GoogleSignIn 类时,你需要提供前面的小节中提到的所需的作用域。

dart
final _googleSignIn = GoogleSignIn(
  scopes: <String>[YouTubeApi.youtubeReadonlyScope],
);

按照 package:google_sign_in 中的介绍来进行用户验证。

一旦验证完毕,你必须获取一个验证后的 HTTP 客户端。

4. 获取身份验证后的 HTTP 客户端

#

extension_google_sign_in_as_googleapis_auth package 在 GoogleSignIn 中提供了一个 扩展方法authenticatedClient

dart
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';

你可以监听 onCurrentUserChanged。当事件值不是 null 时,你可以创建一个身份验证后的客户端。

dart
var httpClient = (await _googleSignIn.authenticatedClient())!;

Client 实例包含了调用 Google API 类时所需的凭证。

5. 创建并使用所需的 API 类

#

使用 API 来创建所需的 API 类型和调用方法,例如:

dart
var youTubeApi = YouTubeApi(httpClient);

var favorites = await youTubeApi.playlistItems.list(
  ['snippet'],
  playlistId: 'LL', // Liked List
);

更多信息

#

你可能还需要了解以下内容: