メインコンテンツへスキップ

AndroidでのGoogle Login

GitHub

このガイドでは、Android向けの Capgo Social Loginを使ってGoogle Loginをセットアップする方法を説明します。 すでに以下を読んでいることを前提としています。 一般的なセットアップガイド.

このパートでは、AndroidでGoogle Loginをセットアップする方法を説明します。

  1. Android クライアント ID を作成する

    1. 検索バーをクリックします

      Google Consoleの検索バー
    2. を検索し、 credentials 次をクリックします: APIs and Services 該当の項目(スクリーンショットの番号2)

      APIs & Servicesがハイライトされた認証情報オプションの検索結果
    3. 次の create credentials

      Google Consoleの「認証情報を作成」ボタン
    4. 選択します OAuth client ID

      認証情報作成メニューの「OAuth クライアント ID」オプション
    5. 次の Android アプリケーションの種類

      Androidオプションが選択されているアプリケーションタイプの選択画面
    6. Android Studioを開く

    7. ナビゲーターの最下部にある Gradle Scripts

      Android StudioプロジェクトナビゲーターのGradle Scriptsセクションから
    8. 次を探して、 build.gradle モジュールの app

      Gradle Scriptsセクションにあるbuild.gradle (Module: app) ファイルを
    9. 以下をコピー android.defaultConfig.applicationIdを探します。これが package name Googleコンソールでの

      applicationIdの設定が表示されているBuild.gradleファイルです
    10. 次に、ターミナルを開きます。必ず android アプリのフォルダに移動して実行します ./gradlew signInReport

    gradlew signInReport コマンドを表示しているターミナル
    1. このコマンドの先頭までスクロールしてください。次のように表示されるはずです。これをコピーして SHA1.
    SHA1 証明書のフィンガープリントが表示されたターミナルの出力
    1. 次に、Google Console に戻ります。以下を入力してください applicationId を Package Name として入力し、SHA1 も証明書フィールドに入力してクリックします create
    パッケージ名と SHA1 が入力された Android クライアント作成フォーム
  2. Web クライアントを作成する(Android にはこれが必要です)

    1. 以下にアクセスしてください: Create credentials Google Console のページ

    2. アプリケーションの種類を以下に設定 Web

      Webオプションが選択されたアプリケーションタイプの選択画面
    3. クリック Create

      下部に作成ボタンがあるWebクライアント作成フォーム
    4. クライアントIDをコピーしてください。これを以下の用途で使用します: webClientId JS/TSの code 内で

      コピー可能なWebクライアントIDを表示するクライアントIDの詳細
  3. 以下を修正してください MainActivity

    1. Android Studioでアプリを開いてください。以下のコマンドを実行できます: cap open android

    2. 次を探して、 MainActivity.java

      1. 次を開きます: app フォルダ

        Android Studioのプロジェクトナビゲーター内のAppフォルダ
      2. 次を探して、 java

        Android Studioプロジェクト内のJavaフォルダ
      3. 次を見つけて、 MainActivity.java をクリックします

        パッケージ構造内のMainActivity.javaファイル
    3. を修正します MainActivity.java。以下の code を追加してください

      import ee.forgr.capacitor.social.login.GoogleProvider;
      import ee.forgr.capacitor.social.login.SocialLoginPlugin;
      import ee.forgr.capacitor.social.login.ModifiedMainActivityForSocialLoginPlugin;
      import com.getcapacitor.PluginHandle;
      import com.getcapacitor.Plugin;
      import android.content.Intent;
      import android.util.Log;
      import com.getcapacitor.BridgeActivity;
      // ModifiedMainActivityForSocialLoginPlugin is VERY VERY important !!!!!!
      public class MainActivity extends BridgeActivity implements ModifiedMainActivityForSocialLoginPlugin {
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode >= GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MIN && requestCode < GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MAX) {
      PluginHandle pluginHandle = getBridge().getPlugin("SocialLogin");
      if (pluginHandle == null) {
      Log.i("Google Activity Result", "SocialLogin login handle is null");
      return;
      }
      Plugin plugin = pluginHandle.getInstance();
      if (!(plugin instanceof SocialLoginPlugin)) {
      Log.i("Google Activity Result", "SocialLogin plugin instance is not SocialLoginPlugin");
      return;
      }
      ((SocialLoginPlugin) plugin).handleGoogleLoginIntent(requestCode, data);
      }
      }
      // This function will never be called, leave it empty
      @Override
      public void IHaveModifiedTheMainActivityForTheUseWithSocialLoginPlugin() {}
      }
    4. ファイルを保存します

  4. アプリでGoogle Loginを使用する

    1. まず、以下をインポートします SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. initialize を呼び出します。これは一度だけ呼び出すようにしてください。

      // onMounted is Vue specific
      // webClientId is the client ID you got in the web client creation step not the android client ID.
      onMounted(() => {
      SocialLogin.initialize({
      google: {
      webClientId: '673324426943-avl4v9ubdas7a0u7igf7in03pdj1dkmg.apps.googleusercontent.com',
      }
      })
      })
    3. 呼び出す SocialLogin.login。ボタンを作成し、クリック時に以下の code を実行します。

      const res = await SocialLogin.login({
      provider: 'google',
      options: {}
      })
      // handle the response
      console.log(JSON.stringify(res))
  5. テスト用のエミュレータを設定する

    1. を開き、 Device manager プラスボタンをクリックします

      Android StudioのDevice Manager(プラスボタンを強調)
    2. 仮想デバイスを作成する

      Virtual Device Configuration内のCreate Virtual Deviceボタン
    3. 以下のアイコンが付いたデバイスを選択してください Play Store アイコン

      Play Storeに対応したデバイスを表示するハードウェア選択

      ご覧の通り、 pixel 8 は Play Store サービスに対応しています

    4. クリック next

      デバイス作成ウィザードの「次へ」ボタン
    5. OSイメージのタイプが以下であることを確認してください Google Play. 必ず のタイプである必要があります Google Play

      Google Play対応イメージが表示されているシステムイメージ選択画面
    6. 次へをクリック

      システムイメージ選択画面の「次へ」ボタン
    7. デバイスを確認してください。エミュレータの名前は任意で設定できます

      「完了」ボタンがあるデバイス設定確認画面
    8. に移動して Device Manager シミュレータを起動してください

      仮想デバイスが一覧表示されたDevice Managerと再生ボタン
    9. シミュレーターが起動したら、設定を開きます

      設定アプリが表示されているAndroidエミュレーター
    10. 〜を開きます Google Play

    Google Playのオプションがある設定画面
    1. クリック Update そのまま60秒ほど待ちます
    更新ボタンが表示されたGoogle Playの更新画面
  6. アプリケーションのテスト

    手順通りに進めれば、Googleログインフローが正常に動作します:

    AndroidでのGoogleログインフローのデモ(サインインから認証成功まで)

問題が発生した場合は、まずアプリの設定とGoogle Cloud Consoleの値が一致しているか確認してください。AndroidのGoogle Sign-Inの失敗は、通常、パッケージ名、SHA-1、またはクライアントIDの不一致が原因です。

Androidでは、このプラグインはGoogle Credential Manager(androidx.credentials およびSign in with Google)を使用しており、レガシーな GoogleSignInClient API は使用しません。以下のような GetCredentialCustomException: [28444] Developer console is not set up correctly Logcatのエラーは、そのスタックから発生します。

ログイン失敗後、Logcatを次でフィルタリングしてください: GoogleProvider または CapgoSocialLogin プラグインはパッケージ名、署名SHA-1、およびマスクされた webClientId をログに出力するため、Google Cloud Consoleの値と比較できます。

同じ Google Cloud プロジェクト内に、2種類の OAuth 2.0 クライアント ID が必要です:

クライアントタイプ用途設定先
Web アプリケーションサーバー / ID トークンのオーディエンスwebClientId における SocialLogin.initialize()
Android(署名キーごとに1つ)APK が Google を呼び出せることを証明しますGoogle Cloud Console のみ。この ID を以下には渡さないでください: webClientId

よくある間違いは、Android用のクライアントIDを webClientIdとして使用することです。Credential Managerでは、ここにWeb用のクライアントIDを指定する必要があります。Androidクライアント側には、コンソールに登録された正しいパッケージ名とSHA-1のみが必要です。

テストするビルドの署名に使用する証明書ごとに、Android用のOAuthクライアントを作成してください:

  • Debug: ./gradlew signingReport のデバッグ用バリアントから取得します。
  • Release: 実際にインストールするAPKまたはAABから取得します。
  • Play App Signing: Play Console > App integrity > App signing key certificate から取得します。アップロードキーのSHA-1が登録済みであっても、Play Store向けのビルドにはこれが必要です。

この applicationId における android/app/build.gradle は、Android OAuthクライアントのパッケージ名と完全に一致している必要があります。これには .debug suffix.

OAuth同意画面が「テスト中」モードの場合は、テストに使用するすべてのGoogleアカウントを「ユーザー」>「テストユーザー」に追加してください。テストのためにアプリを本番環境に公開する必要はありません。 email と profile scopes. Digital Asset Links (assetlinks.json) は、Credential Manager を使用した Google ログインでは不要です。

Google Cloud の設定変更が反映されるまで、数時間かかる場合があります。

エラー 28444: デベロッパーコンソールの設定が正しくありません

「Error 28444: Developer console is not set up correctly」セクション

これは、インストールされている APK の署名証明書、パッケージ名、および webClientIdの組み合わせを Google が拒否したことを意味します。以下のチェックリストを確認してください:

  1. 確認事項 webClientId は Web アプリケーションのクライアント ID であり、末尾が .apps.googleusercontent.com.
  2. アプリを実行してエラーを再現し、Logcat で GoogleProvider, signingSha1=や package=.
  3. では Google Cloud Console > 認証情報Android OAuth クライアントを開き、パッケージ名と SHA-1 が正確であることを確認してください。
  4. リリースビルドでテストする場合は、デバッグ用の keystore だけでなく、そのビルドの SHA-1 も登録してください。
  5. アプリを Play Store で配信する場合は、Play App Signing の SHA-1 も登録してください。
  6. Web と Android のクライアントが同じ Google Cloud プロジェクト内にあることを確認してください。
  7. 同意画面が「テスト中」の状態である場合は、使用する Google アカウントがテストユーザーに含まれているか確認してください。
  8. コンソールの設定変更後は、反映されるまで待ってから再度試してください。

USER_CANCELLED 設定ミスのあるデバッグビルドでアカウントを選択しても、SHA-1 またはクライアント ID の不一致が発生する可能性があります。まずは上記のコンソール設定を修正してください。

インストールしたビルドから SHA-1 を抽出する

「インストールしたビルドから SHA-1 を抽出する」セクション

デバッグまたはローカルビルド:

ターミナル
cd android && ./gradlew signingReport

署名済みリリースAPK:

ターミナル
keytool -printcert -jarfile android/app/release/app-release.apk

そのSHA-1を、一致するパッケージ名を持つAndroid OAuthクライアントに追加してください。その後、同じ署名済みAPKを再インストールして、再度テストを行います。

ターミナル
adb install android/app/release/app-release.apk

トークンは以下にネストされています result:

const login = await SocialLogin.login({ provider: 'google' });
const idToken = login.result?.idToken;

Firebase Authの場合は、それを使って認証情報を作成し、 idToken WebクライアントIDを次のように使用します。 webClientId における initialize.

開発用のSHA-1証明書が取得できない場合は、カスタムキーストアを試してください。 こちらのIssueのコメントでは、 プロジェクトにキーストアを追加する方法について説明しています。

AndroidでのGoogle Loginの続きから進める

「AndroidでのGoogle Loginの続きから進める」セクション

使用している場合 AndroidでのGoogle Login 認証とアカウントフローを計画するには、これを次と連携させてください @capgo/capacitor-social-login の使用 「@capgo/capacitor-social-login の使用」のネイティブ機能のために、 @capgo/capacitor-social-login @capgo/capacitor-social-login の実装の詳細については、 @capgo/capacitor-passkey @capgo/capacitor-passkey の実装詳細については、 @capgo/capacitor-native-biometric @capgo/capacitor-native-biometric の実装の詳細、および 2要素認証 二要素認証の実装の詳細については。