UNPKG

4.7 kBPlain TextView Raw
1#import <EXAdsFacebook/EXAdSettingsManager.h>
2#import <FBAudienceNetwork/FBAudienceNetwork.h>
3#import <UMCore/UMAppLifecycleService.h>
4
5@interface EXAdSettingsManager ()
6
7@property (nonatomic) BOOL isChildDirected;
8@property (nonatomic, strong) NSString *mediationService;
9@property (nonatomic, strong, nullable) NSString *urlPrefix;
10@property (nonatomic, weak) UMModuleRegistry *moduleRegistry;
11@property (nonatomic) FBAdLogLevel logLevel;
12@property (nonatomic, strong) NSMutableArray<NSString*> *testDevices;
13
14@end
15
16@implementation EXAdSettingsManager
17
18UM_EXPORT_MODULE(CTKAdSettingsManager)
19
20- (instancetype)init {
21 if (self = [super init]) {
22 _testDevices = [NSMutableArray new];
23 _mediationService = @"";
24 }
25 return self;
26}
27
28- (void)setModuleRegistry:(UMModuleRegistry *)moduleRegistry
29{
30 _moduleRegistry = moduleRegistry;
31 [[_moduleRegistry getModuleImplementingProtocol:@protocol(UMAppLifecycleService)] registerAppLifecycleListener:self];
32}
33
34UM_EXPORT_METHOD_AS(addTestDevice,
35 addTestDevice:(NSString *)deviceHash
36 resolve:(UMPromiseResolveBlock)resolver
37 reject:(UMPromiseRejectBlock)rejecter)
38{
39 [FBAdSettings addTestDevice:deviceHash];
40 [_testDevices addObject:deviceHash];
41 resolver(nil);
42}
43
44UM_EXPORT_METHOD_AS(clearTestDevices,
45 clearTestDevicesWithResolver:(UMPromiseResolveBlock)resolver
46 reject:(UMPromiseRejectBlock)rejecter)
47{
48 [FBAdSettings clearTestDevices];
49 [_testDevices removeAllObjects];
50}
51
52UM_EXPORT_METHOD_AS(setLogLevel,
53 setLogLevel:(NSString *)logLevelKey
54 resolve:(UMPromiseResolveBlock)resolver
55 reject:(UMPromiseRejectBlock)rejecter)
56{
57 FBAdLogLevel logLevel = [@{
58 @"none": @(FBAdLogLevelNone),
59 @"debug": @(FBAdLogLevelDebug),
60 @"verbose": @(FBAdLogLevelVerbose),
61 @"warning": @(FBAdLogLevelWarning),
62 @"notification": @(FBAdLogLevelNotification),
63 @"error": @(FBAdLogLevelError)
64 }[logLevelKey] integerValue] ?: FBAdLogLevelLog;
65 [FBAdSettings setLogLevel:logLevel];
66 _logLevel = logLevel;
67 resolver(nil);
68}
69
70UM_EXPORT_METHOD_AS(setIsChildDirected,
71 setIsChildDirected:(BOOL)isDirected
72 resolve:(UMPromiseResolveBlock)resolver
73 reject:(UMPromiseRejectBlock)rejecter)
74{
75 [FBAdSettings setIsChildDirected:isDirected];
76 _isChildDirected = isDirected;
77 resolver(nil);
78}
79
80UM_EXPORT_METHOD_AS(setMeditationService,
81 setMediationService:(NSString *)mediationService
82 resolve:(UMPromiseResolveBlock)resolver
83 reject:(UMPromiseRejectBlock)rejecter)
84{
85 [FBAdSettings setMediationService:mediationService];
86 _mediationService = mediationService;
87 resolver(nil);
88}
89
90UM_EXPORT_METHOD_AS(setUrlPrefix,
91 setUrlPrefix:(NSString *)urlPrefix
92 resolve:(UMPromiseResolveBlock)resolver
93 reject:(UMPromiseRejectBlock)rejecter)
94{
95 [FBAdSettings setUrlPrefix:urlPrefix];
96 resolver(nil);
97}
98
99-(void)onAppForegrounded
100{
101 [FBAdSettings setIsChildDirected:_isChildDirected];
102 [FBAdSettings setMediationService:_mediationService];
103 // Calling setUrlPrefix always triggers a network request to Facebook,
104 // so we don't want to call it without need.
105 //
106 // If _urlPrefix is empty we have nothing to do (foregrounding app
107 // doesn't customize urlPrefix). If it's not empty we need to call
108 // setUrlPrefix to ensure FBAdSettings is configured properly.
109 if ([_urlPrefix length] > 0) {
110 [FBAdSettings setUrlPrefix:_urlPrefix];
111 }
112 [FBAdSettings setLogLevel:_logLevel];
113 [FBAdSettings addTestDevices:_testDevices];
114}
115
116- (void)onAppBackgrounded
117{
118 [FBAdSettings setIsChildDirected:NO];
119 [FBAdSettings setMediationService:@""];
120 _urlPrefix = FBAdSettings.urlPrefix;
121 // Calling setUrlPrefix always triggers a network request to Facebook,
122 // so we don't want to call it without need.
123 //
124 // If FBAdSettings.urlPrefix is empty we have nothing to do (backgrounding app
125 // didn't customize urlPrefix). If it's not empty we need to call
126 // setUrlPrefix to ensure FBAdSettings's configuration is appropriately
127 // cleared before yielding to another app.
128 if ([FBAdSettings.urlPrefix length] > 0) {
129 [FBAdSettings setUrlPrefix:nil];
130 }
131 [FBAdSettings setLogLevel:FBAdLogLevelLog];
132 [FBAdSettings clearTestDevices];
133}
134
135- (NSDictionary *)constantsToExport
136{
137 return @{ @"currentDeviceHash": [FBAdSettings testDeviceHash] };
138}
139
140@end