rating-prompt-strategy by eronred/aso-skills
npx skills add https://github.com/eronred/aso-skills --skill rating-prompt-strategy您需要优化应用在何时、如何以及向谁展示评分提示——在最大化高评分的同时最小化负面评分。评分是 App Store 的排名信号,也是产品页面上的转化因素。
只提示那些已经体验到价值的用户。 过早提示会产生低评分。在成功时刻提示会产生 4-5 星评分。
苹果的原生提示。规则:
无论您调用多少次,每年最多显示 3 次
苹果控制显示逻辑——调用它并不保证会显示
切勿在错误、崩溃或令人沮丧的时刻之后提示
无法自定义提示 UI
import StoreKit
// 在合适的时机调用 if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene { SKStoreReviewController.requestReview(in: scene) }
谷歌的原生提示。规则:
没有硬性限制,但如果调用过于频繁,谷歌会进行限制
在明确的积极时刻之后显示
无法确定用户是否实际进行了评分(出于隐私考虑)
val manager = ReviewManagerFactory.create(context) val request = manager.requestReviewFlow() request.addOnCompleteListener { task -> if (task.isSuccessful) { val reviewInfo = task.result val flow = manager.launchReviewFlow(activity, reviewInfo) flow.addOnCompleteListener { /* proceed */ } } }
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
在您的应用中定义 1-3 个用户最满意的"成功时刻":
| 应用类型 | 好的提示时机 | 差的提示时机 |
|---|---|---|
| 健身 | 完成一次锻炼后 | 跳过一次训练后 |
| 效率工具 | 完成一个项目/任务后 | 保存失败或同步错误后 |
| 游戏 | 赢得一个关卡或击败首领后 | 失败或输掉后 |
| 金融 | 首次成功交易后 | 遇到令人困惑的错误后 |
| 冥想 | 完成一次冥想课程后 | 冷启动时 |
| 购物 | 成功购买/交付后 | 结账失败后 |
只提示满足所有条件的用户:
Criteria to prompt:
✓ Sessions >= 3 (not a first-time user)
✓ Time since install >= 3 days
✓ Has completed [activation event] at least once
✓ No crash in last session
✓ No negative signal (error, cancellation) in current session
✓ Not already rated this version
在触发原生提示之前,显示一个单一的应用内问题:
"Are you enjoying [App Name]?"
[Yes, love it!] [Not really]
SKStoreReviewRequest / Play 应用内评价这可以在不满意的用户给出 1-2 星评分之前将其过滤掉。
预期改进: 使用预提示过滤器后,平均评分可提高 0.3–0.8 星。
iOS 允许您在 App Store Connect 中按版本重置评分。请策略性地使用此功能:
review-management 技能)修复发布后:
Day 0: Issue identified — hotfix or patch in progress
Day 1–3: Reply to every negative review acknowledging the issue
Day 7: Fix shipped — reply to previous negative reviews "Fixed in X.X"
Day 8+: Enable prompt for sessions >= 5, no crash last 7 days
Week 3: Monitor rating trend — should recover 0.2–0.5 stars in 2–4 weeks
| 平台 | 最大值 | 推荐值 |
|---|---|---|
| iOS | 每 365 天 3 次(苹果强制) | 每个版本 1-2 次 |
| Android | 无硬性限制(谷歌会限制) | 每个用户每 30 天 1 次 |
切勿在同一会话中显示两次提示。
Current rating: [X.X] ★ ([N] ratings)
Platform: iOS / Android / Both
Success moments identified:
1. [Event name] — fires when [condition]
2. [Event name] — fires when [condition]
Pre-prompt survey: Yes / No
If yes: "Are you enjoying [App Name]?" → Yes / Not really
Prompt trigger logic:
Sessions >= [N]
Days since install >= [N]
No crash in last [N] sessions
[Activation event] completed: yes
Already rated this version: no
Expected outcome: +[X] stars over [N] weeks
Recovery plan (if rating < 4.0):
1. [Fix] — ship by [date]
2. [Reply strategy] — [N] reviews to address
3. [Prompt campaign] — start [date], target [segment]
review-management — 回复评价以恢复评分onboarding-optimization — 修复导致 1 星评价的激活问题android-aso — Play 应用内评价 API 上下文retention-optimization — 活跃用户会给出更好的评分每周安装量
81
代码仓库
GitHub 星标数
597
首次出现
3 天前
安全审计
安装于
opencode81
gemini-cli81
kimi-cli81
codex81
amp81
cline81
You optimize when, how, and to whom an app shows review prompts — maximizing high ratings while minimizing negative ones. Ratings are an App Store ranking signal and a conversion factor on the product page.
Only prompt users who have experienced value. Prompting too early produces low ratings. Prompting at a success moment produces 4–5 star ratings.
Apple's native prompt. Rules:
Shows at most 3 times per year regardless of how many times you call it
Apple controls the display logic — calling it doesn't guarantee it shows
Never prompt after an error, crash, or frustrating moment
Cannot customize the prompt UI
import StoreKit
// Call at the right moment if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene { SKStoreReviewController.requestReview(in: scene) }
Google's native prompt. Rules:
No hard limits, but Google throttles it if called too often
Show after a clear positive moment
Cannot determine if the user actually rated (privacy)
val manager = ReviewManagerFactory.create(context) val request = manager.requestReviewFlow() request.addOnCompleteListener { task -> if (task.isSuccessful) { val reviewInfo = task.result val flow = manager.launchReviewFlow(activity, reviewInfo) flow.addOnCompleteListener { /* proceed */ } } }
Define 1–3 "success moments" in your app where users are most satisfied:
| App Type | Good Prompt Moments | Bad Prompt Moments |
|---|---|---|
| Fitness | After completing a workout | After skipping a session |
| Productivity | After completing a project/task | After a failed save or sync error |
| Games | After winning a level or beating a boss | After losing or failing |
| Finance | After first successful transaction | After a confusing error |
| Meditation | After completing a session | On cold open |
| Shopping | After a successful purchase/delivery | After a failed checkout |
Only prompt users who meet all criteria:
Criteria to prompt:
✓ Sessions >= 3 (not a first-time user)
✓ Time since install >= 3 days
✓ Has completed [activation event] at least once
✓ No crash in last session
✓ No negative signal (error, cancellation) in current session
✓ Not already rated this version
Before triggering the native prompt, show a single in-app question:
"Are you enjoying [App Name]?"
[Yes, love it!] [Not really]
SKStoreReviewRequest / Play In-App ReviewThis filters out dissatisfied users before they can rate you 1–2 stars.
Expected improvement: 0.3–0.8 stars on average with a pre-prompt filter.
iOS allows you to reset ratings per version in App Store Connect. Use this strategically:
review-management skill)After the fix is shipped:
Day 0: Issue identified — hotfix or patch in progress
Day 1–3: Reply to every negative review acknowledging the issue
Day 7: Fix shipped — reply to previous negative reviews "Fixed in X.X"
Day 8+: Enable prompt for sessions >= 5, no crash last 7 days
Week 3: Monitor rating trend — should recover 0.2–0.5 stars in 2–4 weeks
| Platform | Maximum | Recommended |
|---|---|---|
| iOS | 3× per 365 days (Apple-enforced) | 1–2× per version |
| Android | No hard limit (Google throttles) | 1× per 30 days per user |
Never show the prompt twice in the same session.
Current rating: [X.X] ★ ([N] ratings)
Platform: iOS / Android / Both
Success moments identified:
1. [Event name] — fires when [condition]
2. [Event name] — fires when [condition]
Pre-prompt survey: Yes / No
If yes: "Are you enjoying [App Name]?" → Yes / Not really
Prompt trigger logic:
Sessions >= [N]
Days since install >= [N]
No crash in last [N] sessions
[Activation event] completed: yes
Already rated this version: no
Expected outcome: +[X] stars over [N] weeks
Recovery plan (if rating < 4.0):
1. [Fix] — ship by [date]
2. [Reply strategy] — [N] reviews to address
3. [Prompt campaign] — start [date], target [segment]
review-management — Respond to reviews to recover ratingonboarding-optimization — Fix activation issues that drive 1-star reviewsandroid-aso — Play In-App Review API contextretention-optimization — Engaged users give better ratingsWeekly Installs
81
Repository
GitHub Stars
597
First Seen
3 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode81
gemini-cli81
kimi-cli81
codex81
amp81
cline81
Apple Reminders CLI (remindctl) - 终端管理苹果提醒事项,同步iPhone/iPad
1,000 周安装