Zum Inhalt springen
WebViewGold Vibe Coding in den App Store
Deutsch
WebViewGold holen

Claude Code

Der Claude Code + Supabase Stack im App Store und auf Google Play

Claude Code und Supabase sind ein natürliches Paar: Der Agent schreibt Schema, Policies und Edge Functions, Supabase führt sie aus. In einer WebViewGold-App brauchen fünf Dinge Aufmerksamkeit, die ein Browser nie von dir verlangt hat: Auth in einer WebView, Magic Links, Kontolöschung, Push-Nutzer-IDs und Store-Käufe. Das ist die Setup-Liste.

Ab $109 einmalig pro Plattform, oder unser Team erledigt alles ab $698.

  • Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen
  • Kein Programmieren nötig
  • Einmalzahlung, kostenlose Updates
  • 24/7 Support von echten Menschen
  • Made in Germany seit 2014 · ISO 27001

Supabase Auth in einer WebView

Login mit E-Mail und Passwort funktioniert unverändert: Die Session lebt im WebView-Speicher und bleibt erhalten, solange der Wrapper sie nicht löscht (deletecache in Config.swift und CLEAR_CACHE_ON_STARTUP in Config.java bleiben auf false). OAuth ist anders. Google weigert sich, ein Login in einer eingebetteten WebView abzuschließen (der Fehler disallowed_useragent), deshalb bringt WebViewGold einen Social Login Helper mit: Du listest die URL-Präfixe des Provider-Flows, und der Wrapper öffnet diesen Teil in einem eigenen Login-Fenster, das der Provider akzeptiert, und kehrt dann zu deiner App zurück. Für Supabase mit Google ist der Trigger https://accounts.google.com, gesetzt in google_login_helper_triggers (Config.swift) und GOOGLE_LOGIN_HELPER_TRIGGERS (Config.java). Sign in with Apple braucht nichts: Der Wrapper erkennt appleid.apple.com automatisch.

Das heißt: Aktiviere den Apple-Provider im Supabase-Dashboard (Services ID, Key, Team-ID, Return-URL), setze den Button neben Google, damit du Richtlinie 4.8 erfüllst, und lass Claude Code signInWithOAuth für beide verdrahten, mit dem Redirect auf deine Produktionsdomain.

Magic Links, die in der App aufgehen

Ein Magic Link in einer E-Mail öffnet sich standardmäßig im Browser. Universal Links und App Links schicken ihn stattdessen in die App.

  1. Die Association-Dateien ausliefern

    Lass Claude Code /.well-known/apple-app-site-association (JSON mit deiner Team-ID und Bundle-ID, ausgeliefert ohne Dateiendung und mit JSON-Content-Type) und /.well-known/assetlinks.json (dein Package Name und der Fingerprint des Signaturzertifikats) zum Web-Projekt hinzufügen. Bei Next.js ist das der public-Ordner plus eine Header-Regel.

  2. Die Capability im Wrapper aktivieren

    iOS: Associated Domains mit applinks:app.example.com in Xcode und ShowExternalLink auf true in Config.swift. Android: der Intent-Filter für deine Domain in der AndroidManifest.xml und IS_DEEP_LINKING_ENABLED auf true in Config.java. Details in den Universal-Links-Docs und den App-Links-Docs.

  3. Supabase auf deine Domain zeigen lassen

    Setze die Site-URL und die Redirect-Allow-List auf https://app.example.com/auth/callback. Der Link in der E-Mail landet dann auf deiner Domain, die das Betriebssystem an die App übergibt, wenn sie installiert ist.

  4. Einen Code als Fallback anbieten

    Manche Mail-Apps öffnen Links in ihrem eigenen Browser. Lass Claude Code eine sechsstellige OTP-Option ergänzen (füge die Token-Variable zum Magic-Link-E-Mail-Template im Supabase-Dashboard hinzu), damit ein Nutzer, der in Safari landet, trotzdem in der App fertig werden kann. Wenn du den PKCE-Flow nutzt, ist dieser Fallback noch wichtiger, weil der Code Verifier nur in dem Kontext existiert, der das Login gestartet hat.

Kontolöschung als Edge Function

Apple 5.1.1 und Google Play verlangen die Löschung in der App; mit Supabase ist das eine einzige Funktion, bei der der Service-Role-Key serverseitig bleibt.

Prompt für Claude Code
Implement account deletion for this Supabase app as required by Apple and Google Play.
1. Create a Supabase edge function delete-account that: reads the user JWT from the Authorization header and verifies it with the anon client; then, using a service-role client created only inside the function, deletes the user's rows in every table that references auth.users (list them from the schema; prefer ON DELETE CASCADE foreign keys where missing and write the migration), removes the user's files from storage buckets, and finally calls auth.admin.deleteUser(userId). Return 204 on success and a clear error otherwise.
2. In the web app, add Settings - Delete account with a confirmation dialog that explains what is deleted, calls the function with the current session, signs out and shows a confirmation screen. If RevenueCat subscriptions exist, tell the user to cancel them in the App Store or Google Play settings first.
3. Add a public /delete-account page explaining the process for users without the app.
4. Add a sentence about deletion to /privacy.
5. Write a test that creates a throwaway user, inserts rows, calls the function and asserts everything is gone.

Großartige Arbeit! Ich habe noch nie etwas programmiert, aber ich konnte damit arbeiten. Einfach und schnell! Auch mit großartiger Hilfe von den Erstellern!

Lucas Dubois · CodeCanyon

RLS-Erinnerungen vor der Veröffentlichung

Der Anon-Key ist absichtlich in deinem Client-Bundle, und eine veröffentlichte App kann jeder herunterladen. Row Level Security macht das sicher.

  • Jede Tabelle im public-Schema hat RLS aktiviert und explizite Policies für select, insert, update und delete mit auth.uid(). Lass Claude Code Tabellen ohne RLS auflisten und die fehlenden Policies schreiben.
  • Storage-Buckets haben ebenfalls Policies; ein öffentlicher Bucket ist für alle öffentlich, auch für Leute, die deine App nie geöffnet haben.
  • Der Service-Role-Key taucht nur in Edge Functions und Server-Code auf, nie im Vite- oder Next.js-Client-Bundle. Durchsuche die Build-Ausgabe danach.
  • Views und RPC-Funktionen respektieren den Aufrufer; markiere Funktionen als security invoker, außer du brauchst bewusst Definer-Rechte.
  • Rate Limits für Auth und für teure RPC-Aufrufe, denn Store-Apps ziehen automatisierten Traffic an, sobald sie gelistet sind.

Die Push-Subscription-ID im Profil speichern

Mit autoInjectVariable / AUTO_INJECT_VARIABLES auf true injiziert der Wrapper onesignalplayerid auf jeder Seite; andernfalls fragst du sie mit getonesignalplayerid:// an. Speichere sie im Profil, damit eine Edge Function einen einzelnen Nutzer ansprechen kann.

javascript
// after login, inside the native app only
import { supabase } from "./supabase";
import { isNativeApp, readInjected, callNative } from "./native";

export async function syncPushSubscription(userId) {
  if (!isNativeApp()) return;
  let playerId = window.onesignalplayerid; // present when auto-inject is on
  if (!playerId) {
    callNative("getonesignalplayerid://");
    playerId = await readInjected("onesignalplayerid", 3000).catch(function () { return null; });
  }
  if (!playerId) return;
  await supabase.from("profiles").update({ onesignal_player_id: playerId }).eq("id", userId);
}

// RLS policy to pair with it (SQL):
// create policy "users update own profile" on profiles for update
//   using (auth.uid() = id) with check (auth.uid() = id);

RevenueCat-Webhook und der Rest des Geldflusses

Kauf aus der Web-App

In der App navigiert der Upgrade-Button zu revenuecat://purchase?external_id=SUPABASE_USER_ID&product=PRODUCT_ID. Die Supabase-Nutzer-ID als external_id zu übergeben ist das, was dem Webhook erlaubt, den Kauf einer Zeile zuzuordnen.

Webhook-Edge-Function

Prompt: "Create an edge function revenuecat-webhook that verifies the Authorization header configured in RevenueCat, upserts the event into a subscriptions table keyed by app_user_id, and sets an is_active flag from the event type." Der Client liest das Entitlement über RLS, nie aus dem clientseitigen Kaufergebnis.

Das Web bleibt bei Stripe

Browser dürfen Stripe behalten. Speichere ein einziges Entitlement-Modell (eine subscriptions-Tabelle mit einer source-Spalte), damit Features auf dieselbe Weise freigeschaltet werden, egal wo der Nutzer bezahlt hat. Siehe den RevenueCat-Setup-Guide.

Provision

Apple Small Business Program und Googles 15%-Stufe: 15% Provision unter 1 Mio. $ pro Jahr, 30% darüber. Beantrage beides in den Konsolen und teile es RevenueCat mit.

Häufig gestellte Fragen

Brauche ich die nativen Supabase-SDKs für die Store-Apps?

Nein. In WebViewGold läuft die Web-App mit supabase-js. Die native Schicht ergänzt nur Push, Biometrie, Käufe und Deep Links über URL-Schemas.

Überlebt die Supabase-Session App-Neustarts?

Ja, solange der Wrapper den Speicher beim Start nicht löscht. Lass deletecache (iOS) und CLEAR_CACHE_ON_STARTUP (Android) auf false und stell im Supabase-Dashboard eine sinnvolle Session-Lebensdauer ein.

Google-Login funktioniert im Browser, aber nicht in der App. Warum?

Google blockiert eingebettete WebViews. Setze die Social-Login-Helper-Trigger für accounts.google.com in beiden WebViewGold-Configs; der Wrapper schließt das Login dann in einem akzeptierten Fenster ab und kehrt zu deiner App zurück.

Kann Claude Code die RLS-Policies sicher schreiben?

Es schreibt gute erste Entwürfe, wenn du ihm das Schema und die Zugriffsregeln in einfachen Worten gibst. Prüfe jede Policy, teste mit zwei verschiedenen Nutzern und veröffentliche nie eine Tabelle ohne RLS, nur weil eine Demo funktioniert hat.

Wo verifiziere ich den Kauf, im Client oder auf dem Server?

Auf dem Server. Der RevenueCat-Webhook in eine Edge Function ist die Quelle der Wahrheit; der Client liest nur die resultierende Zeile. Clientseitige Flags lassen sich in jeder herunterladbaren App fälschen.

Drei Wege, deine App in die Stores zu bringen

Gleiches Ergebnis, unterschiedlich viel Arbeit auf deiner Seite. Alle drei kommen mit Genehmigungsgarantie und 24/7 Support von echten Menschen.

Selbst machen

$109 pro Plattform, einmalig

Die WebViewGold-Lizenz: ein fertiges Xcode- oder Android-Studio-Projekt. URL einfügen, Name und Icon setzen, Features einschalten, bauen und einreichen. Kostenlose Updates für immer.

Pakete auf der Hauptseite ansehen

Full Service

$698 pro Plattform $798

Schick uns deine URL und dein Icon. Unser Team konfiguriert, baut und liefert deine App innerhalb von 72 Stunden, White-Label, inklusive Quellprojekten. Beide Plattformen für $1,158.

Full-Service-Details Powered by WeSetupYourWebViewApp

Winter-Sale-Preise gültig bis 31. Dezember 2026.

Bereit, deine App zu veröffentlichen?

App Store & Google Play Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen

Lieber abgeben? Full Service: Wir konfigurieren, bauen und liefern innerhalb von 72 Stunden, ab $698 pro Plattform. Fragen? Chatte mit uns – 24/7.

Erstattungen erfolgen zu den in unseren FAQ genannten Bedingungen: eine nicht inhaltsbedingte Ablehnung durch Apple und/oder Google, geltend gemacht innerhalb von 14 Tagen nach dem Kauf.