erkamyaman/ionic-capacitor-skills

ionic-in-app-review

Show the native App Store / Play Store rating prompt via @capacitor-community/in-app-review. Trigger when adding "rate this app" UX, the rating prompt after a positive moment (purchase complete, milestone reached), or any in-app review request flow.

First seen Apr 26, 2026

Installation

$ npx skills add erkamyaman/ionic-capacitor-skills --skill ionic-in-app-review

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from erkamyaman/ionic-capacitor-skills · top by installs.

npx skills add erkamyaman/ionic-capacitor-skills

Browse all from erkamyaman/ionic-capacitor-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 14
License LICENSE
Default branch main
Open issues 0
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.0
LicenseMIT
More metadata
author
erkamyaman
version
1.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,952 B
  • docs SUMMARY.md 276 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 21 installs

SKILL.md

In-App Review

The native rating dialog — Apple's SKStoreReviewController and Google Play's In-App Review API. Both are quota-limited by the OS to prevent spam (you can call them; the OS decides whether to actually show).

Install

npm install @capacitor-community/in-app-review
npx cap sync

Usage

import { InAppReview } from '@capacitor-community/in-app-review';

await InAppReview.requestReview();

That's it. The OS handles the dialog presentation, throttling, and submission.

Hard rules

  • ✅ Trigger after a positive moment: purchase completed, level finished, milestone hit, successful save. Never after an error.
  • ✅ Wait until the user has used the app for at least a few sessions.
  • ✅ The OS silently no-ops if it's been called too recently (Apple: ~3x per year per user — see SKStoreReviewController.requestReview HIG) for the published guideline). Don't try to detect this — just call when appropriate.
  • ❌ Don't attach a custom UI ("Would you like to rate?" → yes → call requestReview). That's redundant — the system dialog already asks. And on Android the prompt may not appear at all if the quota is exhausted.
  • ❌ Don't call after every session. Apple may rate-limit the entire app's review prompt globally.
  • ❌ Don't bribe for ratings ("rate us 5 stars to unlock") — App Review rejects, and so does the Play Console.

Recommended trigger pattern

// utils/review.ts
import { Preferences } from '@capacitor/preferences';
import { InAppReview } from '@capacitor-community/in-app-review';

const SESSION_COUNT_KEY = 'reviewSessionCount';
const LAST_PROMPT_KEY = 'reviewLastPromptedAt';
const PROMPT_AFTER_SESSIONS = 5;
const PROMPT_COOLDOWN_DAYS = 90;

export async function maybeRequestReview() {
  const sessions = Number((await Preferences.get({ key: SESSION_COUNT_KEY })).value ?? 0);
  const lastPrompted = Number((await Preferences.get({ key: LAST_PROMPT_KEY })).value ?? 0);
  const now = Date.now();
  const cooldownMs = PROMPT_COOLDOWN_DAYS * 24 * 60 * 60 * 1000;

  if (sessions < PROMPT_AFTER_SESSIONS) return;
  if (now - lastPrompted < cooldownMs) return;

  await InAppReview.requestReview();
  await Preferences.set({ key: LAST_PROMPT_KEY, value: String(now) });
}

export async function bumpSessionCount() {
  const current = Number((await Preferences.get({ key: SESSION_COUNT_KEY })).value ?? 0);
  await Preferences.set({ key: SESSION_COUNT_KEY, value: String(current + 1) });
}

Then call:

  • bumpSessionCount() once on app launch.
  • maybeRequestReview() after a positive moment (e.g., after a successful purchase, after the user completes onboarding flow, etc.).

You can't see who reviewed

Apple/Google return no signal about whether the user actually rated. Don't try to track conversion — track the call, not the result.

Fall-back to deep link

Some teams add a "Rate the app" Settings button that opens the App Store / Play Store listing directly (skipping the in-app dialog) — useful for users who want to leave a written review:

import { Browser } from '@capacitor/browser';
import { Capacitor } from '@capacitor/core';

async function openStoreListing() {
  const url = Capacitor.getPlatform() === 'ios'
    ? 'itms-apps://itunes.apple.com/app/idAPPSTORE_ID?action=write-review'
    : 'market://details?id=com.company.appname';
  await Browser.open({ url });
}

Replace APPSTORE_ID and the bundle ID with your actual values.