控制SKStoreReviewController显示频率

时间:2017-03-28 11:28:46

标签: ios swift skstorereviewcontroller

我已将以下内容添加到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
    }

2 个答案:

答案 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];
}