Nuxtで開発しているWebサービスで、
Google API Client Library for JavaScriptを使いたいなと思ったら、
意外とハマったので、その時の備忘録。
Google API ClientのNode.js版(googleapis)は、
npmでインストールできるけど、
ブラウザ版はCDNなので、いろいろめんどくさい。。
※調べてまとめたあとだけど、非推奨の方法だった。。
※2023年3月31日に廃止予定で、Google IdentityServicesに移行が必要っぽい。。
※しかも、やりたかった「追加の権限をリクエストする」もなくなってるっぽい。。
※さらに、Google IdentityServicesはnpmでの提供も型定義もないよ(´ω`)
インストール
まずはインストール。
JavaScript版のClient Libraryは、
https://apis.google.com/js/api.js
なので、
scriptタグで追加。
const config: NuxtConfig = { head: { script: [{ src: "https://apis.google.com/js/api.js" }] } }
追加方法はいろいろあり、onMount
でDOMに挿入する方法でもOK。
型定義の設定
VSCode+TypeScriptなので、型の補完ができるようにしたい。
型定義が提供されているので、インストールする。
$ npm i -D @types/gapi @types/gapi.auth2
今回はOAuthだけなので、@types/gapi.auth2
だけだけど、
使いたいAPIごとに追加が必要。
次に、tsconfig.json
のtypes
に、インストールした型定義を追加する。
// tsconfig.json { "compilerOptions": { "types": [ "gapi", "gapi.auth2", "./types" ] } }
使い方
使い方はこんな感じ。loadして、initして、やっと使える。
gapi.load()
は、callbackしかないので、Promiseで包んでいる。
function async sign() { // API Clientの読み込み await loadGapiClient(); // API Clientの初期化 await initGapiClient(); // OAuth2での認証 const auth = gapi.auth2.getAuthInstance(); const user = await gAuth.signIn(); } function loadGapiClient() { return new Promise<void>((resolve, reject) => { gapi.load("client:auth2", () => resolve()); }); } function async initGapiClient() { await gapi.client.init({ apiKey: process.env.API_KEY, clientId: process.env.GAPI_CLIENT_ID, scope: "https://www.googleapis.com/auth/drive.readonly", discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"] }); }
API_KEY
やGAPI_CLIENT_ID
は、
GCPコンソールの「APIとサービス>認証情報」にある、
「APIキー」と、「OAuth 2.0 クライアント ID」を設定。
Firebaseを利用していて、Firebase AuthのGoogle認証を有効にしていると、
どちらも作成されているので、それを利用すればOK。
また、APIを呼び出す場合はlocalhost
であっても、
「OAuth 2.0 クライアント ID」の「承認済みのJavaScript生成元」に設定する必要がある。
「OAuth 2.0 クライアント ID」の編集ボタンから追加/変更が可能。
本番環境では審査が必要な場合も
利用するスコープによっては、審査が必要なので注意。
プライベートユーザーデータへのアクセスをリクエストする
気密性の高いスコープなどの場合、検証して貰う必要がある。
が、Youtubeに動画を用意したりなど、かなり大変。。
以下を参考にするのが良さそう。。
- Google OAuth審査が通った話と改善した方法 | Kuro Doc
- GoogleのOAuth審査に苦労した話 | チョコボのメモちょう
- Googleアドオンの申請でハマるポイント - Qiita
- Google APIのOAuth検証:具体的な申請方法と承認を得るための注意点を解説 | halzo appdev blog
以上!!
参考にしたサイトさま
- google/google-api-javascript-client: Google APIs Client Library for browser JavaScript, aka gapi.
- google-api-javascript-client/start.md at master · google/google-api-javascript-client
- クライアント側のWebアプリケーション用のOAuth2.0 | Google Identity Platform | Google Developers
- Authenticating with gapi in a react/typescript project
- partnerhero/gapi-script: npm package to load gapi script and initialize some functions
- Vue3 + Electron + TailwindCSSセットアップTips
- Using Google APIs with Firebase Auth and Firebase UI on the Web | by Sandeep Dinesh | Google Cloud - Community | Medium
- OAuth審査関連