[ads] Support NTT grace period on iOS (#28892)

This commit is contained in:
aseren
2025-05-01 17:48:07 -05:00
committed by GitHub
parent 6547ddcd04
commit d96e785663
3 changed files with 30 additions and 0 deletions
@@ -123,6 +123,10 @@ public class NTPDataSource {
let newTabPageAd = rewards?.ads.maybeGetPrefetchedNewTabPageAd()
else { return nil }
if !hasGracePeriodEnded(sponsoredImageData) {
return nil
}
let isSponsoredVideoAllowed =
Preferences.NewTabPage.backgroundMediaType == .sponsoredImagesAndVideos
@@ -230,6 +234,22 @@ public class NTPDataSource {
replaceFavoritesIfNeeded?(superReferralImageData.topSites)
}
}
private func hasGracePeriodEnded(_ sponsoredImageData: NTPSponsoredImageData) -> Bool {
if BraveRewards.Configuration.current().isDebug == true {
// If debug mode is enabled, consider it ended.
return true
}
guard let gracePeriod = sponsoredImageData.gracePeriod?.doubleValue,
let installDate = Preferences.P3A.installationDate.value
else {
// If either the grace period or install date is not set, consider it ended.
return true
}
return Date.now.timeIntervalSince(installDate) > gracePeriod
}
}
extension NTPDataSource: PreferencesObserver {
@@ -16,12 +16,14 @@ NS_ASSUME_NONNULL_BEGIN
OBJC_EXPORT
@interface NTPSponsoredImageData : NSObject
@property(readonly) NSArray<NTPSponsoredImageCampaign*>* campaigns;
@property(readonly, nullable) NSNumber* gracePeriod;
@property(readonly) BOOL isSuperReferral;
@property(readonly, nullable) NSString* themeName;
@property(readonly, nullable) NSArray<NTPSponsoredImageTopSite*>* topSites;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)
initWithCampaigns:(NSArray<NTPSponsoredImageCampaign*>*)campaigns
gracePeriod:(nullable NSNumber*)gracePeriod
isSuperReferral:(BOOL)isSuperReferral
themeName:(nullable NSString*)themeName
topSites:(nullable NSArray<NTPSponsoredImageTopSite*>*)topSites
@@ -16,6 +16,7 @@
@interface NTPSponsoredImageData ()
@property(nonatomic, copy) NSArray<NTPSponsoredImageCampaign*>* campaigns;
@property(nonatomic, nullable) NSNumber* gracePeriod;
@property(nonatomic) BOOL isSuperReferral;
@property(nonatomic, copy, nullable) NSString* themeName;
@property(nonatomic, copy, nullable)
@@ -26,11 +27,13 @@
- (instancetype)
initWithCampaigns:(NSArray<NTPSponsoredImageCampaign*>*)campaigns
gracePeriod:(nullable NSNumber*)gracePeriod
isSuperReferral:(BOOL)isSuperReferral
themeName:(nullable NSString*)themeName
topSites:(nullable NSArray<NTPSponsoredImageTopSite*>*)topSites {
if ((self = [super init])) {
self.campaigns = campaigns;
self.gracePeriod = gracePeriod;
self.isSuperReferral = isSuperReferral;
self.themeName = themeName;
self.topSites = topSites;
@@ -45,6 +48,10 @@
[campaigns addObject:[[NTPSponsoredImageCampaign alloc]
initWithCampaign:campaign]];
}
NSNumber* gracePeriod = nil;
if (data.grace_period) {
gracePeriod = [NSNumber numberWithFloat:data.grace_period->InSecondsF()];
}
auto isSuperReferral = data.IsSuperReferral();
NSString* themeName = nil;
NSMutableArray<NTPSponsoredImageTopSite*>* topSites = nil;
@@ -57,6 +64,7 @@
}
}
return [self initWithCampaigns:campaigns
gracePeriod:gracePeriod
isSuperReferral:isSuperReferral
themeName:themeName
topSites:topSites];