Skip to content

Commit 9e9fd9a

Browse files
[release] 1.39.0
1 parent 6ce692b commit 9e9fd9a

25 files changed

+132
-36
lines changed

Branch-SDK/BNCAppGroupsData.m

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,6 @@ - (void)saveAppClipData {
8989
[self saveObject:url forKey:@"BranchAppClipURL"];
9090
[self saveObject:token forKey:@"BranchAppClipToken"];
9191
[self saveObject:bundleToken forKey:@"BranchAppClipBundleToken"];
92-
93-
NSString *logMessage = [NSString stringWithFormat:@"Saving App Clip Data: %@, %@, %@, %@, %@", bundleId, installDate, url, token, bundleToken];
94-
BNCLogDebug(logMessage);
9592
}
9693
}
9794

@@ -106,9 +103,6 @@ - (BOOL)loadAppClipData {
106103
self.bundleToken = [self getStringForKey:@"BranchAppClipBundleToken"];
107104

108105
if (self.bundleID && self.installDate && self.url && self.branchToken && self.bundleToken) {
109-
NSString *logMessage = [NSString stringWithFormat:@"Loading App Clip Data: %@, %@, %@, %@, %@", self.bundleID, self.installDate, self.url, self.branchToken, self.bundleToken];
110-
BNCLogDebug(logMessage);
111-
112106
return YES;
113107
} else {
114108
return NO;

Branch-SDK/BNCConfig.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@
1111
NSString * const BNC_API_BASE_URL = @"https://api2.branch.io";
1212
NSString * const BNC_API_VERSION = @"v1";
1313
NSString * const BNC_LINK_URL = @"https://bnc.lt";
14-
NSString * const BNC_SDK_VERSION = @"1.38.0";
14+
NSString * const BNC_SDK_VERSION = @"1.39.0";

Branch-SDK/BNCDeviceInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
@property (nonatomic, copy, readwrite) NSString *advertiserId;
3636
@property (nonatomic, copy, readwrite) NSString *vendorId;
37+
@property (nonatomic, copy, readwrite) NSString *optedInStatus;
3738
@property (nonatomic, assign, readwrite) BOOL isAdTrackingEnabled;
3839
@property (nonatomic, assign, readwrite) BOOL unidentifiedDevice;
3940
- (NSString *)localIPAddress;

Branch-SDK/BNCDeviceInfo.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ - (NSString *)userAgentString {
146146

147147
// IDFA should never be cached
148148
- (void)checkAdvertisingIdentifier {
149+
self.optedInStatus = [BNCSystemObserver attOptedInStatus];
149150
self.isAdTrackingEnabled = [BNCSystemObserver adTrackingSafe];
150151
self.advertiserId = [BNCSystemObserver getAdId];
151152
BOOL ignoreIdfa = [BNCPreferenceHelper preferenceHelper].isDebug;
@@ -185,6 +186,7 @@ - (NSDictionary *)v2dictionary {
185186
}
186187
[dictionary bnc_safeSetObject:[self localIPAddress] forKey:@"local_ip"];
187188

189+
[dictionary bnc_safeSetObject:[self optedInStatus] forKey:@"opted_in_status"];
188190
if (!self.isAdTrackingEnabled) {
189191
dictionary[@"limit_ad_tracking"] = @(YES);
190192
}

Branch-SDK/BNCPreferenceHelper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
3535
@property (assign, nonatomic) BOOL isDebug;
3636
@property (assign, nonatomic) BOOL checkedFacebookAppLinks;
3737
@property (assign, nonatomic) BOOL checkedAppleSearchAdAttribution;
38+
@property (nonatomic, assign, readwrite) BOOL appleAttributionTokenChecked;
3839
@property (assign, nonatomic) NSInteger retryCount;
3940
@property (assign, nonatomic) NSTimeInterval retryInterval;
4041
@property (assign, nonatomic) NSTimeInterval timeout;

Branch-SDK/BNCPreferenceHelper.m

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ @interface BNCPreferenceHelper () {
5757
@property (strong, nonatomic) NSMutableDictionary *creditsDictionary;
5858
@property (strong, nonatomic) NSMutableDictionary *requestMetadataDictionary;
5959
@property (strong, nonatomic) NSMutableDictionary *instrumentationDictionary;
60+
6061
@end
6162

6263
@implementation BNCPreferenceHelper
@@ -383,6 +384,14 @@ - (BOOL) appleSearchAdNeedsSend {
383384
return [self readBoolFromDefaults:@"_appleSearchAdNeedsSend"];
384385
}
385386

387+
- (void)setAppleAttributionTokenChecked:(BOOL)appleAttributionTokenChecked {
388+
[self writeBoolToDefaults:@"_appleAttributionTokenChecked" value:appleAttributionTokenChecked];
389+
}
390+
391+
- (BOOL)appleAttributionTokenChecked {
392+
return [self readBoolFromDefaults:@"_appleAttributionTokenChecked"];
393+
}
394+
386395
- (NSString*) lastSystemBuildVersion {
387396
if (!_lastSystemBuildVersion) {
388397
_lastSystemBuildVersion = [self readStringFromDefaults:@"_lastSystemBuildVersion"];

Branch-SDK/BNCSKAdNetwork.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ + (BNCSKAdNetwork *)sharedInstance {
3333
- (instancetype)init {
3434
self = [super init];
3535
if (self) {
36-
// by default, we send updates to SKAdNetwork for up to 3 days after install
37-
self.maxTimeSinceInstall = 3600.0 * 24.0 * 3.0;
36+
// by default, we send updates to SKAdNetwork for up a day after install
37+
self.maxTimeSinceInstall = 3600.0 * 24.0;
3838
self.installDate = [BNCApplication currentApplication].currentInstallDate;
3939

4040
self.skAdNetworkClass = NSClassFromString(@"SKAdNetwork");

Branch-SDK/BNCServerInterface.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ - (void)updateDeviceInfoToMutableDictionary:(NSMutableDictionary *)dict {
527527
[self safeSetValue:[deviceInfo connectionType] forKey:@"connection_type" onDict:dict];
528528
[self safeSetValue:[deviceInfo userAgentString] forKey:@"user_agent" onDict:dict];
529529

530+
[self safeSetValue:[deviceInfo optedInStatus] forKey:BRANCH_REQUEST_KEY_OPTED_IN_STATUS onDict:dict];
530531
[self safeSetValue:@(deviceInfo.isAdTrackingEnabled) forKey:BRANCH_REQUEST_KEY_AD_TRACKING_ENABLED onDict:dict];
531532

532533
[self safeSetValue:deviceInfo.applicationVersion forKey:@"app_version" onDict:dict];

Branch-SDK/BNCSystemObserver.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
+ (NSNumber *)getScreenHeight;
3030
+ (BOOL)isSimulator;
3131
+ (BOOL)adTrackingSafe;
32-
+ (NSString*) getAdId;
32+
+ (NSString *)getAdId;
33+
+ (NSString *)attOptedInStatus;
34+
+ (NSString *)appleAttributionToken;
3335

3436
@end

Branch-SDK/BNCSystemObserver.m

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@
1919
#import <sys/utsname.h>
2020
#endif
2121

22+
#if !TARGET_OS_TV
23+
#if __has_feature(modules)
24+
@import AdServices;
25+
#else
26+
#import <AdServices/AdServices.h>
27+
#endif
28+
#endif
29+
2230
@implementation BNCSystemObserver
2331

2432
+ (NSString *)getUniqueHardwareId:(BOOL *)isReal
@@ -46,10 +54,20 @@ + (NSString *)getUniqueHardwareId:(BOOL *)isReal
4654
return uid;
4755
}
4856

49-
+ (NSString*) getAdId {
50-
51-
// This macro is unnecessary since this code only runs if AdSupport.framework is included
52-
// However, some clients feel more comfortable with no IDFA code at all.
57+
+ (NSString *)appleAttributionToken {
58+
#if !TARGET_OS_TV
59+
if (@available(iOS 14.3, *)) {
60+
NSError *error;
61+
NSString *appleAttributionToken = [AAAttribution attributionTokenWithError:&error];
62+
if (!error) {
63+
return appleAttributionToken;
64+
}
65+
}
66+
#endif
67+
return nil;
68+
}
69+
70+
+ (NSString *)getAdId {
5371
#ifdef BRANCH_EXCLUDE_IDFA_CODE
5472
return nil;
5573

@@ -75,10 +93,43 @@ + (NSString*) getAdId {
7593
#endif
7694
}
7795

78-
+ (BOOL)adTrackingSafe {
96+
// Returns AppTrackingTransparency status. It does not trigger the prompt.
97+
+ (NSString *)attOptedInStatus {
98+
NSString *statusString = @"unavailable";
99+
100+
#ifdef BRANCH_EXCLUDE_ATT_STATUS_CODE
101+
#else
102+
103+
Class ATTrackingManagerClass = NSClassFromString(@"ATTrackingManager");
104+
if (ATTrackingManagerClass) {
105+
SEL trackingAuthorizationStatusSelector = NSSelectorFromString(@"trackingAuthorizationStatus");
106+
unsigned long status = ((unsigned long (*)(id, SEL))[ATTrackingManagerClass methodForSelector:trackingAuthorizationStatusSelector])(ATTrackingManagerClass, trackingAuthorizationStatusSelector);
107+
108+
// map ATT status to string values
109+
switch (status) {
110+
case 0:
111+
statusString = @"not_determined";
112+
break;
113+
case 1:
114+
statusString = @"restricted";
115+
break;
116+
case 2:
117+
statusString = @"denied";
118+
break;
119+
case 3:
120+
statusString = @"authorized";
121+
break;
122+
default:
123+
break;
124+
}
125+
}
79126

80-
// This macro is unnecessary since this code only runs if AdSupport.framework is included
81-
// However, some clients feel more comfortable with no IDFA code at all.
127+
#endif
128+
return statusString;
129+
}
130+
131+
// on iOS 14+ this value is always NO
132+
+ (BOOL)adTrackingSafe {
82133
#ifdef BRANCH_EXCLUDE_IDFA_CODE
83134
return NO;
84135

0 commit comments

Comments
 (0)