> ## 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 ile giriş ekleyin

Apple Developer portalında bir App ID, bir Services ID ve bir Sign in with Apple anahtarı kaydedin ve istemci çiftini uygulamaya bağlayın.

## Başlangıç seviyesinde izlenecek yol

Ön koşullar: web uygulaması yerelde çalışıyor (5 dakikada yayınlayın), gerçek hesaplar için geçiş yapılmış bir veritabanı (Veritabanını kurun) ve bir Apple Developer Program üyeliği — mobil hesap rehberinin kaydettiği yıllık 99$'lık aynı hesap, henüz yapmadıysanız devam etmeden önce o adımı tamamlayın. Aşağıdaki geliştirici portalındaki hiçbir şey ekstra ücretli değildir.

Neden önemli: App Store incelemesi, iOS uygulaması Google veya GitHub gibi üçüncü taraf sosyal giriş sunduğunda Sign in with Apple gerektirir ve web'de de sağlam, düşük sürtünmeli bir düğmedir — Apple kullanıcıları cihazlarında zaten bulunan hesapla giriş yapar.

Kısa terimler: bir App ID, uygulamanızın kayıtlı tanımlayıcısıdır (`com.yourcompany.yourapp`). Services ID, Apple'ın web ve sunucu girişi için verdiği ikinci bir tanımlayıcıdır — istemci kimliğiniz olur. Return URL, Apple'ın giriş yapmış kullanıcıyı geri gönderebileceği tam adrestir — kit'in Better Auth geri çağrısı. Gizli anahtar, Apple'ın bir kez verdiği `.p8` dosyasıdır; onu kendiniz istemci gizli anahtarına çevirirsiniz.

1. Sign in with Apple yeteneği olan bir App ID kaydedin. 2. Ona işaret eden ve alan adınız ile return URL'yi tutan bir Services ID kaydedin. 3. Bir Sign in with Apple anahtarı oluşturun ve `.p8` dosyasını indirin. 4. Anahtarı bir client-secret JWT'ye çevirin ve üç env değerini ayarlayın.

Dürüst bir kısıtlama: Apple'ın return URL'leri kayıtlı bir alan adında mutlak `https://` adresleri olmalıdır — `localhost` ve düz `http` reddedilir, bu yüzden düğme çıplak bir yerel sunucuda tam olarak denenemez. Dağıtılmış URL'nizde doğrulayın ya da yerel sunucuyu bir https tünelinin (ör. `cloudflared tunnel` veya `ngrok`) arkasında açın ve test sırasında tünel alan adı ile geri çağrısını kaydedin.

[Apple Developer hesabı oluşturma](https://supastack.dev/tr/docs/mobile/external-accounts.md)

[Veritabanını kurma](https://supastack.dev/tr/docs/web/setup-database.md)


## App ID'yi kaydedin

1. [developer.apple.com/account](https://developer.apple.com/account) sayfasını açın ve Developer Program üyeliğine sahip hesapla giriş yapın.

2. Certificates, Identifiers & Profiles → Identifiers sayfasını açın ve mavi + düğmesine tıklayın.

3. App IDs → Continue'yu seçin, türü App'te tutun → Continue.

4. Description: ürün adınız. Bundle ID: Explicit'i seçin ve ters alan adı biçimi `com.yourcompany.yourapp` girin — iOS uygulamasını gönderiyorsanız tam olarak `apps/mobile/app.json` içindeki `ios.bundleIdentifier` kullanın ki iki platform aynı App ID'yi paylaşsın.

5. Yetenek listesinde Sign in with Apple'ı işaretleyin → Continue → Register.

Beklenen: tanımlayıcı, Sign in with Apple yeteneği etkin olarak Identifiers listesinde görünür. Bu tek App ID'yi yeniden kullanın — Services ID ve anahtar ikisi de ana uygulama olarak ona bağlanır.


## Services ID ve return URL'yi kaydedin

1. Identifiers'a dönün, tekrar +'ya tıklayın, Services IDs → Continue'yu seçin.

2. Description: `yourapp web sign-in` gibi bir şey. Identifier: başka bir ters alan adı — `com.yourcompany.yourapp.web` gelenekseldir — bilerek App ID'den farklı. Bu Services ID, sunucunun web girişi için kullandığı istemci kimliğidir; onu tam olarak kopyalayın, ardından Continue → Register.

3. Listede yeni Services ID'yi seçin, Sign in with Apple'ı işaretleyin ve Configure'a tıklayın.

4. İletişim kutusunda Primary App ID'yi önceki bölümdeki App ID'ye ayarlayın. Website URLs altına alan adınızı (ör. `yourdomain.com`), Return URLs altına ise `https://yourdomain.com/api/auth/callback/apple` ekleyin — bu yol kit'in Better Auth geri çağrısıdır, `{APP_URL}/api/auth/callback/apple`. Save → Continue → Save.

Her return URL, kayıtlı bir alan adında mutlak `https://` adresi olmalıdır: `localhost`, çıplak IP adresleri ve `http` reddedilir. Yerel geliştirme için uygulamayı bir https tünelinin arkasında çalıştırın, tünel alan adını Services ID'ye ekleyin, `https://<tunnel-domain>/api/auth/callback/apple` kaydedin ve test sırasında `APP_URL` tünel URL'sine ayarlayın.

Beklenen: Services ID, Sign in with Apple → Enabled gösterir. Portal alan adınızı reddederse önce hesap sayfasında alan adı sahipliği doğrulamasını tamamlayın.


## Sign in with Apple anahtarı oluşturun

1. Sol kenar çubuğunda Keys → +'yı açın. Anahtara ad verin (ör. `yourapp sign-in key`), Sign in with Apple'ı işaretleyin, Configure'a tıklayın, App ID'yi Primary App ID seçin → Save → Continue → Register.

2. Onay ekranında Key ID'yi not edin, ardından Download'a tıklayın — `.p8` dosyası tam olarak bir kez sunulur. Kaybederseniz anahtarı iptal edin ve yenisini oluşturun; Apple kopya saklamaz.

3. Team ID'nizi de not edin — geliştirici hesap sayfalarının sağ üst köşesinde, hesap adınızın yanında yazılıdır.

Beklenen: artık üç değere sahipsiniz — `.p8` dosyası, bir Key ID ve Team ID'niz. `.p8` dosyasını Git'in dışında tutun: geliştirici hesabınız olarak imzalar.


## Değerleri uygulamaya ekleyin

Kit tam olarak aşağıdaki üç satırı bekler — her sosyal sağlayıcının kullandığı aynı `clientId`/`clientSecret` çifti. `APPLE_CLIENT_ID`, App ID değil Services ID'dir (`com.yourcompany.yourapp.web`).

Apple statik bir istemci gizli anahtarı vermez, bu yüzden `APPLE_CLIENT_SECRET` sizin Team ID, Key ID ve `.p8` özel anahtarından imzaladığınız bir JWT'dir — Better Auth belgeleri bunun için kısa üretici betiği sağlar. İmzalı gizli anahtar en fazla altı ay geçerli kalır: onu yeniden üretmek ve env değerini güncellemek için bir hatırlatıcı ayarlayın, çünkü süresi dolduğu an giriş başarısız olur. `.p8` dosyasının içeriğini veya ham Key ID'yi asla env'e yapıştırmayın — oraya yalnızca üretilmiş JWT girer.

İstemci gizli anahtarı ve `.p8` dosyası yalnızca sunucudadır: asla `NEXT_PUBLIC_`/`EXPO_PUBLIC_` değişkenlerinde veya commit'lerde olmamalı — üretimde bunları hostunuzun gizli deposu aracılığıyla ayarlayın. Düzenledikten sonra geliştirme sunucusunu yeniden başlatın; env değişiklikleri başlangıçta okunur.

```
# 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>
```


## Doğrulayın ve sorun giderin

`APP_URL`'nizi — dağıtılmış URL veya https tüneli — `/auth` üzerinde açın, Apple düğmesine tıklayın, herhangi bir Apple ID ile giriş yapın (geliştirici hesabı olmak zorunda değil) ve giriş yapmış olarak döndüğünüzü doğrulayın.

Çoğu hata üç karışıklıktan biridir: Services ID ile App ID — istemci kimliği web girişi için Services ID olmalıdır; return URL uyuşmazlığı — geri çağrı protokol, alan adı ve yol dahil kayıtlı bir Return URL'ye tam olarak eşit olmalıdır; veya süresi dolmuş/geçersiz istemci gizli anahtarı — JWT'yi yeniden üretin, o yalnızca imzalı bir belirteçtir, `.p8` içeriği değildir.

`AUTH_APPLE_ENABLED=true` ayarlanana kadar `/auth` üzerindeki Apple seçeneği devre dışı kalır — env adlarını kontrol edin ve yeniden başlatın. Bayrağı hem `APPLE_CLIENT_ID` hem `APPLE_CLIENT_SECRET` olmadan etkinleştirmek başlangıcı düşürür ve eksik değişkeni adlandırır.

iOS uygulaması aynı arka uca ulaşır — App Store incelemesinin diğer sosyal düğmeleri kabul etmesi için içine Sign in with Apple gönderin. Mobil hesap rehberi incelemenin ne aradığını açıklar.

[Mobil hesapları oluşturun](https://supastack.dev/tr/docs/mobile/external-accounts.md)

[Ardından Stripe ödemeleri ekleyin](https://supastack.dev/tr/docs/web/stripe-payments.md)

[OAuth sağlayıcı genel bakışı](https://supastack.dev/tr/docs/web/setup-oauth.md)


Kuruluma devam etmek için [Stripe ödemeleri ekleyin](https://supastack.dev/tr/docs/web/stripe-payments.md) kılavuzunu okuyun.


## Sonraki

[Stripe ödemeleri ekleyin](https://supastack.dev/tr/docs/web/stripe-payments.md)
