跳到主内容

Google API

如何在 Flutter 中使用 Google APIs。

Google APIs 包 暴露了数十种 Google 服务,您可以在 Dart 项目中使用。

此页面描述了如何使用与最终用户数据交互的 API,方法是使用 Google 身份验证。

用户数据 API 的示例包括 日历GmailYouTube 和 Firebase。

要显式地为 Firebase 添加身份验证,请查看 使用 FirebaseUI 将用户身份验证流程添加到 Flutter 应用程序 代码实验室和 在 Flutter 上开始使用 Firebase 身份验证 文档。

概述

#

要使用 Google APIs,请按照以下步骤操作

  1. 选择所需的 API
  2. 启用 API
  3. 身份验证并确定当前用户
  4. 获取经过身份验证的 HTTP 客户端
  5. 创建并使用所需的 API 类

1. 选择所需的 API

#

package:googleapis 的文档将每个 API 列为单独的 Dart 库&emdash;采用 name_version 格式。请查看 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 APIs,您必须拥有 Google 帐户和 Google 项目。您还需要启用所需的 API。

此示例启用 YouTube Data API v3。有关详细信息,请参阅 入门说明

3. 身份验证并确定当前用户

#

使用 google_sign_in 包使用他们的 Google 身份验证用户。为要支持的每个平台配置登录。

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

通过 GoogleSignIn 类的静态实例访问包的功能。在与实例交互之前,必须调用 initialize 方法并允许其完成。

dart
final _googleSignIn = GoogleSignIn.instance;

@override
void initState() {
  super.initState();
  _googleSignIn.initialize();
  // ···
}

初始化完成后但在用户身份验证之前,请侦听身份验证事件以确定用户是否已登录。

dart
GoogleSignInAccount? _currentUser;

@override
void initState() {
  super.initState();
  _googleSignIn.initialize().then((_) {
    _googleSignIn.authenticationEvents.listen((event) {
      setState(() {
        _currentUser = switch (event) {
          GoogleSignInAuthenticationEventSignIn() => event.user,
          _ => null,
        };
      });
    });
  });
}

在侦听任何相关的身份验证事件后,您可以尝试对先前登录的用户进行身份验证。

dart
void initState() {
  super.initState();
  _googleSignIn.initialize().then((_) {
    // ...
    // Attempt to authenticate a previously signed in user.
    _googleSignIn.attemptLightweightAuthentication();
  });
}

要也允许新用户进行身份验证,请遵循 package:google_sign_in 提供的说明。

用户身份验证后,您必须获取经过身份验证的 HTTP 客户端。

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

#

拥有已登录用户后,使用 authorizationForScopes 为您的应用程序所需的 API 作用域请求相关的客户端授权令牌。

dart
const relevantScopes = [YouTubeApi.youtubeReadonlyScope];
final authorization = await currentUser.authorizationClient
    .authorizationForScopes(relevantScopes);

获得相关的授权令牌后,使用 authClient 扩展(来自 package:extension_google_sign_in_as_googleapis_auth)使用相关的凭据设置经过身份验证的 HTTP 客户端。

dart
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
dart
final authenticatedClient = authorization!.authClient(
  scopes: relevantScopes,
);

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

#

使用 API 创建所需的 API 类型并调用方法。例如

dart
final youTubeApi = YouTubeApi(authenticatedClient);

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

更多信息

#

您可能想查看以下内容