1
1
#import " TrackingTransparency.h"
2
2
#import < AppTrackingTransparency/AppTrackingTransparency.h>
3
3
4
+ @interface TrackingTransparency ()
5
+ @property (weak ) id _observer;
6
+ @end
7
+
4
8
@implementation TrackingTransparency
5
9
6
10
RCT_EXPORT_MODULE ()
@@ -16,13 +20,29 @@ @implementation TrackingTransparency
16
20
17
21
RCT_EXPORT_METHOD (requestTrackingPermission:(RCTPromiseResolveBlock)resolve rejector:(RCTPromiseRejectBlock)reject)
18
22
{
19
- if (@available (iOS 14 , *)) {
20
- [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler: ^(ATTrackingManagerAuthorizationStatus status) {
21
- resolve ([TrackingTransparency convertTrackingStatusToString: status]);
22
- }];
23
- } else {
24
- resolve (@" unavailable" );
25
- }
23
+ dispatch_async (dispatch_get_main_queue (), ^{
24
+ if (@available (iOS 14 , *)) {
25
+ if (UIApplication.sharedApplication .applicationState == UIApplicationStateActive) {
26
+ [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler: ^(ATTrackingManagerAuthorizationStatus status) {
27
+ resolve ([TrackingTransparency convertTrackingStatusToString: status]);
28
+ }];
29
+ }
30
+ else {
31
+ __weak TrackingTransparency *weakSelf = self;
32
+
33
+ self._observer = [[NSNotificationCenter defaultCenter ] addObserverForName: UIApplicationDidBecomeActiveNotification object: nil queue: [NSOperationQueue mainQueue ] usingBlock: ^(NSNotification * _Nonnull note) {
34
+
35
+ [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler: ^(ATTrackingManagerAuthorizationStatus status) {
36
+ resolve ([TrackingTransparency convertTrackingStatusToString: status]);
37
+ }];
38
+
39
+ [[NSNotificationCenter defaultCenter ] removeObserver: weakSelf._observer];
40
+ }];
41
+ }
42
+ } else {
43
+ resolve (@" unavailable" );
44
+ }
45
+ });
26
46
}
27
47
28
48
+ (NSString *) convertTrackingStatusToString : (ATTrackingManagerAuthorizationStatus) status API_AVAILABLE(ios(14 )) {
0 commit comments