Google API
如何在 Flutter 中使用 Google APIs。
Google APIs 包 暴露了数十种 Google 服务,您可以在 Dart 项目中使用。
此页面描述了如何使用与最终用户数据交互的 API,方法是使用 Google 身份验证。
用户数据 API 的示例包括 日历、Gmail、YouTube 和 Firebase。
要显式地为 Firebase 添加身份验证,请查看 使用 FirebaseUI 将用户身份验证流程添加到 Flutter 应用程序 代码实验室和 在 Flutter 上开始使用 Firebase 身份验证 文档。
概述
#要使用 Google APIs,请按照以下步骤操作
- 选择所需的 API
- 启用 API
- 身份验证并确定当前用户
- 获取经过身份验证的 HTTP 客户端
- 创建并使用所需的 API 类
1. 选择所需的 API
#package:googleapis 的文档将每个 API 列为单独的 Dart 库&emdash;采用 name_version 格式。请查看 youtube_v3 作为示例。
每个库可能提供许多类型,但有一个根类以 Api 结尾。对于 YouTube,它是 YouTubeApi。
不仅 Api 类是您需要实例化的类(参见步骤 3),而且它还暴露了表示使用 API 所需权限的作用域。例如,YouTubeApi 类的“常量”部分列出了可用的作用域。要请求访问读取(但不写入)最终用户 YouTube 数据的权限,请使用 youtubeReadonlyScope 对用户进行身份验证。
/// 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 身份验证用户。为要支持的每个平台配置登录。
/// 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);
获得相关的授权令牌后,使用 authClient 扩展(来自 package:extension_google_sign_in_as_googleapis_auth)使用相关的凭据设置经过身份验证的 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示例 是此页面上描述的概念的工作实现。