Les apps de chat IA sur l'App Store et Google Play : les règles réellement appliquées
Les apps qui génèrent du texte ou des images avec un LLM sont examinées de plus près par les deux équipes de validation, et pour de bonnes raisons : des réponses non filtrées, des données personnelles envoyées à un modèle tiers et des factures d'API qui s'envolent ont tous déjà provoqué des retraits. Rien de tout cela n'est difficile à maîtriser dans une app web que vous encapsulez avec WebViewGold. Voici la checklist.
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
Apple : les guidelines que les examinateurs citent pour les apps IA
1.2
Contenu généré par les utilisateurs, appliqué aux réponses de l'IA
Apple traite le contenu généré comme du contenu utilisateur : il vous faut un filtrage des contenus répréhensibles, un moyen de les signaler, un moyen de bloquer les utilisateurs abusifs là où les utilisateurs interagissent, et des coordonnées de contact publiées. Pour une app de chat, cela signifie une modération des prompts et des réponses, un bouton Signaler sur chaque réponse et une phrase sur la modération dans la politique.
5.1.2
Utilisation et partage des données
Les conversations sont des données personnelles. Indiquez aux utilisateurs, avant le premier message, que leurs saisies sont traitées par OpenAI ou Google pour générer les réponses, et obtenez leur consentement. La guideline mentionne explicitement le partage avec une IA tierce. N'utilisez pas les conversations pour quoi que ce soit que l'utilisateur n'a pas accepté.
5.1.1
Collecte de données et suppression de compte
Si les utilisateurs s'inscrivent, la suppression de compte doit être disponible dans l'app et doit aussi effacer l'historique des conversations. La politique de confidentialité doit nommer le fournisseur d'IA et la durée de conservation.
3.1.1
Achat intégré
Crédits, tokens, packs de messages et offres premium sont des biens numériques : dans l'app, ils passent par l'achat intégré. Un formulaire Stripe ou un lien vers votre site web pour acheter des crédits entraîne un refus.
4.2
Fonctionnalité minimale
Une simple zone de texte devant une API, c'est maigre. Un historique des conversations, des prompts enregistrés, des réglages, des notifications push pour les tâches terminées et un objectif clair en font une app.
2.1
Complétude de l'app
L'examinateur va taper quelque chose. Assurez-vous que le compte de démo a des crédits, que le modèle répond en quelques secondes et que les erreurs (limite de débit, panne du fournisseur) affichent un message aimable plutôt qu'un indicateur de chargement sans fin.
Google Play : les règles qui s'appliquent
Règles sur le contenu généré par les utilisateurs
Des exigences de signalement, de blocage et de modération comparables à la 1.2 d'Apple dès que les utilisateurs peuvent publier ou partager. Les examinateurs vérifient que le parcours de signalement existe dans l'app.
Règles sur le contenu généré par IA
Les apps qui génèrent du contenu doivent empêcher les contenus interdits (contenus sexuels impliquant des mineurs, contenus qui facilitent la tromperie ou causent un préjudice) et proposer dans l'app un moyen de signaler les réponses offensantes de l'IA sans quitter l'app. Documentez vos tests de sécurité.
Formulaire Data safety
Les messages de chat envoyés à OpenAI ou Google comptent comme des données partagées avec un tiers. Déclarez-les sous Messages, et nommez ce traitement dans la politique de confidentialité. Une incohérence entre le formulaire et le trafic suffit à elle seule à provoquer un refus.
Questionnaire de classification du contenu
Le questionnaire IARC porte sur l'interaction entre utilisateurs, l'accès illimité à Internet et les contenus pour adultes. Répondez pour le pire cas que vos filtres autorisent ; une classification trop basse est corrigée par Google et peut entraîner un retrait.
Une architecture qui passe
Les clés restent sur le serveur, toujours
Une clé dans le JavaScript client peut être extraite de n'importe quelle app publiée. Faites passer chaque appel au modèle par votre propre backend (une route serverless suffit), qui détient la clé, vérifie la session et applique les limites.
Modérez les entrées et les sorties
Soumettez les prompts à une vérification de modération avant le modèle, et les réponses après (OpenAI propose un endpoint de modération ; Gemini a des paramètres et des catégories de sécurité). Bloquez, atténuez ou ajoutez un avertissement selon la catégorie, et journalisez la décision.
Signaler, bloquer, contacter
Une action Signaler sur chaque réponse générée, qui enregistre l'ID de la conversation et le motif, une option de blocage partout où les utilisateurs se voient entre eux, et un e-mail de support dans l'app et dans la politique.
Limites de débit et maîtrise des coûts
Des budgets quotidiens de messages et de tokens par utilisateur, des limites plus strictes pour l'usage anonyme, un plafond mensuel ferme chez le fournisseur, des alertes à 50 et 80 %, et un état « limite atteinte » soigné dans l'interface.
Consentement et conservation
Un avis au premier lancement sur le traitement par un tiers avec un OK explicite, un réglage de conservation (supprimer les conversations après 30 jours, par exemple) et une suppression de compte qui efface l'historique.
Avec une bonne version optimisée de votre application Web, vous pouvez avoir une superbe application mobile en quelques minutes. De plus, le service client est très agréable et très utile! Je ne peux que recommander WebViewGold :-)
Julian Koch · Co-fondateur de DuelDonkey · CodeCanyon
Maîtrise des coûts et modération côté serveur (esquisse)
Un route handler minimal dont la plupart des apps de chat ont besoin. Remplacez le stockage des budgets et les appels au fournisseur par les vôtres.
javascript
// POST /api/chat (serveur uniquement ; la clé API n'atteint jamais le client)
export async function POST(req) {
const user = await requireSession(req); // 401 si non connecté
const { message, conversationId } = await req.json();
const usage = await getDailyUsage(user.id); // messages et tokens du jour
if (usage.messages >= user.plan.dailyMessages) {
return json({ error: "limit", message: "Limite quotidienne atteinte. Réinitialisation à minuit." }, 429);
}
const flagged = await moderate(message); // endpoint de modération du fournisseur
if (flagged.blocked) {
await logModeration(user.id, conversationId, flagged);
return json({ error: "moderated", message: "Cette demande ne peut pas être traitée." }, 400);
}
const reply = await callModel({
messages: await history(conversationId, 20), // fenêtre de contexte bornée
maxTokens: 600, // plafonne le coût par réponse
userTag: hash(user.id), // attribution des abus chez le fournisseur
});
const outFlag = await moderate(reply.text);
const text = outFlag.blocked ? "Je ne peux pas vous aider sur ce point." : reply.text;
await recordUsage(user.id, reply.tokens);
await saveTurn(conversationId, message, text, { reportable: true });
return json({ text, conversationId });
}
Classification par âge : répondez pour ce que les filtres autorisent
Situation
Questionnaire de classification par âge d'Apple
Classification du contenu Google
Assistant généraliste, modération des entrées et des sorties, aucune fonction d'échange entre utilisateurs
Généralement une classification basse ; déclarez que l'app contient du contenu généré par IA, et un accès web illimité si les réponses incluent des liens
Répondez honnêtement au questionnaire ; en général une classification de niveau adolescent, en raison de la génération de texte ouverte
Compagnon ou jeu de rôle, thèmes pour adultes possibles
Classification plus élevée (16+ ou 18+ dans le système actuel d'Apple) ; le questionnaire porte sur les contenus pour adultes ou suggestifs et sur l'existence de contrôles
Classification adulte ; assurez-vous que la fiche du store correspond
Conseils médicaux, juridiques ou financiers
Indiquez les limites dans l'app et dans la fiche ; Apple examine ces affirmations au titre des guidelines 2.3 et 5.1.1
Idem ; ajoutez un avertissement et évitez tout vocabulaire de diagnostic ou de conseil en investissement
Enfants comme public cible
Les règles de la catégorie Enfants s'appliquent : aucun traitement de données personnelles par une IA tierce sans consentement parental, et des exigences plus strictes partout
Règles Familles : l'IA générative pour les enfants exige des garde-fous supplémentaires et n'est souvent pas approuvée
Vendre des crédits : l'achat intégré via RevenueCat
WebViewGold déclenche un achat intégré avec une seule URL : window.location.href = "revenuecat://purchase?external_id=" + userId + "&product=credits_100", où le produit est un consommable configuré dans App Store Connect, Google Play et RevenueCat, et où la clé API et l'ID de projet RevenueCat sont définis dans le projet WebViewGold. Votre serveur écoute le webhook RevenueCat et ajoute les crédits au solde de l'utilisateur ; n'ajoutez jamais de crédits côté client. Proposez restoreinapppurchases:// dans les réglages et, pour les abonnements, cancelinapppurchase://, qui ouvre la gestion des abonnements du store.
Sur le web, Stripe reste parfaitement adapté, et les crédits achetés sur le web peuvent être utilisés dans l'app. Ce que vous ne devez pas faire, c'est renvoyer les utilisateurs de l'app vers le site web pour acheter des crédits. Les deux stores prélèvent 15 % au lieu de 30 % dans le cadre du Small Business Program d'Apple et du palier à 15 % de Google pour un chiffre d'affaires inférieur à 1 million de dollars par an ; le guide de configuration RevenueCat couvre la configuration des produits.
Prompt pour Codex : préparer l'app de chat à l'examen
À coller dans Codex ou Claude Code
Renforcez cette app de chat IA en vue de l'examen App Store et Google Play. 1) Vérifiez qu'aucune clé API d'un fournisseur n'atteint le client ; déplacez tout appel direct au fournisseur dans une route serveur qui exige une session. 2) Ajoutez une modération avant l'appel au modèle et sur la réponse, avec journalisation. 3) Ajoutez une action Signaler sur chaque réponse générée (elle enregistre l'id de la conversation, l'id du message et le motif) et une action Bloquer partout où les utilisateurs se voient entre eux. 4) Ajoutez des budgets quotidiens de messages et de tokens par utilisateur, avec un état « limite atteinte » aimable, et des limites plus strictes pour les utilisateurs anonymes. 5) Ajoutez au premier lancement un avis de consentement expliquant que les messages sont traités par [OpenAI/Google] pour générer les réponses, avec un bouton Continuer explicite, et enregistrez le consentement. 6) Ajoutez un réglage de conservation et faites en sorte que la suppression de compte efface l'historique des conversations. 7) Quand isNativeApp() est true, redirigez les achats de crédits vers revenuecat://purchase?external_id=USER_ID&product=PRODUCT_ID et masquez les liens de paiement web ; les crédits ne sont accordés que par le handler du webhook RevenueCat. 8) Mettez à jour /privacy pour nommer le fournisseur d'IA, la durée de conservation et le signalement. Rendez compte de chaque changement et de tout ce qui nécessite une configuration côté fournisseur.
Questions fréquentes
Apple exige-t-il une modération pour toute app IA ?
En pratique, oui pour tout ce qui génère du texte ou des images de façon ouverte : les examinateurs testent avec des prompts répréhensibles et attendent un filtrage, un parcours de signalement et des coordonnées de contact, conformément à la guideline 1.2.
Puis-je appeler l'API OpenAI ou Gemini directement depuis le navigateur avec une clé restreinte ?
Non. Toute clé envoyée au client peut être extraite d'une app publiée et utilisée à vos frais. Placez l'appel derrière votre propre route serveur, avec authentification et limites.
Dois-je indiquer que les messages sont envoyés à OpenAI ou Google ?
Oui. Nommez le fournisseur dans la politique de confidentialité, déclarez le partage dans les réponses App Privacy d'Apple et dans le formulaire Data safety de Google, et demandez le consentement dans l'app avant le premier message (Apple 5.1.2).
Puis-je vendre des crédits avec Stripe ?
Sur le web, oui. Dans les apps iOS et Android, les crédits sont des biens numériques et doivent passer par l'achat intégré, que WebViewGold gère via RevenueCat. Les crédits achetés sur le web peuvent être utilisés dans 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.
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.