Skip to content
WebViewGold Vibe Coding to App Store
English
Get WebViewGold

AI coding agents

AI chat apps in the App Store and on Google Play: the rules that actually get enforced

Apps that generate text or images with an LLM get a closer look from both review teams, and for good reason: unfiltered output, personal data flowing to a third-party model and runaway API bills have all caused removals. None of this is hard to get right in a web app you wrap with WebViewGold. Here is the checklist.

From $109 one-time per platform, or let our team do it all from $698.

  • Approval guarantee – or money back within 14 days
  • No coding needed
  • One-time payment, free updates
  • 24/7 human support
  • Made in Germany since 2014 · ISO 27001

Apple: the guidelines reviewers cite for AI apps

  • 1.2

    User-generated content, applied to AI output

    Apple treats generated content like user content: you need filtering of objectionable material, a way to report it, a way to block abusive users where users interact, and published contact information. For a chat app this means moderation on prompts and responses, a Report button on every answer, and a moderation sentence in the policy.

  • 5.1.2

    Data use and sharing

    Chats are personal data. Tell users, before the first message, that their input is processed by OpenAI or Google to generate answers, and get their consent. The guideline explicitly names sharing with third-party AI. Do not use chats for anything the user did not agree to.

  • 5.1.1

    Data collection and account deletion

    If users sign up, account deletion must be available in the app and must delete the chat history too. The privacy policy must name the AI provider and the retention period.

  • 3.1.1

    In-app purchase

    Credits, tokens, message packs and premium tiers are digital goods: inside the app they go through in-app purchase. A Stripe form or a link to your website for credits is a rejection.

  • 4.2

    Minimum functionality

    A single text box in front of an API is thin. Conversation history, saved prompts, settings, push for finished tasks and a clear purpose make it an app.

  • 2.1

    App completeness

    The reviewer will type something. Make sure the demo account has credits, the model responds within seconds, and errors (rate limit, provider outage) show a friendly message instead of a spinner.

Google Play: the policies that apply

User-generated content policy

Reporting, blocking and moderation requirements comparable to Apple 1.2 when users can post or share. Reviewers check that the report path exists inside the app.

AI-generated content policy

Apps that generate content must prevent restricted output (sexual content involving minors, content that enables deception or harm) and must offer an in-app way to report or flag offensive AI output without leaving the app. Document your safety testing.

Data safety form

Chat messages sent to OpenAI or Google count as data shared with a third party. Declare it under Messages, and name the processing in the privacy policy. A mismatch between form and traffic is a rejection on its own.

Content rating questionnaire

The IARC questionnaire asks about user interaction, unrestricted internet access and mature content. Answer for the worst case your filters allow; a rating that is too low gets corrected by Google and can lead to removal.

An architecture that passes

  1. Keys live on the server, always

    A key in client JavaScript is extractable from any published app. Route every model call through your own backend (a serverless route is enough) that holds the key, checks the session and applies limits.

  2. Moderate input and output

    Run prompts through a moderation check before the model and responses after it (OpenAI offers a moderation endpoint; Gemini has safety settings and categories). Block, soften or add a notice depending on category, and log the decision.

  3. Report, block, contact

    A Report action on every generated answer that stores the conversation ID and reason, a block option wherever users see each other, and a support email in the app and in the policy.

  4. Rate limits and cost controls

    Per-user daily message and token budgets, stricter limits for anonymous use, a hard monthly cap at the provider, alerts at 50 and 80 percent, and a graceful "limit reached" state in the UI.

  5. Consent and retention

    A first-run notice about third-party processing with an explicit OK, a retention setting (delete chats after 30 days, for example), and account deletion that purges history.

With a good optimized version of your web app you can have a stunning mobile app within a couple of minutes. Additionally to that the customer service is very nice and very helpful! I can just recommend WebViewGold :-)

Julian Koch · Co-Founder of DuelDonkey · CodeCanyon

Cost control and moderation on the server (sketch)

A minimal route handler that most chat apps need. Replace the budget store and the provider calls with yours.

javascript
// POST /api/chat  (server only; the API key never reaches the client)
export async function POST(req) {
  const user = await requireSession(req);                 // 401 if not signed in
  const { message, conversationId } = await req.json();

  const usage = await getDailyUsage(user.id);             // messages and tokens today
  if (usage.messages >= user.plan.dailyMessages) {
    return json({ error: "limit", message: "Daily limit reached. Resets at midnight." }, 429);
  }

  const flagged = await moderate(message);                // provider moderation endpoint
  if (flagged.blocked) {
    await logModeration(user.id, conversationId, flagged);
    return json({ error: "moderated", message: "That request cannot be processed." }, 400);
  }

  const reply = await callModel({
    messages: await history(conversationId, 20),          // bounded context window
    maxTokens: 600,                                       // caps cost per answer
    userTag: hash(user.id),                               // abuse attribution at the provider
  });

  const outFlag = await moderate(reply.text);
  const text = outFlag.blocked ? "I cannot help with that." : reply.text;

  await recordUsage(user.id, reply.tokens);
  await saveTurn(conversationId, message, text, { reportable: true });
  return json({ text, conversationId });
}

Age rating: answer for what the filters allow

SituationApple age rating questionnaireGoogle content rating
General assistant, moderation on input and output, no user-to-user featuresUsually a low rating; declare that the app includes AI-generated content and unrestricted web access if answers include linksAnswer the questionnaire honestly; typically a teen-level rating because of open-ended text generation
Companion or role-play, mature themes possibleHigher rating (16+ or 18+ in Apple's current system); the questionnaire asks about mature or suggestive content and whether controls existMature rating; make sure the store listing matches
Medical, legal or financial adviceState the limits in the app and the listing; Apple reads claims under 2.3 and 5.1.1Same; add a disclaimer and avoid diagnosis or investment language
Children as the audienceKids Category rules apply: no third-party AI processing of personal data without parental consent, stricter everythingFamilies policy: generative AI for children needs extra safeguards and is often not approved

Selling credits: in-app purchase via RevenueCat

WebViewGold triggers an in-app purchase with one URL: window.location.href = "revenuecat://purchase?external_id=" + userId + "&product=credits_100", where the product is a consumable configured in App Store Connect, Google Play and RevenueCat, and the RevenueCat API key and project ID are set in the WebViewGold project. Your server listens to the RevenueCat webhook and adds the credits to the user's balance; never add credits on the client. Offer restoreinapppurchases:// in settings and, for subscriptions, cancelinapppurchase://, which opens the store's subscription management.

On the web, Stripe remains fine, and credits bought on the web may be used in the app. What you must not do is point app users to the website to buy credits. Both stores take 15% instead of 30% under Apple's Small Business Program and Google's 15% tier for revenue under $1M per year; the RevenueCat setup guide covers the product configuration.

Prompt for Codex: harden the chat app for review

Paste into Codex or Claude Code
Harden this AI chat app for App Store and Google Play review. 1) Verify that no provider API key reaches the client; move any direct provider call into a server route that requires a session. 2) Add moderation before the model call and on the response, with logging. 3) Add a Report action on every generated answer (stores conversation id, message id, reason) and a Block action anywhere users see each other. 4) Add per-user daily message and token budgets with a friendly limit-reached state, and stricter limits for anonymous users. 5) Add a first-run consent notice explaining that messages are processed by [OpenAI/Google] to generate answers, with an explicit Continue button, and record the consent. 6) Add a retention setting and make account deletion purge chat history. 7) When isNativeApp() is true, route credit purchases to revenuecat://purchase?external_id=USER_ID&product=PRODUCT_ID and hide web payment links; credits are granted only by the RevenueCat webhook handler. 8) Update /privacy to name the AI provider, retention and reporting. Report every change and anything that needs provider-side configuration.

Frequently asked questions

Does Apple require moderation for every AI app?

In practice, yes for anything that generates open-ended text or images: reviewers test with objectionable prompts and expect filtering, a report path and contact details, following Guideline 1.2.

Can I call the OpenAI or Gemini API directly from the browser with a restricted key?

No. Any key shipped to the client can be extracted from a published app and used at your expense. Put the call behind your own server route with authentication and limits.

Do I have to disclose that messages go to OpenAI or Google?

Yes. Name the provider in the privacy policy, declare the sharing in Apple's App Privacy answers and Google's Data safety form, and ask for consent in the app before the first message (Apple 5.1.2).

Can I sell credits with Stripe?

On the web, yes. Inside the iOS and Android apps, credits are digital goods and must go through in-app purchase, which WebViewGold handles via RevenueCat. Credits bought on the web can be used in the app.

Three ways to get your app into the stores

Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.

Do it yourself

$109 per platform, one-time

The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.

See plans on the main page

Cloud Builder

$349 per license, one-time add-on

No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.

How the Cloud Builder works Try the free demo

Full Service

$698 per platform $798

Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.

Full Service details Powered by WeSetupYourWebViewApp

Winter Sale prices valid until December 31, 2026.

Ready to ship your app?

App Store & Google Play approval guarantee – or your money back within 14 days

Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.

Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.