Google API
名为 googleapis
的软件包公开了数十种 Google 服务,您可以在 Dart 项目中使用它们。
本页面将介绍如何使用通过 Google 身份验证来与最终用户数据进行交互的 API。
用户数据 API 的示例包括 Calendar、Gmail、YouTube 和 Firebase。
如需显式地为 Firebase 添加身份验证,请查阅 使用 FirebaseUI 为 Flutter 应用添加用户身份验证流程 教程以及 Flutter Firebase 身份验证入门 文档。
概述
#要使用 Google API,请按照以下步骤操作:
- 选择所需 API
- 启用 API
- 验证身份并确定当前用户
- 获取已验证的 HTTP 客户端
- 创建并使用所需的 API 类
1. 选择所需 API
#package:googleapis
的文档将每个 API 列为一个单独的 Dart 库 — 采用 name_version
格式。请查看 youtube_v3
示例。
每个库可能提供许多类型,但有一个以 Api
结尾的根类。对于 YouTube,它是 YouTubeApi
。
不仅 Api
类是您需要实例化的类(参见步骤 3),它还公开了表示使用 API 所需权限的范围。例如,YouTubeApi
类的 Constants 部分列出了可用的范围。要请求访问用户 YouTube 数据的读取(但非写入)权限,请使用 youtubeReadonlyScope
对用户进行身份验证。
/// 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
软件包通过 Google 身份验证用户。为要支持的每个平台配置登录。
/// Provides the `GoogleSignIn` class.
import 'package:google_sign_in/google_sign_in.dart';
通过 GoogleSignIn
类的静态实例访问该软件包的功能。在与实例交互之前,必须调用 initialize
方法并允许其完成。
final _googleSignIn = GoogleSignIn.instance;
@override
void initState() {
super.initState();
_googleSignIn.initialize();
// ···
}
在初始化完成后但用户身份验证之前,监听身份验证事件以确定用户是否已登录。
GoogleSignInAccount? _currentUser;
@override
void initState() {
super.initState();
_googleSignIn.initialize().then((_) {
_googleSignIn.authenticationEvents.listen((event) {
setState(() {
_currentUser = switch (event) {
GoogleSignInAuthenticationEventSignIn() => event.user,
_ => null,
};
});
});
});
}
一旦您监听了任何相关的身份验证事件,就可以尝试验证之前已登录的用户。
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 范围。
const relevantScopes = [YouTubeApi.youtubeReadonlyScope];
final authorization = await currentUser.authorizationClient
.authorizationForScopes(relevantScopes);
一旦您获得了相关的授权令牌,请使用 package:extension_google_sign_in_as_googleapis_auth
中的 authClient
扩展来设置一个已验证的 HTTP 客户端,并应用相关的凭据。
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
final authenticatedClient = authorization!.authClient(
scopes: relevantScopes,
);
5. 创建并使用所需的 API 类
#使用 API 创建所需的 API 类型并调用方法。例如:
final youTubeApi = YouTubeApi(authenticatedClient);
final favorites = await youTubeApi.playlistItems.list(
['snippet'],
playlistId: 'LL', // Liked List
);
更多信息
#您可能想查看以下内容:
extension_google_sign_in_as_googleapis_auth
示例是一个关于本页面所描述概念的可行实现。