我已将以下内容添加到AppDelegate并导入StoreKit。正如预期的那样,审核模式会在启动时弹出。我的问题是,我是负责这个频率的人还是Apple? docs仍然很轻,但我读到elsewhere Apple将每个用户限制为每年3次,我可以信任它们在显示之间添加适当的时间(理想情况下几个月?)
在开发中,每次我启动应用程序时都会弹出它,我讨厌我的用户不得不在很多次启动时将其解雇3次,然后在12个月内再次被问到。
现在10.3已经出局了,我对其他人如何解决这个问题感兴趣。
干杯。
if #available(iOS 10.3, *) {
print("Show Review Controller")
SKStoreReviewController.requestReview()
} else {
print("Cannot Show Review Controller")
// Fallback on earlier versions
}
答案 0 :(得分:9)
我已添加了UserDefaults
中存储的计数。每当某个操作发生时,它都会递增,当count % 10 == 0
我调用SKStoreReviewController.requestReview()
时(普通用户可能会在每次使用该应用时增加一次计数)
这可能会也可能不会显示审核请求,但会确保其不会过于频繁地显示。
或者,考虑在请求之间存储lastReivewAttemptDate
和最小间隔。
答案 1 :(得分:2)
您不负责计算这一点 - 但这样做可以让您在可能用完电话时更具战略性。
在NSUserDefaults中保存每个呼叫的时间戳似乎是最灵活的跟踪方式。这就是我在obj-c中做的事情:
// Rate app action for iOS 10.3+
-(void)displayDialog {
[SKStoreReviewController requestReview];
[self storeTimestamp:PromptTimestampsKey];
}
- (void)storeTimestamp:(NSString *)key {
NSNumber *todayTimestamp = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];
NSMutableArray *timestamps = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:key]];
// Remove timestamps more than a year old
for (NSNumber *timestamp in timestamps) {
if ((todayTimestamp.doubleValue - timestamp.doubleValue) > SecondsInYear) {
[timestamps removeObject:timestamp];
}
}
// Store timestamp for this call
[timestamps addObject:todayTimestamp];
[[NSUserDefaults standardUserDefaults] setObject:timestamps forKey:key];
}