Aller au contenu
WebViewGold Du vibe coding à l'App Store
Français
Obtenir WebViewGold

ChatGPT & Codex + stockage sur l'appareil

Stockage natif et identifiant d'appareil pour votre app ChatGPT & Codex

Les utilisateurs attendent d'une app qu'elle se souvienne d'eux. Les cookies et le localStorage gardent généralement votre app ChatGPT & Codex connectée, mais ce sont des stockages web qui disparaissent avec le cache. WebViewGold ajoute deux petits outils natifs : un stockage de valeurs persistant (writevalue:// et readvalue://) pour les réglages et la restauration de session, et un UUID d'appareil (get-uuid://) pour les licences liées à un appareil, les appareils de confiance et les réglages par appareil sur votre serveur.

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

Deux outils natifs

API Read/Write Value

writevalue:// enregistre tout ce qui suit le schéma comme une seule chaîne dans le stockage privé de l'app ; readvalue:// la réinjecte dans la page, sous la forme window.storedValues sur iOS et window.appSettings sur Android. Les valeurs survivent aux redémarrages et aux vidages du cache, et disparaissent quand l'app est désinstallée (sur Android, aussi quand ses données sont effacées).

API UUID

get-uuid:// définit la variable JavaScript uuid, un identifiant d'appareil unique et non personnel. Vous pouvez aussi l'ajouter une fois à la première requête sous la forme ?uuid=XYZ (enhanceUrlUUID / UUID_ENHANCE_WEBVIEW_URL) ou l'injecter sur chaque page (autoInjectVariable / AUTO_INJECT_VARIABLES).

Ce que ce n'est pas

Pas une synchronisation entre appareils, pas une base de données, pas un coffre-fort de mots de passe. Gardez des valeurs légères (réglages, indicateurs, un token révocable), conservez les données utilisateur dans Votre propre API ou des fonctions serverless et ne considérez jamais l'UUID comme une preuve d'identité.

Prompt pour ChatGPT & Codex

Collez ceci dans ChatGPT & Codex pour implémenter la partie app web. Vérifiez le résultat, publiez, puis testez dans l'app WebViewGold.

Prompt pour ChatGPT ou Codex
Prompt pour Codex : Implémentez le stockage sur l'appareil et un registre des appareils pour le wrapper d'app WebViewGold et ouvrez une pull request. Ajoutez un module client qui, quand navigator.userAgent contient mon token WebViewGold personnalisé, enregistre les préférences avec writevalue://theme=dark;lang=fr;onboarded=1 (valeurs compatibles avec les URL uniquement), les restaure au démarrage avec readvalue:// en lisant window.storedValues sur iOS ou window.appSettings sur Android après un court délai, et lit l'ID d'appareil dans la variable globale uuid (en naviguant d'abord vers get-uuid:// si nécessaire) ; dans les navigateurs, il se rabat sur localStorage. Après la connexion, envoyez l'ID d'appareil à un nouvel endpoint qui l'enregistre par utilisateur avec la plateforme et last_seen, et ajoutez une page des appareils avec Retirer. Supprimez les lignes d'appareils dans le parcours de suppression de compte. Ajoutez des tests, et ajoutez à AGENTS.md : l'UUID de l'appareil est réservé aux fonctionnalités de notre propre app et ne doit jamais être envoyé à des outils d'analytics, à des régies publicitaires ou à d'autres tiers.

Excellent travail! Je n'ai jamais codé quoi que ce soit, mais j'ai réussi à travailler avec cela. Facile et rapide! Avec une grande aide des créateurs!

Lucas Dubois · CodeCanyon

Là où cela fait la différence

Rester connecté

Enregistrez un refresh token révocable après la connexion. Si la session web a disparu après un vidage du cache, relisez-le au lancement et restaurez la session en silence au lieu d'afficher l'écran de connexion.

Des réglages chargés instantanément

Thème, langue, unités, « onboarding terminé », le dernier espace de travail ouvert : lus localement au lancement, avant même que votre backend ne réponde, et même hors ligne.

Licences liées à un appareil

« Pro fonctionne sur deux appareils » : enregistrez l'UUID à l'activation, comptez les appareils actifs sur le serveur et proposez un écran Gérer les appareils pour libérer une place.

Appareils de confiance

Passez le second facteur ou le code par e-mail sur un appareil que l'utilisateur a déjà confirmé, et affichez « Connecté sur : iPhone, Pixel » avec une déconnexion par appareil.

Bornes et tablettes partagées

Un iPad d'accueil ou un téléphone scanner d'entrepôt qui doit toujours ouvrir le même site ou le même poste : enregistrez l'ID du poste par appareil.

L'intégrer dans une app ChatGPT & Codex

Environ une heure, plus une table des appareils dans votre backend.

  1. Détectez l'app

    Définissez un user agent personnalisé dans Config.swift (useragent_iphone, useragent_ipad) et Config.java (USER_AGENT) et n'appelez les schémas que s'il correspond. Dans le navigateur, rabattez-vous sur localStorage.

  2. Choisissez un format sûr

    Tout ce qui suit writevalue:// est enregistré tel quel comme une seule chaîne : utilisez donc un format simple key=value;key=value avec des valeurs compatibles avec les URL (lettres, chiffres, point, tiret, tiret bas). Chaque écriture remplace toute la chaîne : écrivez donc toujours toutes les clés.

  3. Lisez au lancement

    Naviguez vers readvalue://, attendez un instant (la documentation utilise 200 ms) et analysez window.storedValues (iOS) ou window.appSettings (Android). Appliquez d'abord le thème et la langue, puis restaurez la session de connexion si nécessaire.

  4. Enregistrez l'appareil

    Après la connexion, lisez uuid (après get-uuid://, ou automatiquement avec l'option d'injection automatique) et enregistrez-le avec l'utilisateur dans Votre propre API ou des fonctions serverless : ID utilisateur, UUID, plateforme, dernière activité. Appliquez les limites d'appareils sur le serveur, jamais dans le client.

  5. Faites le ménage

    À la déconnexion, réécrivez la valeur sans le token et révoquez-le sur le serveur. À la suppression du compte, supprimez aussi les lignes d'appareils (voir le guide de la suppression de compte).

  6. Respectez la règle d'un seul appel sur iOS

    iOS ne traite qu'une seule navigation vers un schéma par exécution de script : enchaînez les appels avec de courts délais (ou utilisez multiapicall://, qui prend en charge get-uuid) au lieu de les déclencher dans le même tick.

Un petit wrapper pour les deux plateformes

La même API dans l'app et dans le navigateur. Remplacez YourAppToken par votre user agent personnalisé.

javascript
var inApp = navigator.userAgent.indexOf("YourAppToken") !== -1;

function nativeWrite(values) {                 // { rt: "abc123", theme: "dark", lang: "fr" }
  var str = Object.keys(values).map(function (k) { return k + "=" + (values[k] || ""); }).join(";");
  if (!inApp) { try { localStorage.setItem("appValues", str); } catch (e) {} return; }
  window.location.href = "writevalue://" + str;
}

function parseValues(str) {
  var out = {};
  String(str || "").split(";").forEach(function (pair) {
    var i = pair.indexOf("=");
    if (i > 0) out[pair.slice(0, i)] = pair.slice(i + 1);
  });
  return out;
}

function nativeRead(callback) {
  if (!inApp) { callback(parseValues(localStorage.getItem("appValues"))); return; }
  window.location.href = "readvalue://";
  setTimeout(function () {
    callback(parseValues(window.storedValues || window.appSettings));  // iOS || Android
  }, 250);
}

function nativeDeviceId(callback) {
  if (!inApp) { callback(null); return; }
  if (typeof uuid !== "undefined") { callback(uuid); return; }        // injecté automatiquement
  window.location.href = "get-uuid://";
  setTimeout(function () { callback(typeof uuid !== "undefined" ? uuid : null); }, 250);
}

Confidentialité et examen

  • Si vous enregistrez l'UUID sur votre serveur, déclarez l'identifiant de l'appareil (Device ID) dans App Privacy (associé à l'utilisateur si vous l'enregistrez avec le compte) et « ID de l'appareil ou autres ID » (Device or other IDs) dans le formulaire Sécurité des données de Google Play.
  • Utilisez-le uniquement pour vos propres fonctionnalités. Le partager avec des régies publicitaires ou des courtiers en données, ou le relier aux données d'autres entreprises, constitue du suivi au sens de la guideline 5.1.2 et nécessite la demande App Tracking Transparency.
  • Ne combinez pas l'UUID avec d'autres signaux de l'appareil pour créer une empreinte des utilisateurs (fingerprinting) ; Apple ne l'autorise pas, avec ou sans la demande d'autorisation.
  • Dites-le dans votre politique de confidentialité et vos conditions : « Cette licence peut être utilisée sur deux appareils au maximum ; nous enregistrons un identifiant d'appareil pour le faire respecter. »
  • Traitez le stockage de valeurs comme un fichier de préférences d'app : parfait pour les réglages et les tokens révocables, inadapté aux mots de passe ou aux données de paiement.

Questions fréquentes

Pourquoi ne pas simplement utiliser les cookies et le localStorage ?

Utilisez-les d'abord ; dans l'app, ils persistent comme dans un navigateur. Le stockage de valeurs natif est la sauvegarde de ce qui doit survivre à un vidage du cache, comme un token d'appareil révocable, l'état de l'onboarding ou le choix de la langue, et il est disponible dès le lancement, même hors ligne.

L'UUID de WebViewGold est-il le même que l'identifiant publicitaire ?

Non. C'est un identifiant d'appareil non personnel destiné à la logique de votre propre app, pas l'IDFA ni l'identifiant publicitaire Android, et le lire n'affiche pas la demande App Tracking Transparency. Si vous l'utilisiez pour suivre les utilisateurs dans les apps d'autres entreprises ou le partagiez avec des régies publicitaires, cela deviendrait du suivi et les règles ATT s'appliqueraient.

Les valeurs enregistrées se synchronisent-elles sur les autres appareils de l'utilisateur ?

Non. Les valeurs sont propres à chaque installation et à chaque appareil. Tout ce qui doit suivre l'utilisateur (profil, préférences, achats) a sa place dans votre backend ; le stockage de l'appareil accélère seulement le lancement et garde un appareil connecté.

Que se passe-t-il après une réinstallation ou sur un nouveau téléphone ?

Les valeurs enregistrées disparaissent avec la désinstallation, et ne partez pas non plus du principe que l'UUID reste le même. Laissez les utilisateurs se reconnecter, enregistrez à nouveau l'appareil et libérez les anciens appareils dans Votre propre API ou des fonctions serverless après une période d'inactivité ou depuis un écran Gérer les appareils.

Puis-je tester cela dans un navigateur ou dans un aperçu ?

Seulement la solution de repli. Les schémas fonctionnent dans l'app WebViewGold, pas dans un navigateur de bureau ni dans un aperçu ChatGPT & Codex. Détectez le user agent personnalisé, utilisez le repli localStorage dans le navigateur et testez le vrai parcours sur un téléphone avec un build de l'app.

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.

Voir les offres sur la page principale

Full Service

$698 par plateforme $798

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.

Détails du Full Service Propulsé par WeSetupYourWebViewApp

Prix Soldes d'hiver valables jusqu'au 31 décembre 2026.

Prêt à publier votre app ChatGPT & Codex ?

Garantie d'approbation App Store & Google Play – ou remboursement sous 14 jours

Vous préférez déléguer ? Full Service : nous configurons, compilons et livrons sous 72 heures, dès $698 par plateforme. Des questions ? Chattez avec nous 24/7.

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.