Zum Inhalt springen
supastack
Dokumentation durchstöbern
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 /de/docs/web/apple-sign-in.md (or send Accept: text/markdown).

Apple-Anmeldung hinzufügen

Registrieren Sie eine App ID, eine Services ID und einen Sign-in-with-Apple-Key im Apple-Developer-Portal und binden Sie dann das Client-Paar in die App ein.

Schritt-für-Schritt für Einsteiger

Voraussetzungen: Die Web-App läuft lokal (In 5 Minuten shippen), eine migrierte Datenbank steht für echte Konten (Datenbank einrichten) und eine Apple-Developer-Program-Mitgliedschaft liegt vor — dasselbe 99-$-pro-Jahr-Konto, das der Mobile-Konten-Guide einrichtet; erledigen Sie diesen Schritt also zuerst, falls noch nicht geschehen. Alles im Developer-Portal unten kostet nichts extra.

Warum es wichtig ist: Die App-Store-Prüfung verlangt Sign in with Apple, sobald eine iOS-App soziale Drittanbieter-Anmeldung wie Google oder GitHub anbietet — und auch im Web ist es ein solider Button mit geringer Reibung: Apple-Nutzer melden sich mit dem Konto an, das bereits auf ihren Geräten ist.

Kurze Begriffe: Eine App ID ist die registrierte Kennung Ihrer App (com.yourcompany.yourapp). Eine Services ID ist eine zweite Kennung, die Apple für die Web- und Server-Anmeldung ausstellt — sie wird Ihre Client-ID. Eine Return URL ist die exakte Adresse, an die Apple einen angemeldeten Nutzer zurückschicken darf — der Better-Auth-Callback des Kits. Ein Secret Key ist die .p8-Datei, die Apple Ihnen einmal gibt; daraus erstellen Sie das Client-Secret selbst.

1. Registrieren Sie eine App ID mit der Fähigkeit Sign in with Apple. 2. Registrieren Sie eine Services ID, die darauf zeigt und Ihre Domain plus Return URL hält. 3. Erstellen Sie einen Sign-in-with-Apple-Key und laden Sie die .p8-Datei herunter. 4. Wandeln Sie den Key in ein Client-Secret-JWT um und setzen Sie die drei Env-Werte.

Eine ehrliche Einschränkung: Apples Return URLs müssen absolute https://-Adressen auf einer registrierten Domain sein — localhost und einfaches http werden abgelehnt, der Button lässt sich auf einem nackten lokalen Server also nicht vollständig ausprobieren. Prüfen Sie auf Ihrer deployeten URL, oder hängen Sie den lokalen Server hinter einen HTTPS-Tunnel (zum Beispiel cloudflared tunnel oder ngrok) und registrieren Sie die Tunnel-Domain plus ihren Callback fürs Testen.

Die App ID registrieren

1. Öffnen Sie developer.apple.com/account und melden Sie sich mit dem Konto an, das die Developer-Program-Mitgliedschaft hält.

2. Öffnen Sie Certificates, Identifiers & Profiles → Identifiers und klicken Sie auf den blauen +-Button.

3. Wählen Sie App IDs → Continue, lassen Sie den Typ auf App → Continue.

4. Description: Ihr Produktname. Bundle ID: Wählen Sie Explicit und geben Sie die Reverse-Domain-Form com.yourcompany.yourapp ein — wenn Sie die iOS-App ausliefern, verwenden Sie exakt den ios.bundleIdentifier aus apps/mobile/app.json, damit beide Plattformen eine App ID teilen.

5. Haken Sie in der Capability-Liste Sign in with Apple an → Continue → Register.

Erwartet: Die Kennung erscheint in der Identifiers-Liste mit aktivierter Sign-in-with-Apple-Fähigkeit. Nutzen Sie diese eine App ID wieder — Services ID und Key hängen beide als primäre App daran.

Die Services ID und die Return URL registrieren

1. Klicken Sie in Identifiers erneut auf +, wählen Sie Services IDs → Continue.

2. Description: etwa yourapp web sign-in. Identifier: ein weiterer Reverse-Domain-Name — com.yourcompany.yourapp.web ist die Konvention — bewusst anders als die App ID. Diese Services ID ist die Client-ID, die der Server für die Web-Anmeldung nutzt; kopieren Sie sie exakt, dann Continue → Register.

3. Wählen Sie die neue Services ID in der Liste, haken Sie Sign in with Apple an und klicken Sie auf Configure.

4. Setzen Sie im Dialog Primary App ID auf die App ID aus dem vorigen Abschnitt. Tragen Sie unter Website URLs Ihre Domain ein (zum Beispiel yourdomain.com) und unter Return URLs https://yourdomain.com/api/auth/callback/apple — dieser Pfad ist der Better-Auth-Callback des Kits, {APP_URL}/api/auth/callback/apple. Save → Continue → Save.

Jede Return URL muss eine absolute https://-Adresse auf einer registrierten Domain sein: localhost, nackte IP-Adressen und http werden abgelehnt. Für die lokale Entwicklung betreiben Sie die App hinter einem HTTPS-Tunnel, fügen die Tunnel-Domain zur Services ID hinzu, registrieren https://<tunnel-domain>/api/auth/callback/apple und setzen APP_URL beim Testen auf die Tunnel-URL.

Erwartet: Die Services ID zeigt Sign in with Apple → Enabled. Lehnt das Portal Ihre Domain ab, schließen Sie zuerst die Domain-Inhaberverifizierung auf der Kontoseite ab.

Den Sign-in-with-Apple-Key erstellen

1. Öffnen Sie Keys in der linken Seitenleiste → +. Benennen Sie den Key (zum Beispiel yourapp sign-in key), haken Sie Sign in with Apple an, klicken Sie auf Configure, wählen Sie die App ID als Primary App ID → Save → Continue → Register.

2. Notieren Sie auf dem Bestätigungsbildschirm die Key ID und klicken Sie auf Download — die .p8-Datei wird genau einmal angeboten. Verlieren Sie sie, widerrufen Sie den Key und erstellen einen neuen; Apple bewahrt keine Kopie auf.

3. Notieren Sie auch Ihre Team ID — sie steht oben rechts auf den Developer-Account-Seiten, neben Ihrem Kontonamen.

Erwartet: Sie halten jetzt drei Werte — die .p8-Datei, eine Key ID und Ihre Team ID. Halten Sie die .p8-Datei aus Git heraus: Sie signiert als Ihr Developer-Account.

Die Werte in die App eintragen

Das Kit erwartet exakt die drei Zeilen unten — dasselbe clientId/clientSecret-Paar wie bei jedem Social Provider. APPLE_CLIENT_ID ist die Services ID (com.yourcompany.yourapp.web), nicht die App ID.

Apple stellt kein statisches Client-Secret aus, darum ist APPLE_CLIENT_SECRET ein JWT, das Sie selbst aus Team ID, Key ID und dem .p8-Private-Key signieren — die Better-Auth-Dokumentation liefert das kurze Generator-Skript dafür mit. Ein signiertes Secret bleibt höchstens sechs Monate gültig: Setzen Sie sich eine Erinnerung, es neu zu erzeugen und den Env-Wert zu aktualisieren, denn die Anmeldung scheitert in dem Moment, in dem es abläuft. Fügen Sie nie den Inhalt der .p8-Datei oder die rohe Key ID in die Env ein — nur das erzeugte JWT gehört dorthin.

Das Client-Secret und die .p8-Datei bleiben serverseitig: nie in NEXT_PUBLIC_-/EXPO_PUBLIC_-Variablen und nie committet — in Produktion setzen Sie sie über den Secret Store Ihres Hosts. Starten Sie den Dev-Server nach dem Bearbeiten neu; Env-Änderungen werden nur beim Start gelesen.

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

Prüfen und Fehler beheben

Öffnen Sie Ihre APP_URL — eine deployete URL oder den HTTPS-Tunnel — unter /auth, klicken Sie auf den Apple-Button, melden Sie sich mit einer beliebigen Apple ID an (sie muss nicht der Developer-Account sein) und bestätigen Sie, dass Sie angemeldet zurückkommen.

Die meisten Fehler sind eine von drei Verwechslungen: Services ID vs App ID — die Client-ID muss die Services ID für die Web-Anmeldung sein; eine Return-URL-Ungleichheit — der Callback muss exakt einer registrierten Return URL entsprechen, inklusive Protokoll, Domain und Pfad; oder ein abgelaufenes/ungültiges Client-Secret — erzeugen Sie das JWT neu, das nur ein signiertes Token ist, nicht der Inhalt der .p8.

Bis AUTH_APPLE_ENABLED=true gesetzt ist, bleibt die Apple-Option auf /auth deaktiviert — prüfen Sie die Env-Namen und starten Sie neu. Das Flag ohne APPLE_CLIENT_ID und APPLE_CLIENT_SECRET zu aktivieren lässt den Start fehlschlagen und nennt die fehlende Variable.

Die iOS-App erreicht dasselbe Backend — liefern Sie Sign in with Apple auch darin aus, damit die App-Store-Prüfung die anderen Social-Buttons akzeptiert. Der Mobile-Konten-Guide erklärt, worauf die Prüfung achtet.

Wenn du die Einrichtung fortsetzen möchtest, lies Stripe-Zahlungen hinzufügen.

Häufige Fragen

14 Fragen

Was ist supastack?

supastack ist eine modulare Basis zum Bauen von KI-gestützten SaaS-Produkten. Sie bündelt die gemeinsame Infrastruktur, damit du dich auf die Funktionen konzentrieren kannst, die dein Produkt ausmachen.

Unterstützt es Web und Mobil?

Ja. supastack enthält Next.js- und Expo-Apps als Ausgangspunkt für Web- und Mobile-Erlebnisse.

Welche Authentifizierung ist enthalten?

Better Auth deckt E-Mail/Passwort, OTP und Social Login ab. Persönliche Workspaces werden mit dem Konto provisioniert, damit Datensätze vom ersten Tag an begrenzt sind.

Wie wird KI unterstützt?

supastack enthält konfigurierbare Multi-Anbieter-KI, Nutzungsverfolgung, Budgets und verschlüsselte Bring-your-own-key-Unterstützung.

Wie werden Abonnements gehandhabt?

Für Produkte, die auf dem Kit aufbauen, bilden Stripe-Abrechnung, Abonnements und Berechtigungen die Basis für bezahlten Zugang. Anbieter-Geheimnisse bleiben serverseitig.

Wo liegt mein produktspezifischer Code?

Produktspezifische Funktionen bleiben in einem separaten Codebase, während das Produkt die Basismodule von supastack konfiguriert und integriert.

Wie funktioniert die Preisgestaltung von supastack?

Das Kit ist ein Einmalkauf mit lebenslangen Updates: Ein Framework für 249 $ (befristeter Einführungspreis — 100 $ Rabatt auf den regulären Preis von 349 $) oder Alle Frameworks (Next.js, iOS, Android) für 499 $ (befristeter Einführungspreis — 100 $ Rabatt auf den regulären Preis von 599 $), plus 75 $ pro zusätzlichem Entwickler-Sitz. Kein Kit-Abo. Checkout auf dieser Website liefert deinen Lizenzschlüssel per E-Mail, mit Repo-Zugang per GitHub-Einladung.

Wie begrenzen Workspaces meine Daten?

Nutzerdatensätze sind über workspaceId begrenzt. Identität, Berechtigungen, KI-Nutzung, Abrechnungsereignisse und Audit-Einträge bleiben innerhalb der persönlichen Workspace-Grenze.

Wie funktionieren Hintergrundjobs?

Trigger.dev ist die explizite Job-Laufzeit. Der JobRunner-Vertrag verspricht nur enqueue, status und cancel — Workflow-Semantik bleibt Trigger.dev-spezifisch und explizit.

Wie unterscheidet sich E-Mail von Outreach?

Transaktions-E-Mail deckt Produktabläufe wie Task-Abschluss-Hinweise ab. Cold Outreach und Kampagnen gehören zum Produkt selbst, außerhalb des E-Mail-Moduls dieses Kits.

Wie funktionieren mobile Käufe?

Mobile bietet native Käufe und Wiederherstellung über RevenueCat; dein Server prüft den Zugriff. Konfiguriere die Store-Konten und schließe Gerätetests vor der Veröffentlichung ab. Web-Abrechnung bleibt separat.

Wo liegen die KI-Anbieter-Schlüssel?

BYOK-Zugangsdaten sind verschlüsselt und bleiben serverseitig. Schlüssel werden in Logs bereinigt; Nutzung und Budgets bleiben auf Workspace-Ebene sichtbar.

Welche Zahlungsmethoden akzeptiert der Checkout?

Der von Stripe gehostete Checkout akzeptiert Karten und kann — sobald die Wallets im Stripe-Konto aktiviert sind — auch Alipay und WeChat Pay anbieten, praktisch für Käufer in China. Wallet-Autorisierungen werden asynchron bestätigt, sodass sich die Lizenzseite aktualisiert, sobald die Zahlung eingegangen ist.

Kann ich eine Rückerstattung erhalten?

Sobald du Zugriff auf das Repository hast, gehört supastack für immer dir und kann daher nicht zurückerstattet werden. Aber keine Sorge: Du erhältst den vollständigen Quellcode mit lebenslangen Updates, um unbegrenzt viele Produkte für dich oder deine Kunden zu erstellen und zu veröffentlichen. Du darfst den Code lediglich nicht weiterverkaufen oder das Repository als Starter-Kit oder Vorlage weitergeben.

DE
Design