Google API
如何在 Flutter 中使用 Google API。
Google APIs 軟體包提供了大量可供 Dart 專案使用的 Google 服務。
本頁面介紹瞭如何透過 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 所需許可權的範圍(scopes)。例如,YouTubeApi 類的 常量部分 列出了可用的範圍。要請求讀取(而非寫入)終端使用者的 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 = 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示例 是本頁所述概念的一個有效實現。