[Google OAuth] Google Cloud OAuth 同意画面の "Google で確認されていないアプリ" の問題の解決方法

概要

数宇にサブスクリプション機能を追加し、ユーザーごとに割り当てるために Google ログイン機能を使用しようとしました。
Google はログイン機能を使用し、以下の条件のいずれかを満たす場合は認証が必要であるとヘルプに記載されています。

アプリが外部ユーザー用に構成されていて、公開の状態が [本番環境] に設定されており、かつ以下の条件の 1 つ以上を満たしている場合は、アプリの確認が必要になる場合があります。
- アプリケーションでアイコンまたはアプリ名を表示する必要がある
- アプリで機密性の高いスコープまたは制限されたスコープの認可をリクエストする
- アプリの承認済みドメインの数がプロジェクトのドメイン数の上限を超えている
- アプリの承認後に OAuth 同意画面を変更した

私はログイン時にアイコンとアプリ名を表示したかったので、以前に認証を受けていました。
(この認証プロセスもかなり時間がかかるため、使用される方は事前に認証を受けておくことをお勧めします。)
しかし、Google Cloud OAuth 同意画面で Google から認証を受けたと表示されているにも関わらず、ログイン時に "Google で確認されていないアプリ" というメッセージが表示されました。

もちろん、この画面で下にある見えない Numverseに移動を押せばログインを続けることができますが、私以外は(脅迫されてでも)それを押さないでしょうから、この画面をなくさなければなりませんでした。(なおかつ、その下には安全ではないという括弧書きの表示もありますから…)

問題

いろいろ試してみた結果、最終的に問題点がわかりました。
Cloud コンソールで設定した範囲と、数宇アプリでログインのために呼び出す関数で設定した範囲が一致しないことが問題でした。
(もちろん、ここが同じに設定されている場合、他の問題かもしれません。それは他の方が解決してくれると信じています。)

解決方法

Google Cloud の範囲設定を確認する

  1. Google Cloud Console の API とサービス - OAuth 同意画面に移動します。

  2. アプリの編集ボタンをクリックします。

  3. 保存して続けるをクリックして範囲設定画面に移動します。

  4. ここにある範囲とアプリで設定した範囲が一致しているか確認します。


アプリの範囲設定を確認する

私は現在、Flutter を使用してアプリ開発をしており、Flutter を基準に確認します。(皆さんは他のアプリでも十分に似た部分を見つけられると思います。)

Future<void> logInWithGoogle() async {
  final googleSignIn = GoogleSignIn(
    scopes: [
      'email',
      'https://www.googleapis.com/auth/contacts.readonly', //問題の部分
     ],
  );
  ...
}

範囲設定の変更

  1. アプリで設定した範囲とコンソールで設定した範囲が一致しない場合は、範囲を同じに設定します。(私は pub.dev にあったサンプルコードを貼り付けていたところ、不要な権限が含まれていたため、その部分を削除しました。)

  2. アプリで設定範囲を変更するには、アプリのコードを修正します。

  3. コンソールで設定範囲を変更するには、「範囲」タブから希望する範囲を選択し、「保存」をクリックします。

まとめ

この記事は Google Cloud OAuth 同意画面で発生する "Google で確認されていないアプリ" の問題に対する解決方法でした。
結局、何も考えずに貼り付けたコードのせいで数時間も問題に悩まされました。
他の方々がこの記事を一発で検索して、より迅速に問題を解決できるようになれば幸いです。

自分だけの計算機が必要なら、Google Play から数宇をダウンロードしてください。


この記事が気に入ったらサポートをしてみませんか?