快速解决方案
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
方便的解决方案
这是一个真正的单线:
SKStoreReviewController.requestReviewInCurrentScene()
但首先您需要在SKStoreReviewController 中创建以下扩展:
extension SKStoreReviewController {
public static func requestReviewInCurrentScene() {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
requestReview(in: scene)
}
}
}
这是一个GitHub repository,带有不同的 Swift 扩展名,包括 requestReviewInCurrentScene()。
说明
requestReview 函数在 iOS 14 中已弃用:
@available(iOS, introduced: 10.3, deprecated: 14.0)
open class func requestReview()
您需要改用requestReview(in:) 函数:
@available(iOS 14.0, *)
open class func requestReview(in windowScene: UIWindowScene)
可能的解决方案
您可以创建以下扩展:
extension UIApplication {
var currentScene: UIWindowScene? {
connectedScenes
.first { $0.activationState == .foregroundActive } as? UIWindowScene
}
}
并像这样使用它:
if let scene = UIApplication.shared.currentScene {
SKStoreReviewController.requestReview(in: scene)
}
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}