'requestReview()'는 iOS 14.0에서 더 이상 사용되지 않습니다.
iOS 14에서 Xcode는 다음과 같은 경고를 표시합니다.
requestReview()'는 iOS 14.0에서 더 이상 사용되지 않습니다.
저는 스토어킷을 사용하여 앱에서 자동으로 리뷰를 요청하고 있습니다.
func requestReview() {
guard shouldRequestReview else {return}
SKStoreReviewController.requestReview()
lastRequest = Date()
}
그 경고를 없애는 방법은?
iOS 16+
이제 환경 값으로 사용할 수 있는 새로운 RequestReviewAction이 있습니다.
private struct ContentView: View {
@Environment(\.requestReview) private var requestReview
var body: some View {
Button("Review") {
DispatchQueue.main.async {
requestReview()
}
}
}
}
iOS 14+
퀵 솔루션
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
DispatchQueue.main.async {
SKStoreReviewController.requestReview(in: scene)
}
}
참고: 일부 의견에 따르면 다음과 같이 하면 더 신뢰할 수 있습니다.DispatchQueue.main.async
편리한 솔루션
여기 진정한 원라이너가 있습니다.
SKStoreReviewController.requestReviewInCurrentScene()
하지만 먼저 다음 확장자를 만들어야 합니다.SKStoreReviewController
:
extension SKStoreReviewController {
public static func requestReviewInCurrentScene() {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
DispatchQueue.main.async {
requestReview(in: scene)
}
}
}
}
다음과 같은 스위프트 확장이 다른 GitHub 저장소가 있습니다.
설명.
그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)
}
- 단일 장면 솔루션(iOS용)
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
iOS(13 이상) 및 macOS용 간단한 솔루션
iOS(Swift 5+):
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
}
macOS: Apple ID를 URL "id123456789"로 바꾸는 것을 잊지 마십시오.
guard let writeReviewURL = URL(string: "https://itunes.apple.com/app/id123456789?action=write-review") else {
print("Invalid URL")
return
}
NSWorkspace.shared.open(writeReviewURL)
저는 다른 버전의 ios를 지원하는 번거로움을 덜어주는 작은 포장지를 SKStoreReviewController를 통해 만들었습니다.또한 macOS에서도 작동합니다.
// Review after 3 launches
AppReview.requestIf(launches: 3)
// Review after 5 days
AppReview.requestIf(days: 5)
// Review after 3 launches and 5 days
AppReview.requestIf(launches: 3, days: 5)
https://github.com/mezhevikin/AppReview
iOS 16에는 새로운 방법이 있습니다: https://developer.apple.com/documentation/storekit/requestreviewaction
제 시험에서는 메인 큐에서 그것을 하는 것이 매우 중요합니다.그렇지 않으면 대화를 신뢰할 수 없습니다.
private struct ContentView: View {
@Environment(\.requestReview) private var requestReview
var body: some View {
Button("Ask for Review") {
DispatchQueue.main.async {
requestReview()
}
}
}
}
~하듯이SKStoreReviewController.requestReview
ios14에서 더 이상 사용되지 않습니다. 를 사용할 수 있습니다.SKStoreReviewController.requestReview(in: scene)
ios14부터
샘플코드는아래에있습니다
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
}
언급URL : https://stackoverflow.com/questions/63953891/requestreview-was-deprecated-in-ios-14-0
'programing' 카테고리의 다른 글
XMLHttpRequest Level 2 - 업로드가 완료되었는지 여부 확인 (0) | 2023.09.12 |
---|---|
MariaDB 사용자 정의 변수에 휴지통 값이 있는 이유는 무엇입니까? (0) | 2023.09.12 |
기본 64 CLOB에 Oracle BLOB 연결 (0) | 2023.09.12 |
장고에서 db를 리셋하는 방법은?'reset' 명령을 찾을 수 없음 오류가 발생함 (0) | 2023.09.12 |
스프링 부트 액추에이터의 트레이스에 JSON 응답 바디를 포함하는 방법은? (0) | 2023.09.12 |