Skip to content

Supabase Google Login on iOS

このガイドは、iOSでGoogle Sign-InとSupabase Authenticationを統合するのに役立ちます。以下のステップを完了していることを前提としています。

完全な実装は、

例のアプリの

ファイルにあります。このガイドでは、主な概念とその使用方法を説明します。 認証ヘルパーを使用する supabaseAuthUtils.ts __CAPGO_KEEP_0__

この authenticateWithGoogleSupabase 関数は、認証フロー全体を処理します:

import { authenticateWithGoogleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithGoogleSupabase();
if (result.success) {
console.log('Signed in:', result.user);
// Navigate to your authenticated area
} else {
console.error('Error:', result.error);
}

認証フローがどのように機能するか、非接続ジェネレータ、JWT検証、Supabaseサインインを含む詳細な説明については、一般設定ガイドの「どのように機能するか」のセクションを参照してください。 重要な注意事項.

「重要な注意事項」のセクション

iOSトークンキャッシュと非接続問題

「iOSトークンキャッシュと非接続問題」のセクション

__CAPGO_KEEP_0__

iOS Nonce Caching Issue

iOS上でGoogle Sign-Inはトークンをキャッシュすることがあります。これにより、nonceの検証が失敗する可能性があります。 validateJWTToken functionはこれを検出して自動的に処理します:

  1. Automatic Detection: functionはトークン内のnonceが期待どおりであるかどうかを確認します nonceDigest
  2. Automatic Retry: 検証が失敗した場合、functionはGoogleから自動的にログアウトし、1度だけ再試行します
  3. Error Handling: 再試行も失敗した場合、エラーが返されます

Why this happens: iOS Google Sign-In SDK はパフォーマンスのためにトークンをキャッシュします。キャッシュされたトークンが返された場合、生成されたnonceが異なる(またはnonceが存在しない)可能性があり、一致しない可能性があります。

The solution: Google のトークン取得に失敗した場合、自動実行はログアウトし、再試行します。これにより、正しい nonce を持つ新しいトークンが生成されます。

Manual Workaround (自動再試行が機能しない場合):

// Logout first to clear cached tokens
await SocialLogin.logout({ provider: 'google' });
// Then authenticate
const result = await authenticateWithGoogleSupabase();

これにより、正しい nonce を持つ新しいトークンが取得されます。

code の完全なリファレンスについては、一般設定ガイドの "code の完全なリファレンス" セクションを参照してください。 Complete Code Reference section in the General Setup guide.

「重要な注意事項」セクション

nonce の取り扱い

__CAPGO_KEEP_0__ React Native Google Sign In ドキュメント:

  • rawNonce GoogleサインインのIDトークンから signInWithIdToken()
  • Supabaseは、 rawNonce と比較します。 nonceDigest Google Sign-InのIDトークンから取得される
  • nonceDigest (SHA-256ハッシュ、16進数エンコード) Google Sign-In APIの nonce Automatic Retry Mechanism

自動リトライメカニズム

The

関数には、 authenticateWithGoogleSupabase パラメータが含まれます: retry __CAPGO_KEEP_0__

  • 初回呼び出し (retry=false): 認証が失敗した場合、自動的にログアウトし、再試行する
  • 再試行呼び出し (retry=true): 認証が失敗した場合、直ちにエラーを返す

iOS のトークンキャッシュ問題を自動的に処理します。

認証が失敗した場合:

  • Nonce の一致が不正: 関数は自動的に再試行します - 詳細はコンソールログを確認してください。続行してもなお問題が発生する場合は、手動でログアウトしてください。
  • 無効な受信者: Google クライアント ID が Google Cloud Console と Supabase (iOS と Web クライアント ID) で両方に一致することを確認してください。
  • トークン検証に失敗しました:Capgoを使用していることを確認してください mode: 'online' initialize呼び出しでidTokenを取得するために
  • Info.plistの設定:Info.plistに正しいURLスキームとGIDClientIDが含まれていることを確認してください
  • Review the Capgoの例 code Capgoの例を参照してください

CapgoのiOS用Googleログインを使用している場合 CapgoのiOS用Googleログインを使用している場合 を計画し、認証とアカウントフローの接続を行うには @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要素認証 2要素認証の実装詳細