No incentivized or fake reviews or rating manipulation
Why it matters
Apple's guideline 1.1.7 and Google Play Developer Policy both explicitly prohibit incentivized reviews and review gating. Offering in-app currency for a review (if (userLeftReview) grantCoins(50)) is a direct policy violation detectable in source code. Review gating — asking "Do you like our app?" and only showing the store prompt if the answer is "Yes" — is equally prohibited because it systematically filters out negative reviewers. Both practices result in App Store rating manipulation, which Apple takes seriously. Reviewers actively look for both patterns, and discovery results in immediate rejection plus potential listing removal.
Severity rationale
High because both incentivized reviews and review gating are explicitly prohibited by Apple guideline 1.1.7 and can result in rejection plus listing consequences.
Remediation
Remove any coin/reward grant tied to review submission and any satisfaction pre-filter before the rating prompt.
// Correct: trigger rating prompt after a meaningful task, no pre-screening
import * as StoreReview from 'expo-store-review';
async function onOrderCompleted() {
const completedCount = await AsyncStorage.getItem('order_count');
const hasPrompted = await AsyncStorage.getItem('has_rated');
if (parseInt(completedCount ?? '0') >= 3 && !hasPrompted) {
if (await StoreReview.hasAction()) {
await StoreReview.requestReview();
await AsyncStorage.setItem('has_rated', 'true');
}
}
}
Delete any if (userSaidTheyLikeApp) showRatingPrompt() branching logic. Never grant rewards contingent on a review submission. Apple's system caps the native dialog to 3 prompts per year — your code should also track and respect this limit.
Detection
- ID:
no-incentivized-reviews - Severity:
high - What to look for: Count all relevant instances and enumerate each. Search for incentivized review patterns: code that offers in-app currency, unlocked features, or other rewards in exchange for leaving an App Store review (
if (userLeftReview) grantCoins()); copy that says "Rate us and get 100 coins"; gating of features behind a review submission. Also look for review gating: showing a rating prompt only after a user indicates they are satisfied ("Do you like our app?" → Yes → show rating prompt; No → send to support). Review gating is explicitly prohibited by both Apple and Google. Search forStoreRevieworInAppReviewcombined with a prior satisfaction check that branches based on the user's response. - Pass criteria: App does not offer incentives for ratings. At least 1 implementation must be verified. Rating prompt flow does not first ask users if they are satisfied and only then show the store rating dialog (review gating).
- Fail criteria: In-app rewards offered for leaving a review; review gating (asking "Did you enjoy the app?" and only showing review prompt if answer is "Yes"); any mechanism that filters out likely-negative reviewers before showing the rating prompt.
- Skip (N/A) when: Never — this check applies to all apps regardless of whether they currently show rating prompts.
- Detail on fail:
"src/screens/HomeScreen.tsx shows 'Rate us for 50 coins!' dialog — incentivized reviews are prohibited"or"Rating prompt is shown only after user answers 'Yes' to 'Are you enjoying the app?' — this is review gating" - Remediation: Apple guideline 1.1.7 and Google Play policy both prohibit manipulating ratings.
- Remove any coin/reward grants tied to leaving a review
- Remove any pre-filter satisfaction check before the rating prompt
- The correct pattern: show the rating prompt at a natural positive moment (after completing a task, after a streak) without any pre-screening:
import * as StoreReview from 'expo-store-review'; // After user completes a task: if (await StoreReview.hasAction()) { await StoreReview.requestReview(); } - Never show the rating prompt more than 3 times per year (Apple's system enforces this, but your code logic should also respect it)
External references
- external · apple-guideline-1.1.7-ratings-manipulation — Apple App Store Review Guideline 1.1.7 — No Incentivized or Manipulated Ratings
Taxons
History
- 2026-04-18·v1.0.0·Initial import from app-store-review-blockers·automated