Skip to main content

Google APIs

如何在 Flutter 中使用 Google APIs。

Google APIs 套件 提供數十種 Google 服務,您可以在 Dart 專案中使用。

本頁說明如何透過 Google 驗證,使用與 終端使用者資料互動的 API。

屬於使用者資料 API 的範例包括 CalendarGmailYouTube 以及 Firebase。

若要明確地為 Firebase 加入驗證功能,請參考 使用 FirebaseUI 為 Flutter 應用程式新增使用者驗證流程 教學,以及 在 Flutter 上開始使用 Firebase Authentication 文件。

概覽

#

要使用 Google APIs,請依照下列步驟:

  1. 選擇所需的 API
  2. 啟用該 API
  3. 驗證並取得目前使用者
  4. 取得已驗證的 HTTP 用戶端
  5. 建立並使用所需的 API 類別

1. 選擇所需的 API

#

package:googleapis 的文件 將每個 API 視為獨立的 Dart 函式庫&emdash;以 name_version 格式呈現。 可參考 youtube_v3 作為範例。

每個函式庫可能會提供多種型別, 但會有一個結尾為 Api 的「根」類別(root class)。 以 YouTube 為例,根類別是 YouTubeApi

Api 類別不僅是您需要 實例化的類別(請參考步驟 3),同時也 提供了代表使用該 API 所需權限的 scopes。 舉例來說, YouTubeApi 類別的 常數區段(Constants section) 列出了可用的 scopes。 如果您只需讀取(但不寫入)終端使用者的 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();
  // ···
}

初始化完成後,但在使用者驗證(authentication)之前,請監聽驗證事件,以判斷使用者是否已登入。

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);

取得相關授權憑證(authorization tokens)後, 請使用 authClient 擴充套件(extension), 搭配 package:extension_google_sign_in_as_googleapis_auth, 建立一個已套用相關憑證的已驗證 HTTP 用戶端(authenticated HTTP client)。

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
);

更多資訊

#

您可能會想參考以下內容: