メインコンテンツにジャンプ
チュートリアル

CapacitorでCapacitorを使用したSupabase認証のセットアップ

Learn how to integrate Supabase authentication with the Capgo Social Login plugin for seamless Google, Apple, and Facebook authentication in your Capacitor app.

記事のクレジット

マーティン・ドナディュー

ページ/エリア: Enterprise製品/価格設定ページ。役割: UIラベル。見つかったページ: page enterprise.astro。メッセージキー `enterprise_partnership_capgo_martin_name` (Enterprise Partnership Capgo Martin Name)。

ライター

ヴァレリア

ページ/エリア: Enterprise製品/価格設定ページ。役割: UIラベル。見つかったページ: page enterprise.astro。メッセージキー `enterprise_partnership_capgo_valeria_name` (Enterprise Partnership Capgo Valeria Name)。

レビュアー

Setup Supabase Authentication with Capacitor Social Login Plugin

モバイルアプリの認証設定は複雑になることがありますが、 SupabaseCapgo Social Login プラグイン makes it straightforward. This tutorial will guide you through integrating social authentication (Google, Apple, Facebook) with Supabase in your Capacitor app.

__CAPGO_KEEP_0__

アプリに Google、Apple、Facebook @capgo/capacitor-social-login なぜSupabaseとSocial Loginを組み合わせるのですか? @capgo/capacitor-supabase は、組み込み認証機能を備えた強力なバックエンドサービスを提供し、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-social-loginプラグインは、iOS、Android、Webプラットフォームでネイティブな社会的認証を提供します。より緊密なSupabase統合のために、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-supabaseはネイティブな認証ヘルパーとJWTアクセスを追加します。

  • ソーシャル認証の無負荷実装
  • セキュアなトークン管理
  • クロスプラットフォーム互換性
  • リアルタイムデータベース統合
  • 組み込みユーザー管理

前提条件

開始する前に、以下を確認してください:

  • A Capacitor project set up
  • Supabaseアカウントとプロジェクト
  • 選択したソーシャルプロバイダーの開発者アカウント (Google、Apple、Facebook)

ステップ 1: ソーシャルログインプラグインのインストールと設定

First, install the Capgo Social Login plugin:

npm install @capgo/capacitor-social-login
npx cap sync

Capgoの Social LoginSupabase プラットフォームごとの設定用の

Step 2: Supabaseプロジェクトの設定

プロジェクトを作成して設定する

  1. プロジェクトを作成する:

    • supabase.com でサインアップ/サインインする
    • をクリックする “新プロジェクト”
    • 組織を選択してください
    • Enter a プロジェクト名 (例: “MyApp Auth”)
    • データベースパスワードを設定 (安全に保存してください) 地域を選択
    • (ユーザーに近いものを選択してください) クリック (choose closest to your users)
    • Click 「新しいプロジェクトを作成する」
  2. プロジェクトの資格情報を取得する:

    • プロジェクトが作成されたら、 設定 > API
    • コピーする プロジェクトURL (例えば、 https://your-project-ref.supabase.co)
    • anon 公開 __CAPGO_KEEP_0__ キー API key
    • 認証設定を構成する

設定 > __CAPGO_KEEP_0__

  1. Capgo:

    • Capacitor Capacitor
    • Capacitor Capacitor:
      • Capacitor Capacitor Capacitor https://yourdomain.com Capacitor http://localhost:3000 Capacitor
      • Capacitor Capacitor 必要に応じて:
        http://localhost:3000
        https://yourdomain.com
        capacitor://localhost (for mobile apps)
  2. メール設定を構成する (オプションですが、推奨される):

    • 以下の SMTP設定, メールプロバイダを設定する
    • メール確認とパスワードリセットを有効にする
    • 開発環境では、組み込みメールサービスを使用できます

社会認証プロバイダを有効にする

  1. プロバイダのセクションにアクセスする:
    • 以下の 認証>プロバイダ Supabaseのダッシュボードで
    • 利用可能なソーシャルプロバイダのリストが表示されます
    • 各プロバイダには 有効 切り替えスイッチと設定オプション

各ソーシャルプロバイダの詳細な設定については

Step 3: Supabaseでソーシャルプロバイダを設定する

SupabaseでGoogle認証を設定する

Google OAuthのクレデンシャルを取得する

Googleの設定ガイドをご覧ください Google認証の設定

このガイドでは

  • Google Cloud Project の作成
  • Web、iOS、Android向けのOAuth 2.0資格情報の設定
  • consent screen の設定
  • 必要な Client ID とシークレットの取得

Google の設定が完了したら、Supabase に設定する

  1. Supabase で Google プロバイダーを有効にする:
    • Supabase ダッシュボードに移動し、 Authentication > Providers
    • Google を見つける ON に切り替える __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
    • 設定を入力してください:
      • クライアントID: Google OAuth のクライアントID Web Google Cloud Console から取得するクライアントID
      • クライアントシークレット: Google OAuth のクライアントシークレット Web クライアントシークレット
      • リダイレクトURL: https://your-project-ref.supabase.co/auth/v1/callback (自動入力)
    • クリック “Save”

重要Cloudflare Capacitor GitHub Capgo code

API

SDK

CLI npm

bun

  • Apple開発者アカウントの設定
  • App IDとService IDの作成
  • Sign in with Apple機能の設定
  • 必要なプライベートキーを生成
  • iOS、Android、Web向けのプラットフォーム固有の設定

Appleの設定を完了した後、Supabaseで設定する

  1. AppleプロバイダをSupabaseで有効にする:
    • Authentication > プロバイダに移動 Appleをオンに切り替え __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ __CAPGO_KEEP_2__
    • 設定を入力してください:
      • クライアントID: サービスID識別子 (例: com.yourapp.signin)
      • クライアントシークレット: Appleプライベートキーを使用してJWTを生成してください (see Supabase Appleドキュメント のJWT形式)
      • リダイレクトURL: https://your-project-ref.supabase.co/auth/v1/callback (自動入力)
    • Click 「保存」

注意: Apple authentication setup is the most complex due to Apple’s requirements for Service IDs, private keys, and JWT generation. Follow our documentation carefully for each platform.

Facebook Authentication in Supabaseの設定

Facebookのクレデンシャルを取得する

Facebookの設定ガイドを完全に参照してください Facebook Authenticationの設定

このガイドでは以下の内容をカバーしています。

  • Facebook Developerアカウントとアプリの作成
  • Facebook Login製品の追加
  • OAuthリダイレクトURIの設定
  • App ID、App Secret、Client Tokenの取得
  • iOSとAndroid向けのプラットフォーム固有の設定

Facebookの設定が完了したら、Supabaseで設定を構成する

  1. Facebook プロバイダーを Supabase で有効にします。:
    • 以下の手順に従ってください。 Authentication > プロバイダー プロバイダーを有効/無効にします。 Facebook オン
    • 以下の設定を入力してください。
      • クライアント ID: Facebook アプリ ID を入力してください。
      • クライアント シークレット: Facebook アプリ シークレットを入力してください。
      • リダイレクト URL: https://your-project-ref.supabase.co/auth/v1/callback (auto-filled)
    • Click “Save”

Important: Make sure to add the Supabase callback URL (https://your-project-ref.supabase.co/auth/v1/callback) to your Facebook app’s Valid OAuth Redirect URIs in the Facebook Login settings.

Important Supabase Configuration Notes

Row Level Security (RLS):

  • After setting up authentication, enable RLS on your tables
  • Go to データベース > テーブル __CAPGO_KEEP_0__ 有効にする 各テーブル
  • 認証済みユーザーに基づいてデータアクセスを制御するポリシーを作成する

ユーザー管理:

  • 認証済みユーザーを表示する 認証 > ユーザー
  • 認証イベントを監視する 認証 > ログ
  • メールテンプレートを設定する 認証 > メールテンプレート

設定のテスト:

  • Supabaseの組み込み認証テストツールを使用します。
  • 以下の手順に従ってください。 認証 > ユーザー 「ユーザーを招待」をクリックします。 メールフローのテストを行います。 エラーが発生した場合は、
  • ログ セクションを確認してください。 ステップ 4: ソーシャル ログイン プラグインの設定

Supabaseの設定が完了したら、ソーシャル ログイン プラグインの設定に進みます。

__CAPGO_KEEP_0__ 重要: プラグインには、 元のサービスプロバイダー (Supabaseではなく) からOAuthのクレデンシャルが必要です

認証フローのしくみ

設定に進む前に、流れを理解してください

  1. プラグインは ソーシャルプロバイダー (Google/Apple/Facebook) に
  2. プラグインはトークン (アクセストークン、IDトークン) を取得します
  3. アプリはこれらのトークンを Supabaseに送信します signInWithIdToken()
  4. Supabaseはトークンを検証し プロバイダーとユーザー セッションを作成します
  5. Supabaseは アプリの認証済みリクエスト用に

Google プラグイン設定

プラグインには すべてのプラットフォーム向けに Web クライアント ID iOS クライアント ID iOS固有の機能向けに

import { SocialLogin } from '@capgo/capacitor-social-login';

await SocialLogin.initialize({
  google: {
    // Use the same Web Client ID you configured in Supabase
    webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
    
    // Optional: iOS Client ID for iOS-specific features
    iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com',
    
    // Optional: Request offline access for refresh tokens
    mode: 'offline'
  }
});

Googleの重要なポイント

  • 使用する Web クライアント ID (Android/iOS クライアント IDではない) Web クライアント ID webClientId フィールド
  • Capacitor プラグインは、Web クライアント IDのみで、すべてのプラットフォームで動作します。
  • Capacitor プラグイン iOSClientId オプションであり、iOS固有のGoogle機能のみに使用されます。

Apple プラグイン設定

Apple設定はiOSとAndroidで異なります。

iOSの場合 (ネイティブAppleサインイン):

await SocialLogin.initialize({
  apple: {
    // No additional configuration needed for iOS
    // The plugin uses the native Apple Sign-In capability
  }
});

Android/Webの場合 (Service IDが必要です):

await SocialLogin.initialize({
  apple: {
    clientId: 'YOUR_SERVICE_ID', // The Service ID from Apple Developer Portal
    redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
  }
});

Appleの重要なポイント:

  • iOSは、Apple Developer Portalで設定したものと同じで、Sign in with Appleを使用します (追加の設定は必要ありません)
  • Android/Webでは、Apple Developer Portalで作成したService IDが必要です
  • 設定した redirectUrl Apple Developer PortalとSupabaseで設定したものと同じでなければなりません

Facebookプラグインの設定

Facebookでは、App IDとClient Tokenが必要です

await SocialLogin.initialize({
  facebook: {
    appId: 'YOUR_FACEBOOK_APP_ID',        // From Facebook Developer Dashboard
    clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN', // From Facebook Developer Dashboard
    
    // Optional: Use Facebook Limited Login (for enhanced privacy)
    limitedLogin: false // See our Facebook setup guide for important Limited Login details
  }
});

Facebookの重要なポイント:

  • Supabaseで設定したApp IDを使用してください
  • Client TokenはFacebook AppのBasic Settingsで見つけることができます
  • limitedLogin: true Facebookのプライバシー重視のLimited Login機能をiOSのみで有効にします
  • 注意: Facebookの設定ガイド 詳細なLimited Login情報、包括してATTの考慮事項については、

プラグインの初期化を完了する

すべてのプロバイダーを初期化する方法はこちらです:

import { SocialLogin } from '@capgo/capacitor-social-login';

export async function initializeSocialLogin() {
  await SocialLogin.initialize({
    google: {
      webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
      mode: 'offline'
    },
    facebook: {
      appId: 'YOUR_FACEBOOK_APP_ID',
      clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
    },
    apple: {
      // iOS: no config needed
      // Android/Web: uncomment the lines below
      // clientId: 'YOUR_SERVICE_ID',
      // redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
    }
  });
}

重要な注意:

  • CapgoのUIから initialize() アプリが起動したときに一度だけ呼び出してください、各ログイン前に呼び出すのではなく 使用する予定のプロバイダーだけを設定する必要があります
  • ここに記載されているクレデンシャルは
  • 元のプロバイダーから __CAPGO_KEEP_0__, Supabase からではなく
  • Supabase の設定に一致するようにプロバイダーの資格情報を確認してください

ステップ 5: Supabase クライアントの設定

Supabase クライアントをインストールしてください:

npm install @supabase/supabase-js

Supabase サービスを作成してください:

// services/supabase.ts
import { createClient } from '@supabase/supabase-js';

const supabaseUrl = 'https://your-project-ref.supabase.co';
const supabaseKey = 'your-anon-public-key';

export const supabase = createClient(supabaseUrl, supabaseKey, {
  auth: {
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  },
});

ステップ 6: 認証フローの実装

両方の認証サービスを組み合わせた認証サービスを作成してください:

// services/auth.ts
import { SocialLogin } from '@capgo/capacitor-social-login';
import { supabase } from './supabase';

export class AuthService {
  
  async initializeSocialLogin() {
    await SocialLogin.initialize({
      google: {
        webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
      },
      facebook: {
        appId: 'YOUR_FACEBOOK_APP_ID',
        clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
      },
      apple: {} // iOS configuration
    });
  }

  async signInWithGoogle() {
    try {
      const result = await SocialLogin.login({
        provider: 'google',
        options: {
          scopes: ['email', 'profile']
        }
      });

      const googleResult = result.result;
      if (!googleResult) {
        throw new Error('Google login failed');
      }

      // GoogleLoginResponse is a union type - check responseType to determine flow
      if (googleResult.responseType === 'online') {
        // Online mode: use idToken directly with Supabase
        const { data, error } = await supabase.auth.signInWithIdToken({
          provider: 'google',
          token: googleResult.idToken!,
        });
        if (error) throw error;
        return data;
      } else {
        // Offline mode: exchange serverAuthCode on your backend
        // Your backend should exchange the code for tokens and create a Supabase session
        const response = await fetch('/api/auth/google', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ serverAuthCode: googleResult.serverAuthCode })
        });
        return response.json();
      }
    } catch (error) {
      console.error('Google sign-in error:', error);
      throw error;
    }
  }

  async signInWithApple() {
    try {
      const result = await SocialLogin.login({
        provider: 'apple',
        options: {
          scopes: ['email', 'name']
        }
      });

      const { data, error } = await supabase.auth.signInWithIdToken({
        provider: 'apple',
        token: result.result?.identityToken!,
      });

      if (error) throw error;
      return data;
    } catch (error) {
      console.error('Apple sign-in error:', error);
      throw error;
    }
  }

  async signInWithFacebook() {
    try {
      const result = await SocialLogin.login({
        provider: 'facebook',
        options: {
          permissions: ['email', 'public_profile']
        }
      });

      const fbResult = result.result;
      if (!fbResult?.accessToken?.token) {
        throw new Error('Facebook login failed - no access token received');
      }

      // Facebook uses accessToken for Supabase authentication
      const { data, error } = await supabase.auth.signInWithIdToken({
        provider: 'facebook',
        token: fbResult.accessToken.token,
      });

      if (error) throw error;
      return data;
    } catch (error) {
      console.error('Facebook sign-in error:', error);
      throw error;
    }
  }

  async signOut() {
    // Sign out from Supabase
    await supabase.auth.signOut();
    
    // Optionally sign out from social providers
    await SocialLogin.logout({
      provider: 'google' // or 'apple', 'facebook'
    });
  }

  getCurrentUser() {
    return supabase.auth.getUser();
  }

  onAuthStateChange(callback: (event: string, session: any) => void) {
    return supabase.auth.onAuthStateChange(callback);
  }
}

export const authService = new AuthService();

ステップ 7: アプリケーションに実装

サービスを初期化し、認証を処理してください:

// main.ts or app component
import { authService } from './services/auth';

async function initializeApp() {
  await authService.initializeSocialLogin();
  
  // Listen to auth state changes
  authService.onAuthStateChange((event, session) => {
    if (event === 'SIGNED_IN') {
      console.log('User signed in:', session.user);
      // Redirect to authenticated area
    } else if (event === 'SIGNED_OUT') {
      console.log('User signed out');
      // Redirect to login
    }
  });
}

initializeApp();

UI にログインボタンを作成してください:

// Login component
async function handleGoogleLogin() {
  try {
    const user = await authService.signInWithGoogle();
    console.log('Signed in with Google:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleAppleLogin() {
  try {
    const user = await authService.signInWithApple();
    console.log('Signed in with Apple:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleFacebookLogin() {
  try {
    const user = await authService.signInWithFacebook();
    console.log('Signed in with Facebook:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleLogout() {
  try {
    await authService.signOut();
    console.log('Signed out successfully');
  } catch (error) {
    console.error('Logout failed:', error);
  }
}

ステップ 8: プラットフォーム固有の設定

iOS 設定

iOSの詳細設定方法については、プラットフォーム固有のガイドを参照してください。

クイックサマリー - 追加 ios/App/App/Info.plist:

<!-- Google Sign-In URL scheme -->
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>YOUR_REVERSED_CLIENT_ID</string>
    </array>
  </dict>
</array>

<!-- Apple Sign-In capability -->
<key>com.apple.developer.applesignin</key>
<array>
  <string>Default</string>
</array>

Xcodeプロジェクトの設定を含むiOSの詳細設定方法については、リンクされたガイドを参照してください。

Androidの設定

Androidの詳細設定手順については、プラットフォーム固有のガイドを参照してください:

Androidの基本設定:

1. SHA-1の指紋を取得する (Googleの場合):

# For debug builds (development)
cd android
./gradlew signingReport

# Look for the SHA1 fingerprint under "Variant: debug"
# Add this SHA1 to your Google Cloud Console Android OAuth client

2. AndroidManifest.xmlを設定する - 追加 android/app/src/main/AndroidManifest.xml:

<!-- Internet permission -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- Facebook configuration -->
<meta-data 
  android:name="com.facebook.sdk.ApplicationId" 
  android:value="@string/facebook_app_id"/>
<meta-data 
  android:name="com.facebook.sdk.ClientToken" 
  android:value="@string/facebook_client_token"/>

3. Facebook リソースを追加android/app/src/main/res/values/strings.xml:

<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>

Live Updateのダイナミックラベル

Google Play Servicesの設定とパッケージ名の設定を含むAndroidの完全な構成については、関連するプラットフォームガイドを参照してください。

Step 9: Supabaseデータベースの使用と認証済みユーザー

// Example: Fetch user profile
async function getUserProfile() {
  const { data: user } = await supabase.auth.getUser();
  
  if (user) {
    const { data, error } = await supabase
      .from('profiles')
      .select('*')
      .eq('id', user.user.id)
      .single();
    
    return data;
  }
}

// Example: Update user profile
async function updateUserProfile(updates: any) {
  const { data: user } = await supabase.auth.getUser();
  
  if (user) {
    const { data, error } = await supabase
      .from('profiles')
      .update(updates)
      .eq('id', user.user.id);
    
    return data;
  }
}

ユーザーが認証されたら、行レベルセキュリティ(RLS)を使用してSupabaseのデータベースを使用できます。

  1. 重要なセキュリティ上の考慮事項 in your client code
  2. __CAPGO_KEEP_0__ に暴露しない
  3. 環境変数を使用して構成 Supabase における
  4. トークンを検証する 必要に応じてバックエンドで
  5. トークンを自動的に更新する Supabase で

トラブルシューティングの一般的な問題

トークン一致エラー

  • ソーシャルログインプラグインと Supabase の OAuth プロバイダーの設定が一致していることを確認する
  • リダイレクト URL が正しく設定されていることを確認する

プラットフォーム固有の問題

  • iOS: Apple Developer の設定と Bundle ID が一致していることを確認する
  • Android: Google Console に SHA1 の指紋が正しく追加されていることを確認する

認証フロー中断

  • ネットワーク問題のための適切なエラーハンドリングを実装する
  • 認証中にローディング状態を追加する

結論

Capacitorのソーシャルログインプラグインと組み合わせたSupabaseの強力なバックエンドとネイティブのソーシャルログイン機能を組み合わせた完全な認証システムを持つようになりました。この設定では

  • セキュアなネイティブソーシャル認証
  • トークン管理のシームレス
  • リアルタイムデータベース統合
  • クロスプラットフォーム互換性

Capgoプラグインと組み合わせたSupabaseとCapacitorは、Capacitorアプリケーション向けに強力かつスケーラブルな認証ソリューションを提供します。

より高度な機能 マルチファクター認証 または カスタムクレーム、Capgoの SupabaseドキュメントSocial Loginプラグインドキュメント.

Keep going from Setup Supabase Authentication with Capacitor Social Login Plugin

Setup Supabase Authentication with __CAPGO_KEEP_0__ Social Login Plugin Setup Supabase Authentication with Capacitor Social Login Plugin Setup Supabase Authentication with __CAPGO_KEEP_0__ Social Login Plugin @capgo/capacitor-social-login CapgoのSetup Supabase Authentication with capgo Social Login Pluginを使用して認証とアカウントフローを計画し、@capgo/capacitor-social-loginと接続する @capgo/capacitor-passkey @capgo/capacitor-passkey @capgo/capacitor-native-biometric @capgo/capacitor-native-biometric 都の安全試导にらだ 都の安全試导にらだ エェサインを上だ エェサインを上だ

リアルタイムの更新はCapacitorアプリに適用されます。

ウェブ層のバグが生じた場合、Capgoを通じて修正を配信し、数日間待つ必要のあるアプリストアの承認を待つのではなく、ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路を通じて進む。

マーティンから人間のサポートを受けます。

今すぐ始めましょう。

最新のブログ記事

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。