iOS必须用SKStoreReviewController弹系统评分浮层,不可跳转App Store;Android只能引导至各商店主页。需平台判断、控制频次、在正向行为后触发,并用条件编译隔离非App端。

uni-app App端调用原生评分弹窗(iOS)
iOS 系统不允许 App 自动跳转到 App Store 评价页,必须走 SKStoreReviewController 原生 API 弹出系统评分浮层——这是苹果强制要求,uni-app 无法绕过。H5 或小程序里用的“跳转链接”在 iOS App 里完全无效。
实操建议:
- 仅限 iOS 平台生效;Android 端无对应原生能力,uni-app 官方插件也不支持模拟
- 必须使用
uni.getSystemInfoSync().platform === 'ios'显式判断平台,避免在 Android 上白调用 - 不能频繁触发:苹果限制同一用户 365 天内最多弹出 3 次,且由系统决定是否真正显示(用户可能根本看不到)
- 需在用户完成关键正向行为后调用(如完成订单、通关关卡),否则容易被拒审
示例(需配合原生插件):
if (uni.getSystemInfoSync().platform === 'ios') {
uni.requireNativePlugin('UniModule-StoreReview').requestReview()
}
uni-app 跳转 App Store 评价页(iOS)
虽然不能自动评分,但可以跳转到 App Store 对应页面让用户手动点「评分」——前提是知道你的 App ID,并拼对 URL Scheme。
常见错误现象:
- 用
https://apps.apple.com/app/id123456789直接uni.openURL→ 在 App 内 Safari 打开,不是 App Store App - 用
itms-apps://协议 → iOS 10+ 已废弃,会静默失败 - App ID 填错或未上架 → 跳转后显示“该 App 不可用”
正确做法:
- 使用
https://apps.apple.com/cn/app/id{yourAppID}(注意cn区域码要和目标市场一致) - 必须用
uni.openURL,不能用location.href或web-view - 跳转前加一次
try/catch,因为 iOS 可能因权限或网络拦截导致失败,不报错但无响应
示例:
const appStoreUrl = 'https://apps.apple.com/cn/app/id123456789' uni.openURL(appStoreUrl)
Android 端如何处理评价引导
Android 没有统一评分 API,各厂商商店(华为、小米、应用宝)协议不互通,也不能保证用户安装了对应商店 App。
所以实际能做的只有两件事:
- 跳转到 Google Play 页面(仅限海外包):
https://play.google.com/store/apps/details?id=com.example.app - 国内安卓包只能跳转到你上架的某个商店主页(如华为应用市场),但无法定位到具体评分入口,用户得自己找
- 不要尝试用
intent://或自定义 scheme → 兼容性极差,多数手机直接报错或打开浏览器
更现实的做法是:在安卓端只展示一个带图标的评价按钮,点击后弹出提示框,说明“请前往【华为/小米/应用宝】搜索本应用并评分”,并附上商店下载链接(防用户没装)。
uni-app 条件编译与埋点时机控制
评分引导最常踩的坑,不是技术实现,而是触发逻辑乱套:用户刚启动就弹、连续多次弹、未登录就推——这些都会被苹果拒审或引发用户反感。
必须做三件事:
- 用
#ifdef APP-PLUS包裹所有原生调用,确保 H5 和小程序不执行 - 用本地 storage 记录是否已弹过、上次弹出时间、用户是否点过“以后再说”,避免重复打扰
- 只在明确的正向节点触发(如
onShow时检查订单完成状态,而非onLoad)
复杂点在于:iOS 的 SKStoreReviewController 不允许你判断用户是否点了「评分」还是「跳过」,回调永远是空的。所以你无法据此做后续动作,只能当它是一次性广播。











