跳到主內容

Google API

如何在 Flutter 中使用 Google API。

Google APIs 軟體包提供了大量可供 Dart 專案使用的 Google 服務。

本頁面介紹瞭如何透過 Google 身份驗證來使用與終端使用者資料互動的 API。

使用者資料類 API 的示例包括 CalendarGmailYouTube 和 Firebase。

要顯式地為 Firebase 新增身份驗證,請檢視 使用 FirebaseUI 將使用者身份驗證流程新增到 Flutter 應用 的程式碼實驗室,以及 Flutter Firebase 身份驗證入門 文件。

概述

#

要使用 Google API,請按照以下步驟操作:

  1. 選擇所需的 API
  2. 啟用該 API
  3. 進行身份驗證並確定當前使用者
  4. 獲取已驗證身份的 HTTP 客戶端
  5. 建立並使用所需的 API 類

1. 選擇所需的 API

#

package:googleapis 的文件將每個 API 列為一個獨立的 Dart 庫,格式為 name_version。以 youtube_v3 為例。

每個庫可能提供多種型別,但總有一個以 Api 結尾的類。對於 YouTube,該類為 YouTubeApi

Api 類不僅是您需要例項化的類(參見第 3 步),它還公開了使用該 API 所需許可權的範圍(scopes)。例如,YouTubeApi 類的 常量部分 列出了可用的範圍。要請求讀取(而非寫入)終端使用者的 YouTube 資料許可權,請使用 youtubeReadonlyScope 對使用者進行身份驗證。

dart
/// 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 身份驗證來驗證使用者。請為您想要支援的每個平臺配置登入功能。

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

該軟體包的功能透過 GoogleSignIn 類的靜態例項來訪問。在與該例項互動之前,必須呼叫 initialize 方法並等待其完成。

dart
final GoogleSignIn _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);

獲取相關的授權令牌後,使用 package:extension_google_sign_in_as_googleapis_auth 中的 authClient 擴充套件來設定一個應用了相關憑據的已驗證 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
);

更多資訊

#

您可能希望檢視以下內容: