Skip to content

Commit c6eefa8

Browse files
authored
Merge pull request #20 from steve-rock/master
Fix permission not showing up on iOS15
2 parents 36da8b1 + 66352e8 commit c6eefa8

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

ios/TrackingTransparency.m

+27-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#import "TrackingTransparency.h"
22
#import <AppTrackingTransparency/AppTrackingTransparency.h>
33

4+
@interface TrackingTransparency ()
5+
@property (weak) id _observer;
6+
@end
7+
48
@implementation TrackingTransparency
59

610
RCT_EXPORT_MODULE()
@@ -16,13 +20,29 @@ @implementation TrackingTransparency
1620

1721
RCT_EXPORT_METHOD(requestTrackingPermission:(RCTPromiseResolveBlock)resolve rejector:(RCTPromiseRejectBlock)reject)
1822
{
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+
});
2646
}
2747

2848
+ (NSString *) convertTrackingStatusToString:(ATTrackingManagerAuthorizationStatus) status API_AVAILABLE(ios(14)) {

0 commit comments

Comments
 (0)