コンテンツへスキップ
supastack
ドキュメントを閲覧
WebNext.js

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ja/docs/web/apple-sign-in.md (or send Accept: text/markdown).

Apple サインインを追加

Apple Developer ポータルで App ID、Services ID、Sign in with Apple キーを登録し、クライアントのペアをアプリに組み込みます。

このガイドについて質問
開くアプリ

初心者向けのウォークスルー

前提条件:ローカルで動作する Web アプリ(5 分で公開)、実アカウント用の移行済みデータベース(データベースのセットアップ)、そして Apple Developer Program メンバーシップ——モバイルアカウントのガイドで登録するのと同じ年額 99 ドルのアカウントです。まだの場合は、ここを続ける前にその手順を完了してください。以下のデベロッパーポータル内の作業はすべて追加費用なしで行えます。

重要な理由:iOS アプリが Google や GitHub などのサードパーティソーシャルサインインを提供する場合、App Store レビューは Sign in with Apple を要求します。Web でも摩擦の少ない優れたボタンです——Apple ユーザーはデバイス上の既存アカウントでサインインできます。

用語メモ:App ID はアプリの登録識別子(com.yourcompany.yourapp)です。Services ID は、Apple が Web とサーバーのサインイン用に発行する 2 つ目の識別子で、これがクライアント ID になります。リターン URL は、Apple がサインイン済みユーザーを送り返せる正確なアドレス——キットの Better Auth コールバックです。シークレットキーは Apple が一度だけ渡す .p8 ファイルで、これを自分でクライアントシークレットに変換します。

1. Sign in with Apple ケイパビリティを持つ App ID を登録します。2. それを指し、ドメインとリターン URL を保持する Services ID を登録します。3. Sign in with Apple キーを作成し、.p8 ファイルをダウンロードします。4. キーをクライアントシークレットの JWT に変換し、3 つの env 値を設定します。

正直な制限:Apple のリターン URL は、登録済みドメイン上の絶対 https:// アドレスでなければなりません——localhost と素の http は拒否されるため、裸のローカルサーバーではボタンを完全には試せません。デプロイ済み URL で確認するか、https トンネル(たとえば cloudflared tunnel や ngrok)経由でローカルサーバーを公開し、テスト中はトンネルのドメインとそのコールバックを登録してください。

App ID を登録する

1. developer.apple.com/account を開き、Developer Program メンバーシップを持つアカウントでサインインします。

2. Certificates, Identifiers & Profiles → Identifiers を開き、青い + ボタンをクリックします。

3. App IDs → Continue を選択し、タイプは App のまま → Continue。

4. Description: 製品名。Bundle ID: Explicit を選び、逆ドメイン形式の com.yourcompany.yourapp を入力します——iOS アプリを出荷する場合は apps/mobile/app.json の ios.bundleIdentifier と正確に一致させ、両プラットフォームで 1 つの App ID を共有します。

5. ケイパビリティ一覧で Sign in with Apple にチェック → Continue → Register。

期待される結果:識別子が Identifiers 一覧に Sign in with Apple ケイパビリティ有効の状態で表示されます。この 1 つの App ID を再利用します——Services ID とキーの両方が、プライマリアプリとしてこれに紐づきます。

Services ID とリターン URL を登録する

1. Identifiers に戻って再び + をクリックし、Services IDs → Continue を選びます。

2. Description: yourapp web sign-in のようなもの。Identifier: 別の逆ドメイン名——com.yourcompany.yourapp.web が慣例です——App ID とは意図的に異なるものにします。この Services ID が、サーバーが Web サインインに使うクライアント ID です。正確にコピーしてから Continue → Register。

3. 一覧で新しい Services ID を選択し、Sign in with Apple にチェックを入れ、Configure をクリックします。

4. ダイアログで Primary App ID を前のセクションの App ID に設定します。Website URLs にドメイン(たとえば yourdomain.com)を追加し、Return URLs に https://yourdomain.com/api/auth/callback/apple を追加します——このパスはキットの Better Auth コールバック {APP_URL}/api/auth/callback/apple です。Save → Continue → Save。

各リターン URL は登録済みドメイン上の絶対 https:// アドレスでなければなりません:localhost、裸の IP アドレス、http は拒否されます。ローカル開発ではアプリを https トンネルの後ろで動かし、トンネルのドメインを Services ID に追加し、https://<tunnel-domain>/api/auth/callback/apple を登録し、テスト中は APP_URL をトンネル URL に設定します。

期待される結果:Services ID が Sign in with Apple → Enabled と表示されます。ポータルがドメインを拒否する場合は、まずアカウントページでドメイン所有権の検証を完了してください。

Sign in with Apple キーを作成する

1. 左サイドバーの Keys → + を開きます。キーに名前を付け(たとえば yourapp sign-in key)、Sign in with Apple にチェックを入れ、Configure をクリックし、App ID を Primary App ID として選択 → Save → Continue → Register。

2. 確認画面で Key ID を控え、Download をクリックします——.p8 ファイルが提供されるのは一度だけです。失くした場合はキーを取り消して別のものを作成します。Apple はコピーを保持しません。

3. Team ID も控えます——デベロッパーアカウントページの右上隅、アカウント名の隣に表示されています。

期待される結果:.p8 ファイル、Key ID、Team ID の 3 つの値が揃いました。.p8 ファイルは Git に入れないでください。これはあなたのデベロッパーアカウントとして署名します。

値をアプリに追加する

キットが期待するのは以下の 3 行だけです——すべてのソーシャルプロバイダーが使うのと同じ clientId/clientSecret のペアです。APPLE_CLIENT_ID は App ID ではなく Services ID(com.yourcompany.yourapp.web)です。

Apple は静的なクライアントシークレットを発行しないため、APPLE_CLIENT_SECRET は Team ID、Key ID、.p8 秘密鍵から自分で署名する JWT です——Better Auth のドキュメントにその短い生成スクリプトが同梱されています。署名済みシークレットの有効期間は最長 6 か月です:再生成して env 値を更新するリマインダーを設定してください。失効した瞬間にサインインは失敗します。.p8 ファイルの中身や生の Key ID を env に貼り付けないでください——そこに入れるのは生成した JWT だけです。

クライアントシークレットと .p8 ファイルはサーバー専用です:NEXT_PUBLIC_/EXPO_PUBLIC_ 変数には決して入れず、コミットもしません——本番ではホストのシークレットストア経由で設定します。編集後は開発サーバーを再起動してください。env の変更は起動時に読み込まれます。

# apps/web/.env.local
AUTH_APPLE_ENABLED=true
APPLE_CLIENT_ID=com.yourcompany.yourapp.web   # the Services ID, not the App ID
APPLE_CLIENT_SECRET=<JWT signed with Team ID + Key ID + .p8>

確認とトラブルシューティング

APP_URL——デプロイ済み URL または https トンネル——の /auth を開き、Apple ボタンをクリックし、任意の Apple ID(デベロッパーアカウントである必要はありません)でサインインし、サインイン状態で戻ってくることを確認します。

失敗のほとんどは 3 つの取り違えのいずれかです:Services ID と App ID の混同——クライアント ID は Web サインイン用の Services ID でなければなりません。リターン URL の不一致——コールバックはプロトコル・ドメイン・パスを含めて登録済み Return URL と正確に一致する必要があります。または期限切れ/無効なクライアントシークレット——JWT を再生成してください。これは署名付きトークンであり、.p8 の中身ではありません。

AUTH_APPLE_ENABLED=true を設定するまで、/auth の Apple オプションは無効のままです——env 名を確認して再起動してください。APPLE_CLIENT_ID と APPLE_CLIENT_SECRET の両方なしにフラグを有効にすると起動が失敗し、不足している変数が名指しされます。

iOS アプリも同じこのバックエンドに到達します——他のソーシャルボタンを App Store レビューが受け入れるように、その中にも Sign in with Apple を載せてください。レビューが何を見るかはモバイルアカウントのガイドが説明しています。

設定を続けるには、Stripe 決済を追加をご覧ください。

よくある質問

14 件の質問

supastack とは何ですか?

supastack は AI SaaS 製品を構築するためのモジュラー基盤です。共通インフラをまとめて提供するので、製品固有の機能に集中できます。

Web とモバイルに対応していますか?

はい。supastack には Web とモバイル体験の出発点として Next.js アプリと Expo アプリが含まれています。

どの認証が含まれていますか?

Better Auth がメール/パスワード、OTP、ソーシャルログインをカバーします。個人ワークスペースはアカウントと一緒にプロビジョニングされ、初日からレコードが境界内に収まります。

AI はどうサポートされていますか?

supastack には設定可能なマルチプロバイダー AI、使用量追跡、予算、暗号化された自前キー(BYOK)サポートが含まれています。

サブスクリプションはどう管理されますか?

このキット上に構築された製品では、Stripe 課金・サブスクリプション・権限が有料アクセスの基盤になります。プロバイダーの秘密はサーバー側に留まります。

製品固有のコードはどこに置きますか?

製品固有の機能は別のコードベースに置き、製品側が supastack の基本モジュールを設定・統合します。

supastack の価格は?

キットは生涯アップデート付きの一回払いです:単一フレームワーク 249 ドル(期間限定のローンチ価格 — 通常価格 349 ドルから 100 ドル割引)、または全フレームワーク(Next.js・iOS・Android)499 ドル(期間限定のローンチ価格 — 通常価格 599 ドルから 100 ドル割引)、追加開発者シート 1 席 75 ドル。キットのサブスクリプションはありません。このサイトのチェックアウトはライセンスキーをメールで配信し、GitHub 招待でリポジトリアクセスを提供します。

ワークスペースはどうデータを囲いますか?

ユーザーレコードは workspaceId でスコープされます。認証、権限、AI 使用量、課金イベント、監査エントリは個人ワークスペースの境界内に留まります。

バックグラウンドジョブはどう機能しますか?

Trigger.dev が明示的なジョブランタイムです。JobRunner コントラクトは enqueue・status・cancel のみを約束し、ワークフロー意味論は Trigger.dev 固有で明示的です。

メールとアウトリーチの違いは?

トランザクションメールはタスク完了通知などの製品ワークフローをカバーします。コールドアウトリーチやキャンペーンは製品自身に属し、このキットのメールモジュールの外です。

モバイルの購入はどのように機能しますか?

モバイルでは RevenueCat によるネイティブ購入と復元に対応し、アクセス権をサーバーで検証します。公開前にストアアカウントを設定し、実機テストを完了してください。Web 課金は別に管理します。

AI プロバイダーのキーはどこにありますか?

BYOK 認証情報は暗号化され、サーバー側に留まります。キーはログでサニタイズされ、使用量と予算はワークスペースレベルで可視です。

チェックアウトで使える支払い方法は?

Stripe ホストのチェックアウトはカードを受け付け、Stripe アカウントでウォレットを有効にすれば Alipay と WeChat Pay も提供できます——中国の購入者に便利です。ウォレット認可は非同期で確定するため、決済完了と同時にライセンスページが更新されます。

返金を受けることはできますか?

リポジトリへのアクセス権を取得した後は、supastack は永久にあなたのものとなるため、返金はできません。ですがご安心ください。生涯アップデートを含む完全なソースコードを入手し、ご自身やクライアントのために無制限にプロダクトを構築・公開できます。コードの転売や、リポジトリをスターターキットやテンプレートとして再配布することのみ禁止されています。

JA
テーマ