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

Backend-Checklisten

Supabase-App in den App Store und zu Google Play: die komplette Checkliste

Lovable, Bolt, Tempo, Hostinger Horizons und die meisten Cursor-Projekte laufen mit Supabase im Unterbau. Supabase funktioniert in einer WebViewGold-App einwandfrei, aber eine Handvoll Einstellungen geht stillschweigend von einem Browser-Tab aus. Diese Checkliste geht sie in der Reihenfolge durch, in der du ihnen begegnest.

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

1. Auth-Konfiguration: Site URL und Redirect URLs

Supabase-Dashboard → Authentication → URL Configuration. Diese Werte bestimmen, wo jeder E-Mail-Link und jeder OAuth-Callback landet.

  • Site URL = deine Produktions-Domain (https://app.yourbrand.com), niemals die lovable.app-Vorschau oder localhost. Der Guide zur eigenen Domain erklärt, warum die App eine Domain laden muss, die dir gehört.
  • Redirect URLs: Trage jeden Callback-Pfad ein, den du nutzt (https://app.yourbrand.com/auth/callback, /reset-password, /**). Entferne Tunnel- und Vorschau-URLs vor dem Launch.
  • E-Mail-Vorlagen nutzen {{ .SiteURL }} und {{ .RedirectTo }}; prüfe, dass Bestätigungs-, Magic-Link- und Wiederherstellungsmails auf deine Domain zeigen.
  • Sitzungen bleiben wie im Browser erhalten, solange die Optionen zum Leeren des Caches in WebViewGold ausgeschaltet bleiben (deletecache in Config.swift, CLEAR_CACHE_ON_STARTUP in Config.java).

2. Social Login: Google und Apple

Richtlinie 4.8 sagt: Wenn du Google-Login anbietest, musst du auch Sign in with Apple anbieten (oder eine gleichwertige, datenschutzfreundliche Option).

  1. Google: den Supabase-Provider behalten, den WebViewGold-Helper ergänzen

    Google verweigert OAuth in eingebetteten WebViews (der Fehler „disallowed_useragent“). Der Social Login Helper von WebViewGold behebt das ohne Codeänderungen: Setze google_login_helper_triggers in Config.swift auf ["https://accounts.google.com", "https://accounts.youtube.com"] und ebenso GOOGLE_LOGIN_HELPER_TRIGGERS in Config.java; der Login läuft dann in einem eigenen Fenster mit einem akzeptierten User-Agent. Details im Guide zu disallowed_useragent.

  2. Apple: den Provider in Supabase aktivieren

    Apple Developer: eine App ID mit der Capability Sign in with Apple, eine Services ID mit der Return URL https://YOUR-PROJECT.supabase.co/auth/v1/callback (oder deiner eigenen Auth-Domain) und ein .p8-Key. Supabase: Authentication → Providers → Apple mit Services ID, Team ID, Key ID und dem generierten Client Secret. Das Secret ist ein JWT, das nach spätestens sechs Monaten abläuft; trag dir eine Erinnerung in den Kalender ein.

  3. Den Button in der Web-App ergänzen

    supabase.auth.signInWithOAuth({ provider: "apple", options: { redirectTo: "https://app.yourbrand.com/auth/callback" } }). Zeig den Apple-Button mindestens so prominent wie den von Google. WebViewGold erkennt appleid.apple.com automatisch; eine Helper-Konfiguration ist nicht nötig.

  4. Beides auf einem echten iPhone testen

    Schließe den Google- und den Apple-Login im TestFlight-Build vollständig ab, auch mit einem brandneuen Account, der eine Relay-Adresse von Apples „E-Mail-Adresse verbergen“ nutzt.

3. Magic Links und Passwort-Resets über Universal Links

Ein Magic Link, der aus Mail geöffnet wird, landet standardmäßig in Safari: Der Nutzer ist dann auf der Website eingeloggt, aber nicht in der App. Universal Links (iOS) und App Links (Android) leiten Links auf deine Domain stattdessen in die App. Leg /.well-known/apple-app-site-association und /.well-known/assetlinks.json in den public-Ordner deines Projekts, füge die Capability Associated Domains hinzu (applinks:app.yourbrand.com) und setze ShowExternalLink in Config.swift auf true; unter Android aktivierst du IS_DEEP_LINKING_ENABLED in Config.java und trägst die Domain in den Intent-Filter in AndroidManifest.xml ein. Die Doku zu Universal Links und die Doku zu App Links enthalten die genauen Schritte.

Auf der Supabase-Seite nutzt du den PKCE-Flow (Standard in supabase-js v2) und rufst auf deiner Callback-Seite exchangeCodeForSession auf. Deaktiviere das Klick-Tracking für Auth-E-Mails, denn eine Tracking-Domain im Link hebelt die Zuordnung aus. Der Deep-Link-Guide erklärt, wie du das testest.

Großartige Möglichkeit, eine Web-App in eine native App zu verwandeln! Schnelle Umsetzung und ein toller Weg, Apps in die App Stores zu bringen, ohne eine komplett native App entwickeln zu müssen!

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

4. Edge Function für die Account-Löschung

Apples Richtlinie 5.1.1(v) und Googles Richtlinie zur Kontolöschung verlangen einen Weg in der App, den Account samt Daten zu löschen. Der Client kann keinen Auth-User löschen, eine kleine Edge Function mit dem Service-Role-Key dagegen schon. Verbinde einen „Account löschen“-Button damit, melde den Nutzer danach ab und lege eine öffentliche Seite /delete-account an (Google fragt nach dieser URL). Der komplette Ablauf steht im Guide zur Account-Löschung.

typescript
// supabase/functions/delete-account/index.ts
import { createClient } from "npm:@supabase/supabase-js@2";

Deno.serve(async (req) => {
  const authHeader = req.headers.get("Authorization") ?? "";
  const userClient = createClient(Deno.env.get("SUPABASE_URL")!, Deno.env.get("SUPABASE_ANON_KEY")!, {
    global: { headers: { Authorization: authHeader } },
  });
  const { data: { user }, error } = await userClient.auth.getUser();
  if (error || !user) return new Response("Unauthorized", { status: 401 });

  const admin = createClient(Deno.env.get("SUPABASE_URL")!, Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!);
  await admin.from("profiles").delete().eq("id", user.id); // oder ON DELETE CASCADE auf auth.users nutzen
  const { error: delError } = await admin.auth.admin.deleteUser(user.id);
  if (delError) return new Response(delError.message, { status: 500 });
  return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json" } });
});

5. Daten: RLS, Storage-Uploads und Datenschutz

  • Row Level Security auf jeder Tabelle mit Nutzerdaten. Builder erzeugen manchmal „allow all“-Policies, damit eine Demo funktioniert; prüfe sie vor dem Launch unter Table editor → Policies.
  • Storage: private Buckets mit signierten URLs für Nutzerdateien; öffentliche Buckets nur für wirklich öffentliche Assets.
  • Uploads aus der WebView funktionieren einfach: Ein normales Datei-Input (accept="image/*") öffnet die native Fotoauswahl oder die Kamera. Schreib echte Berechtigungstexte für Kamera und Fotomediathek in die Info.plist und lösche die Berechtigungen, die du nicht nutzt.
  • Der anon key im Client ist so gewollt und unbedenklich; der Service-Role-Key gehört ausschließlich in Edge Functions und Servercode.
  • App-Datenschutz (Apple) und Datensicherheit (Google): Eine Supabase-App erhebt mindestens E-Mail, Nutzer-ID und Nutzerinhalte; nenne Supabase in deiner Datenschutzerklärung als Auftragsverarbeiter. Der Datenschutz-Guide enthält die typischen Antworten.

6. Push-User-IDs und der RevenueCat-Webhook

Zwei Berührungspunkte im Backend, die die nativen Features persönlich machen.

  1. Die Push-Subscription-ID pro Nutzer speichern

    Navigiere nach dem Login zu getonesignalplayerid://; WebViewGold setzt dann window.onesignalplayerid (oder aktiviere autoInjectVariable / AUTO_INJECT_VARIABLES, um sie ohne den Aufruf zu bekommen). Schreib sie per Upsert in profiles.push_id und verschicke gezielte Benachrichtigungen aus einer Edge Function über die OneSignal REST API. Firebase und Pushwoosh funktionieren genauso.

  2. RevenueCat-Events empfangen

    Lege eine Edge Function als Webhook-Endpunkt an, prüfe den Authorization-Header, den du in RevenueCat festgelegt hast, und schreib in subscriptions(user_id, entitlement, expires_at, store). Weil deine Web-App Käufe mit revenuecat://purchase?external_id=USER_ID&product=PRODUCT auslöst, ist die app_user_id im Webhook genau deine Supabase-User-ID.

  3. Features serverseitig freischalten

    Premium-Prüfungen lesen die subscriptions-Tabelle über RLS, niemals ein Flag in localStorage. Stripe-Webhooks aus der Web-Version schreiben in dieselbe Tabelle, also deckt eine einzige Prüfung beide Kanäle ab (RevenueCat-Guide).

Häufig gestellte Fragen

Brauche ich für die App ein natives Supabase-SDK oder einen anderen Auth-Flow?

Nein. Das Web-SDK, das du schon nutzt, läuft in der WebView. Hinzu kommen nur der Social Login Helper von WebViewGold für Google und das Universal-Links-Setup für E-Mail-Links.

Funktionieren Supabase Realtime und Websockets in WebViewGold?

Ja. WKWebView und die Android-WebView unterstützen Websockets, also verhalten sich Realtime-Subscriptions wie im Browser.

Bleiben Nutzer zwischen zwei App-Starts eingeloggt?

Ja, solange die Optionen zum Leeren des Caches in den Config-Dateien ausgeschaltet bleiben. Die Sitzung wird von supabase-js genau wie im Web erneuert.

Funktionieren Magic Links ohne Universal Links?

Sie loggen den Nutzer ein, aber in Safari statt in der App. Für eine App, in der sich alles um den Login dreht, ist das verwirrend genug, um die eine Stunde Setup zu investieren.

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.