是否可以确定 SKStore Review Controller 是否已呈现. [英] Is it possible determine if SKStoreReviewController has been presented.
问题描述
我的意图是要么显示 SKStore Review Controller(如果适用),要么显示我自己的反馈控制器并将用户重定向到 App Store.通过这样做,我可以避免多次询问用户反馈.
My intention is to either display the SKStoreReviewController (If applicable) or display my own feedback controller and redirect the user to the App Store. By doing this I can avoid asking the user for feedback more than once.
在阅读 Apple 关于 SKStore Review Controller (https://developer.apple.com/reference/storekit/skstorereviewcontroller) 似乎无法确定 SKStore Review Controller 是当前呈现还是之前已呈现.
After reading Apple's lacking documentation on SKStoreReviewController (https://developer.apple.com/reference/storekit/skstorereviewcontroller) it seems that there is no way to determine if SKStoreReviewController is currently presented or has been presented previously.
我知道我可以将显示频率存储在 NSUserDefaults 中,但我宁愿避免这样做.
I understand that I could potentially store the display frequency in NSUserDefaults, but I would prefer to avoid doing so.
推荐答案
这是我检测它是否已呈现的方法.
Here is how I detect if it has been presented.
private static func checkIfShownSKStoreReviewController(_ iteration: Int, originalWindowCount: Int) {
let windows = UIApplication.shared.windows
if windows.count > originalWindowCount {
let window = windows[1]
if window.className == "UITextEffectsWindow" || window.className == "UIRemoteKeyboardWindow" {
print("Shown SKVC iteration: \(iteration)")
//Do logic stuff like saving to your database
return
}
}
if iteration > 2000 {
print("checkIfShownSKStoreReviewController: timeout, bailing \(iteration)")
return
}
runThisAfterDelay(seconds: 0.02, after: {
checkIfShownSKStoreReviewController(iteration + 1, originalWindowCount: originalWindowCount)
})
}
private static func runThisAfterDelay(seconds seconds: Double, after: () -> ()) {
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC)))
dispatch_after(time, dispatch_get_main_queue(), after)
}
static func showReview() {
print("Showing AppStore Review")
if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
checkIfShownSKStoreReviewController(0, originalWindowCount: UIApplication.shared.windows.count)
}
}
这篇关于是否可以确定 SKStore Review Controller 是否已呈现.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!