介绍
在使用 SwiftUI 创建的应用中,
我想显示一个要求用户评分和评论的视图。
我总结了如何使用它,因为用法会根据 iOS 的版本而有所不同。
(iPadOS、macOS、Mac Catalyst 的情况相同,但我将省略)
API 的变化
- iOS 13.0-(在 14.0 中已弃用)
SKStoreReviewController.requestReview()
- iOS 14.0-(未弃用)
// 事前にUIWindowSceneを取得する必要がある。
SKStoreReviewController.requestReview(in: windowScene)
- iOS 16.0 或更高版本
@Environment(.requestReview) var requestReview
requestReview()
无需获取 UIWindowScene (这很烦人)
代码
我真的很想做这个
import SwiftUI
import StoreKit
struct ContentView: View {
@available(iOS 16.0, *)
@Environment(.requestReview) var requestReview
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.onAppear {
if #available(iOS 16.0, *) {
// iOS 16.0 -
requestReview()
} else if #available(iOS 14.0, *) {
// iOS 14.0 - 15.x
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else {
// iOS 13.x
SKStoreReviewController.requestReview()
}
}
}
}
坏消息
不幸的是,存储财产不允许使用 @available。
现实代码
最低部署是 iOS 16.0 或更高版本
import SwiftUI
import StoreKit
struct ContentView: View {
@Environment(.requestReview) var requestReview
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.onAppear {
requestReview()
}
}
}
最低部署是 iOS 13.0 - 15.x
import SwiftUI
import StoreKit
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.onAppear {
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else {
SKStoreReviewController.requestReview()
}
}
}
}
结论
在不再支持 iOS 15 之前,我们是否只能安于现状?
请注意
- 我对何时调用 requestReview 并不认真。
- 我也没有认真对待如何获取 UIWindowScene。
开发环境
- Xcode 14.1
参考
评分和评论(人机界面指南)
评分、评论、回复
SKStoreReviewController requestReview()
SKStoreReviewController requestReview(in:)
RequestReviewAction
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308632908.html