名為 googleapis 的軟體包公開了數十種 Google 服務,您可以在 Dart 專案中使用它們。

本頁面將介紹如何使用透過 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 所需許可權的範圍。例如,YouTubeApi 類的 Constants 部分列出了可用的範圍。要請求訪問使用者 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.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
);

更多資訊

#

您可能想檢視以下內容: