Управление частотой отображения SKStoreReviewController

Я добавил следующее в мой AppDelegate и импортировал StoreKit. Модальный обзор появляется при запуске, как и ожидалось. Мой вопрос, я человек, отвечающий за частоту, что это называется, или Apple? Документы все еще довольно легкие, но я читал в другом месте, что 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 ответа

Решение

Я добавил счетчик, который хранится в UserDefaults, Он увеличивается каждый раз, когда происходит определенное действие, и когда count % 10 == 0 Я звоню SKStoreReviewController.requestReview() (средний пользователь, скорее всего, будет увеличивать количество раз за использование приложения)

Это может отображать или не отображать запрос на проверку, но гарантирует, что он отображается не слишком часто.

Кроме того, рассмотрите возможность хранения lastReivewAttemptDate и минимальный интервал между запросами.

Вы не отвечаете за это - но это позволяет вам быть более стратегическим, когда у вас потенциально заканчиваются звонки.

Сохранение временных меток для каждого вызова внутри 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];
}
Другие вопросы по тегам