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示例是一個關於本頁面所描述概念的可行實現。