Skip to content

Commit 2c184f8

Browse files
committed
feat(min-time): Add a minimum time criterion
* Add an optional minimum time criterion between the first active positive event and the current time
1 parent 4a1c055 commit 2c184f8

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Read the [Introduction Article](https://www.fline.dev/introducing-reviewkit/?ref
2525
```Swift
2626
import ReviewKit
2727
// ...
28-
ReviewKit.criteria = ReviewCriteria(minPositiveEventsWeight: 5, eventsExpireAfterDays: 30)
28+
ReviewKit.criteria = ReviewCriteria(minPositiveEventsWeight: 5, eventsExpireAfterDays: 30, minimumTimeBeforeRequest: DateComponents(day: 1))
2929
```
3030

3131
3. Determine common workflows in your app and when a user completes one of them, call this:

Diff for: Sources/ReviewKit/ReviewCriteria.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import Foundation
44
public struct ReviewCriteria {
55
let minPositiveEventsWeight: Int
66
let eventsExpireAfterDays: Int
7+
let minimumTimeBeforeRequest: DateComponents
78

89
/// - Parameters:
910
/// - minPositiveEventsWeight: The minimum positive events weight that needs to be surpassed to request a review. With the default event weight, this equals the number of events.
1011
/// - eventsExpireAfterDays: The relevant time interval to consider events within when looking into the past. Events outside this time period expire and get deleted from persistent storage.
11-
public init(minPositiveEventsWeight: Int, eventsExpireAfterDays: Int) {
12+
/// - minimumTimeBeforeRequest: The minimum time period between the first active (un-expired) positive event and the current time to request the review. For example, setting this to 1 day will require that the first un-expired positive event be at least 1 day in the past before requesting the review. This can prevent a user who's trying out the app for the first time from receiving the review request. This is disabled by default. To manually disable it, set some component to 0, e.g. `DateComponents(day: 0)`.
13+
public init(minPositiveEventsWeight: Int, eventsExpireAfterDays: Int, minimumTimeBeforeRequest: DateComponents = DateComponents(day: 0)) {
1214
self.minPositiveEventsWeight = minPositiveEventsWeight
1315
self.eventsExpireAfterDays = eventsExpireAfterDays
16+
self.minimumTimeBeforeRequest = minimumTimeBeforeRequest
1417
}
1518
}

Diff for: Sources/ReviewKit/ReviewKit.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ public enum ReviewKit {
3333
#endif
3434

3535
let totalPositiveEventsWeight = self.positiveEvents.reduce(into: 0, { $0 += $1.weight })
36-
if totalPositiveEventsWeight >= self.criteria.minPositiveEventsWeight {
36+
let firstPositiveEventDate = self.positiveEvents.first?.date ?? .distantFuture
37+
let requiredDateToRequestReview = Calendar.current.date(byAdding: criteria.minimumTimeBeforeRequest, to: firstPositiveEventDate)
38+
39+
if totalPositiveEventsWeight >= self.criteria.minPositiveEventsWeight, let requiredDateToRequestReview, requiredDateToRequestReview > Date() {
3740
#if os(iOS)
3841
if
3942
#available(iOS 14.0, *),

0 commit comments

Comments
 (0)