Publier une app Supabase sur l'App Store et Google Play : la checklist complète
Lovable, Bolt, Tempo, Hostinger Horizons et la plupart des projets Cursor reposent sur Supabase. Supabase fonctionne parfaitement dans une app WebViewGold, mais une poignée de réglages supposent discrètement un onglet de navigateur. Cette checklist les passe en revue un par un, dans l'ordre où vous les rencontrerez.
Dès $109 en paiement unique par plateforme, ou notre équipe s'occupe de tout dès $698.
Garantie d'approbation – ou remboursement sous 14 jours
Aucun codage requis
Paiement unique, mises à jour gratuites
Support humain 24/7
Conçu en Allemagne depuis 2014 · ISO 27001
9:41
Votre app
Votre appDésormais dans votre poche
App Store · Google Play Approuvée
1. Configuration de l'auth : Site URL et redirect URLs
Tableau de bord Supabase → Authentication → URL Configuration. Ces valeurs déterminent où atterrissent chaque lien envoyé par e-mail et chaque callback OAuth.
Site URL = votre domaine de production (https://app.yourbrand.com), jamais la préversion lovable.app ni localhost. Le guide du domaine personnalisé explique pourquoi l'app doit charger un domaine qui vous appartient.
Redirect URLs : ajoutez chaque chemin de callback que vous utilisez (https://app.yourbrand.com/auth/callback, /reset-password, /**). Supprimez les URL de tunnel et de préversion avant le lancement.
Les templates d'e-mail utilisent {{ .SiteURL }} et {{ .RedirectTo }} ; vérifiez que les e-mails de confirmation, de magic link et de récupération pointent vers votre domaine.
Les sessions persistent comme dans un navigateur tant que les options de vidage du cache restent désactivées dans WebViewGold (deletecache dans Config.swift, CLEAR_CACHE_ON_STARTUP dans Config.java).
2. Connexion sociale : Google et Apple
La guideline 4.8 est claire : si vous proposez la connexion Google, vous devez aussi proposer Sign in with Apple (ou une option équivalente respectueuse de la vie privée).
Google : gardez le fournisseur Supabase, ajoutez l'assistant WebViewGold
Google refuse l'OAuth dans les WebViews intégrées (l'erreur « disallowed_useragent »). Le Social Login Helper de WebViewGold règle le problème sans modifier le code : définissez google_login_helper_triggers dans Config.swift sur ["https://accounts.google.com", "https://accounts.youtube.com"] et GOOGLE_LOGIN_HELPER_TRIGGERS dans Config.java ; la connexion se déroule alors dans une fenêtre dédiée avec un user agent accepté. Détails dans le guide disallowed_useragent.
Apple : activez le fournisseur dans Supabase
Apple Developer : un App ID avec la capability Sign in with Apple, un Services ID dont la return URL est https://YOUR-PROJECT.supabase.co/auth/v1/callback (ou votre domaine d'auth personnalisé), et une clé .p8. Supabase : Authentication → Providers → Apple avec Services ID, Team ID, Key ID et le client secret généré. Ce secret est un JWT qui expire au bout de six mois maximum ; notez un rappel dans votre agenda.
Ajoutez le bouton dans la web app
supabase.auth.signInWithOAuth({ provider: "apple", options: { redirectTo: "https://app.yourbrand.com/auth/callback" } }). Affichez le bouton Apple au moins aussi visiblement que celui de Google. WebViewGold détecte appleid.apple.com automatiquement ; aucune configuration d'assistant n'est nécessaire.
Testez les deux sur un vrai iPhone
Effectuez la connexion Google et Apple dans le build TestFlight, y compris avec un tout nouveau compte utilisant une adresse relais Apple « Masquer mon adresse e-mail ».
3. Magic links et réinitialisation du mot de passe via les Universal Links
Un magic link ouvert depuis Mail atterrit par défaut dans Safari : l'utilisateur est connecté sur le site web, mais pas dans l'app. Les Universal Links (iOS) et App Links (Android) redirigent plutôt vers l'app les liens pointant vers votre domaine. Hébergez /.well-known/apple-app-site-association et /.well-known/assetlinks.json dans le dossier public de votre projet, ajoutez la capability Associated Domains (applinks:app.yourbrand.com) et passez ShowExternalLink à true dans Config.swift ; sur Android, activez IS_DEEP_LINKING_ENABLED dans Config.java et ajoutez le domaine à l'intent filter dans AndroidManifest.xml. La documentation Universal Links et la documentation App Links détaillent chaque étape.
Côté Supabase, utilisez le flux PKCE (par défaut dans supabase-js v2) et appelez exchangeCodeForSession sur votre page de callback. Désactivez le suivi des clics pour les e-mails d'authentification, car un domaine de tracking dans le lien neutralise l'association. Le guide des deep links explique comment tester.
Excellente façon de convertir son app web en app native ! Un délai très court, et un super moyen de mettre ses apps dans les stores sans devoir développer une app native complète !
Kevin Joling · FlightConnections & TrainConnections · Trustpilot
4. Edge function de suppression de compte
La guideline 5.1.1(v) d'Apple et la politique de suppression de compte de Google exigent un moyen, dans l'app, de supprimer le compte et ses données. Le client ne peut pas supprimer un utilisateur auth ; une petite edge function avec la clé service role, si. Reliez-y un bouton « Supprimer le compte », déconnectez ensuite l'utilisateur et ajoutez une page publique /delete-account (Google demande cette URL). Le flux complet : le guide de la suppression de compte.
5. Données : RLS, envois vers le storage et confidentialité
Row Level Security sur chaque table contenant des données utilisateur. Les builders génèrent parfois des policies « allow all » pour faire tourner une démo ; contrôlez-les dans Table editor → Policies avant le lancement.
Storage : buckets privés avec URL signées pour les fichiers des utilisateurs ; buckets publics uniquement pour les ressources réellement publiques.
Les envois de fichiers depuis la WebView fonctionnent tout simplement : un champ de fichier standard (accept="image/*") ouvre le sélecteur de photos natif ou l'appareil photo. Rédigez de vrais textes d'autorisation pour l'appareil photo et la photothèque dans Info.plist et supprimez les autorisations que vous n'utilisez pas.
La clé anon dans le client ne pose aucun problème, c'est prévu ainsi ; la clé service role n'a sa place que dans les edge functions et le code serveur.
Confidentialité de l'app (Apple) et Sécurité des données (Google) : une app Supabase collecte au minimum l'e-mail, l'ID utilisateur et le contenu utilisateur ; mentionnez Supabase comme sous-traitant dans votre politique de confidentialité. Le guide de la confidentialité donne les réponses types.
6. IDs push des utilisateurs et webhook RevenueCat
Deux points de contact backend qui rendent les fonctionnalités natives personnelles.
Enregistrez l'ID d'abonnement push de chaque utilisateur
Après la connexion, naviguez vers getonesignalplayerid:// ; WebViewGold définit window.onesignalplayerid (ou activez autoInjectVariable / AUTO_INJECT_VARIABLES pour l'obtenir sans cet appel). Enregistrez-le par upsert dans profiles.push_id et envoyez des notifications ciblées depuis une edge function via l'API REST de OneSignal. Firebase et Pushwoosh fonctionnent de la même façon.
Recevez les événements RevenueCat
Créez une edge function comme endpoint du webhook, vérifiez l'en-tête Authorization que vous avez défini dans RevenueCat et écrivez dans subscriptions(user_id, entitlement, expires_at, store). Comme votre web app déclenche les achats avec revenuecat://purchase?external_id=USER_ID&product=PRODUCT, l'app_user_id du webhook correspond exactement à votre ID utilisateur Supabase.
Contrôlez l'accès aux fonctionnalités côté serveur
Les vérifications premium lisent la table subscriptions via RLS, jamais un indicateur dans le localStorage. Les webhooks Stripe de la version web écrivent dans la même table, si bien qu'une seule vérification couvre les deux canaux (guide RevenueCat).
Questions fréquentes
Ai-je besoin d'un SDK Supabase natif ou d'un autre flux d'authentification pour l'app ?
Non. Le SDK web que vous utilisez déjà fonctionne dans la WebView. Les seuls ajouts sont le Social Login Helper de WebViewGold pour Google et la configuration des Universal Links pour les liens envoyés par e-mail.
Supabase Realtime et les websockets fonctionnent-ils dans WebViewGold ?
Oui. WKWebView et la WebView Android prennent en charge les websockets, donc les abonnements Realtime se comportent comme dans le navigateur.
Les utilisateurs restent-ils connectés d'un lancement de l'app à l'autre ?
Oui, tant que les options de vidage du cache restent désactivées dans les fichiers Config. La session est rafraîchie par supabase-js exactement comme sur le web.
Les magic links fonctionnent-ils sans Universal Links ?
Ils connectent l'utilisateur, mais dans Safari plutôt que dans l'app. Pour une app centrée sur la connexion, c'est assez déroutant pour justifier l'heure de configuration.
Trois façons de mettre votre app dans les stores
Même résultat, charge de travail différente de votre côté. Les trois formules incluent la garantie d'approbation et le support humain 24/7.
Faites-le vous-même
$109 par plateforme, paiement unique
La licence WebViewGold : un projet Xcode ou Android Studio prêt à l'emploi. Collez votre URL, définissez le nom et l'icône, activez les fonctionnalités, compilez et soumettez. Mises à jour gratuites à vie.
Ni Mac, ni Xcode, ni Android Studio : configurez dans le navigateur, nous compilons les deux apps dans le cloud et les transmettons à App Store Connect et à la Play Console.
Envoyez-nous votre URL et votre icône. Notre équipe configure, compile et livre votre app sous 72 heures, en marque blanche, projets sources inclus. Les deux plateformes pour $1,158.
Les remboursements sont accordés aux conditions indiquées dans notre FAQ : un refus non lié au contenu par Apple et/ou Google, demandé dans les 14 jours suivant l'achat.