> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 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`)経由でローカルサーバーを公開し、テスト中はトンネルのドメインとそのコールバックを登録してください。

[Apple Developer アカウントを作成する](https://supastack.dev/ja/docs/mobile/external-accounts.md)

[データベースのセットアップ](https://supastack.dev/ja/docs/web/setup-database.md)


## App ID を登録する

1. [developer.apple.com/account](https://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 を載せてください。レビューが何を見るかはモバイルアカウントのガイドが説明しています。

[モバイルアカウントを作成する](https://supastack.dev/ja/docs/mobile/external-accounts.md)

[次に Stripe 決済を追加](https://supastack.dev/ja/docs/web/stripe-payments.md)

[OAuth プロバイダーの概要](https://supastack.dev/ja/docs/web/setup-oauth.md)


設定を続けるには、[Stripe 決済を追加](https://supastack.dev/ja/docs/web/stripe-payments.md)をご覧ください。


## 次へ

[Stripe 決済を追加](https://supastack.dev/ja/docs/web/stripe-payments.md)
