Supabase Apple Login - Android
このガイドでは、AndroidでSupabase認証を用いたAppleサインインを統合する方法を説明します。以下の手順を既に完了していることを前提としています:
ステップ1: バックエンドEdge Functionのデプロイ
Section titled “ステップ1: バックエンドEdge Functionのデプロイ”まず、Apple OAuthコールバックを処理するSupabase Edge Functionをデプロイする必要があります。
-
Supabaseプロジェクトディレクトリに移動
Terminal window cd your-project/supabase -
Edge Functionを作成(存在しない場合)
Terminal window supabase functions new apple-signin-callback -
Edge Functionのコードをコピー
完全なEdge Functionの実装は、サンプルアプリで利用可能です。
以下のファイルをプロジェクトにコピーしてください:
supabase/functions/apple-signin-callback/index.ts- メインのEdge Functionコードsupabase/functions/apple-signin-callback/deno.json- 依存関係のインポートマップ(joseライブラリを含む)
-
JWT検証の設定
Apple OAuthコールバックエンドポイントは、Appleがリダイレクトするため、パブリック(認証不要)である必要があります。
supabase/config.tomlファイルを更新してください:[functions.apple-signin-callback]enabled = trueverify_jwt = false # 重要: パブリックOAuthコールバックのためfalseに設定import_map = "./functions/apple-signin-callback/deno.json"entrypoint = "./functions/apple-signin-callback/index.ts" -
Functionをデプロイ
Terminal window supabase functions deploy apple-signin-callback -
Function URLを取得
デプロイ後、次のようなURLが得られます:
https://your-project-ref.supabase.co/functions/v1/apple-signin-callback見つからない場合は、以下の手順を実行してください:
https://supabase.com/dashboard/project/YOUR_PROJECT_REF/functionsを開くapple-signin-callbackFunctionのURLをクリックしてコピーする
ステップ2: Apple Developer Portalの設定
Section titled “ステップ2: Apple Developer Portalの設定”バックエンドURLを使用してApple Developer Portalを設定し、必要なすべての値を取得する必要があります。
-
Apple Login Android設定ガイドに従う
Apple Login Android設定ガイドを完了して、以下を行ってください:
- Service IDを作成
- プライベートキー(.p8ファイル)を生成
- Team IDとKey IDを取得
- Return URLを設定
-
Apple Developer PortalでReturn URLを設定
Apple Developer PortalでReturn URLを設定する際(Appleガイドのステップ6.9)、Supabase Edge Function URLを使用してください:
https://your-project-ref.supabase.co/functions/v1/apple-signin-callback重要: Supabase Edge Function URLを使用
Apple Login Android設定ガイドのリダイレクトURLは使用しないでください。そのガイドはカスタムバックエンドサーバーURLを使用しています。Supabase統合の場合、代わりにSupabase Edge Function URLを必ず使用してください。
-
必要なすべての値を収集
Apple設定ガイドを完了後、以下の値が必要です:
- APPLE_TEAM_ID: Apple Developer Team ID
- APPLE_KEY_ID: Apple Developer PortalのKey ID
- APPLE_PRIVATE_KEY: .p8プライベートキーファイル(base64エンコードが必要)
- ANDROID_SERVICE_ID: Apple Service ID(例:
com.example.app.service) - BASE_REDIRECT_URL: ディープリンクURL(例:
capgo-demo-app://path)
ステップ3: Supabaseシークレットの設定
Section titled “ステップ3: Supabaseシークレットの設定”Supabase Edge Functionの環境変数(シークレット)を設定する必要があります。
-
プライベートキーをエンコード
まず、Appleプライベートキー(.p8ファイル)をbase64にエンコードします:
Terminal window base64 -i AuthKey_XXXXX.p8出力全体をコピーしてください(1つの長い文字列です)。
-
Supabase CLIを使用してシークレットを設定
Terminal window supabase secrets set APPLE_TEAM_ID=your_team_idsupabase secrets set APPLE_KEY_ID=your_key_idsupabase secrets set APPLE_PRIVATE_KEY=your_base64_encoded_keysupabase secrets set ANDROID_SERVICE_ID=your.service.idsupabase secrets set BASE_REDIRECT_URL=your-app://pathsupabase secrets set APPLE_REDIRECT_URI=https://your-project-ref.supabase.co/functions/v1/apple-signin-callback -
代替: Supabaseダッシュボードでシークレットを設定
ダッシュボードを使用する場合:
- Supabaseプロジェクトダッシュボードに移動
- Edge Functions → Settings → Secretsに移動
- 各シークレット変数を値と共に追加
ステップ4: 認証ヘルパーの使用
Section titled “ステップ4: 認証ヘルパーの使用”アプリコードで認証ヘルパーを使用できるようになりました。
完全な実装は、サンプルアプリのsupabaseAuthUtils.tsファイルで利用可能です。
認証ヘルパーの使用
Section titled “認証ヘルパーの使用”import { authenticateWithAppleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithAppleSupabase();if (result.success) { console.log('サインイン:', result.user); // 認証されたエリアに移動} else { console.error('エラー:', result.error);}ヘルパー関数の更新
Section titled “ヘルパー関数の更新”authenticateWithAppleSupabaseヘルパー関数を使用する際、設定に合わせて以下の値を必ず更新してください:
-
redirectUrlを更新 - Supabase Edge Function URLに設定:const redirectUrl = platform === 'android'? 'https://your-project-ref.supabase.co/functions/v1/apple-signin-callback': undefined; -
clientIdを更新 - Apple Service IDに設定:await SocialLogin.initialize({apple: {clientId: isIOS? undefined // iOSは自動的にバンドルIDを使用: 'your.service.id.here', // Android用のApple Service IDredirectUrl: redirectUrl,},});
完全な実装については、完全な実装を参照してください。
ステップ5: 統合のテスト
Section titled “ステップ5: 統合のテスト”-
Androidアプリをビルドして実行
Terminal window npx cap sync androidnpx cap run android -
認証フローをテスト
- 「Appleでサインイン」ボタンをタップ
- ブラウザでApple OAuthページが表示されるはずです
- 認証後、アプリにリダイレクトされるはずです
- エラーがないかコンソールログを確認
-
フローを検証
完全なフローは次のようになります:
- ユーザーが「Appleでサインイン」をタップ
- アプリがApple OAuthでブラウザを開く
- ユーザーがAppleで認証
- Appleが
https://your-project-ref.supabase.co/functions/v1/apple-signin-callbackにリダイレクト - Edge Functionがコードをトークンに交換
- Edge Functionが
your-app://path?id_token=...&access_token=...にリダイレクト - Androidアプリがディープリンクを受信し、IDトークンを処理
- アプリがIDトークンでSupabaseにサインイン
トラブルシューティング
Section titled “トラブルシューティング”認証に失敗した場合:
- リダイレクトURIの不一致: Apple Developer PortalのReturn URLが
APPLE_REDIRECT_URIシークレットと完全に一致することを確認 - ディープリンクが機能しない:
AndroidManifest.xmlのインテントフィルターがBASE_REDIRECT_URLと一致することを確認 - シークレットが見つからない:
supabase secrets listを使用して、すべてのシークレットが正しく設定されていることを確認 - トークン交換の失敗: 詳細なエラーメッセージについては、Supabaseダッシュボードのedge functionログを確認
- アプリがコールバックを受信しない: MainActivityに
onNewIntentが正しく実装されていることを確認 - リファレンスについては、サンプルアプリコードを確認
AndroidでのAppleサインインは、OAuthリダイレクトフローを使用します:
- 初期化: プラグインがService IDとバックエンドリダイレクトURLで初期化されます
- OAuthフロー: AppleのOAuthページを含むブラウザ/Chrome Custom Tabを開きます
- バックエンドコールバック: Appleが認証コードと共にSupabase Edge Functionにリダイレクトします
- トークン交換: Edge FunctionがAppleのトークンエンドポイントを使用してコードをトークンに交換します
- ディープリンクリダイレクト: Edge FunctionがIDトークンと共にアプリにリダイレクトします
- Supabase認証: アプリがトークンを受信し、Supabaseにサインインします
このフローは、AppleがSign in with AppleのネイティブなAndroidサポートを提供していないため必要です。