コンテンツにジャンプ

iOSのSupabase Googleログイン

GitHub

このガイドでは、iOS で Google Sign-In と Supabase Authentication を統合する方法を説明します。既に次のことを完了していることを前提としています:

完全な実装は 例のアプリの supabaseAuthUtils.ts ファイルにあります。このガイドでは、主な概念とその使用方法を説明します。

The authenticateWithGoogleSupabase function handles the entire authentication flow:

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);
}

詳細な説明については、nonce の生成、JWT の検証、Supabase のサインインなど、一般設定ガイドの「How It Works」セクションを参照してください。 Important Caveats.

セクション「Important Caveats」

iOS Token Caching and Nonce Issues

セクション「iOS Token Caching and Nonce Issues」

iOS Nonce Caching Issue

iOS では、Google Sign-In がトークンをキャッシュすることがあり、これにより nonce の検証が失敗する可能性があります。

iOS Nonce Caching Issue validateJWTToken iOS Google Sign-In __CAPGO_KEEP_0__ はキャッシュするため、パフォーマンスを向上させるために

  1. 自動検出: トークン内の nonce が期待どおりであるかどうかを確認します nonceDigest
  2. 自動リトライ: 検証が失敗した場合、Google からログアウトし、1 回リトライします
  3. エラー処理: リトライも失敗した場合、エラーが返されます

なぜこれが起こるか: iOS Google Sign-In SDK はキャッシュするため、パフォーマンスを向上させるために

解決策: この実装は、ログアウトしてリトライすることで、Google が正しい nonce で新しいトークンを生成するように強制します

手動の回避策 (自動再試行が機能しない場合):

// 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 の取り扱い

Supabase に移動します automatic retry:

  • rawNonce nonce signInWithIdToken()
  • Supabaseはハッシュ化し rawNonce と比較します。 nonceDigest Google Sign-InのIDトークンから取得した
  • nonceDigest のハッシュ値(SHA-256ハッシュ値、16進数エンコード)が nonce のパラメーターに渡されます。

authenticateWithGoogleSupabase 関数には retry パラメーターがあります。

  • 最初の呼び出し(retry=false):検証が失敗した場合、自動的にログアウトし、1度リトライします。
  • 再試行 (retry=true): 認証が失敗した場合、直ちにエラーを返します

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

認証が失敗した場合:

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

iOS の Supabase Google Login に進む

「iOS の Supabase Google Login に進む」

iOS の Supabase Google Login を使用している場合 認証とアカウントフローの計画と実行に使用する場合、Supabase Google Login を接続する iOS の Supabase Google Login を使用している場合、認証とアカウントフローの計画と実行に使用する場合、Supabase Google Login を接続する 使用する @capgo/capacitor-social-login native機能の使用に@capgo/capacitor-social-loginを使用します。 @capgo/capacitor-social-login native機能の実装詳細については@capgo/capacitor-social-loginを参照してください。 @capgo/capacitor-passkey native機能の実装詳細については@capgo/capacitor-passkeyを参照してください。 native機能の実装詳細については@capgo/capacitor-native-biometricを参照してください。 native機能の実装詳細については@capgo/capacitor-native-biometricを参照してください。 2要素認証 2要素認証の実装詳細については参照してください。