Skip to content

Commit

Permalink
Merge pull request #3 from adeven/newSDKs20140205
Browse files Browse the repository at this point in the history
New SDKs: adjust_ios_sdk 2.2.0 and adjust_android_sdk 2.1.6
  • Loading branch information
wellle committed Feb 5, 2014
2 parents f378b5c + ad8b9b5 commit 3036bcb
Show file tree
Hide file tree
Showing 17 changed files with 201 additions and 134 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

@property (nonatomic, copy) NSString *environment;
@property (nonatomic, assign) BOOL bufferEvents;
@property (nonatomic, assign) BOOL trackMacMd5;

+ (AIActivityHandler *)handlerWithAppToken:(NSString *)appToken;
- (id)initWithAppToken:(NSString *)appToken;
Expand Down
18 changes: 12 additions & 6 deletions src/Assets/AdjustIo/Data/SDK/iOS/AdjustIo/AIActivityHandler.m
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,12 @@ - (id)initWithAppToken:(NSString *)yourAppToken {

[self addNotificationObserver];
self.internalQueue = dispatch_queue_create(kInternalQueueName, DISPATCH_QUEUE_SERIAL);
self.environment = @"unknown"; // default value
self.clientSdk = AIUtil.clientSdk;

// default values
self.environment = @"unknown";
self.trackMacMd5 = YES;

dispatch_async(self.internalQueue, ^{
[self initInternal:yourAppToken];
});
Expand Down Expand Up @@ -264,7 +267,7 @@ - (BOOL)updateActivityState {
double lastInterval = now - self.activityState.lastActivity;
if (lastInterval < 0) {
[AILogger error:@"Time travel!"];
self.activityState.lastInterval = now;
self.activityState.lastActivity = now;
return YES;
}

Expand All @@ -280,11 +283,11 @@ - (BOOL)updateActivityState {

- (void)readActivityState {
@try {
NSString *filename = [self activityStateFilename];
NSString *filename = self.activityStateFilename;
id object = [NSKeyedUnarchiver unarchiveObjectWithFile:filename];
if ([object isKindOfClass:[AIActivityState class]]) {
self.activityState = object;
[AILogger debug:@"Read activity state: %@", self.activityState];
[AILogger debug:@"Read activity state: %@ uuid:%@", self.activityState, self.activityState.uuid];
return;
} else if (object == nil) {
[AILogger verbose:@"Activity state file not found"];
Expand All @@ -300,7 +303,7 @@ - (void)readActivityState {
}

- (void)writeActivityState {
NSString *filename = [self activityStateFilename];
NSString *filename = self.activityStateFilename;
BOOL result = [NSKeyedArchiver archiveRootObject:self.activityState toFile:filename];
if (result == YES) {
[AIUtil excludeFromBackup:filename];
Expand Down Expand Up @@ -330,12 +333,15 @@ - (void)injectGeneralAttributes:(AIPackageBuilder *)builder {
builder.userAgent = self.userAgent;
builder.clientSdk = self.clientSdk;
builder.appToken = self.appToken;
builder.macShortMd5 = self.macShortMd5;
builder.macSha1 = self.macSha1;
builder.trackingEnabled = self.trackingEnabled;
builder.idForAdvertisers = self.idForAdvertisers;
builder.fbAttributionId = self.fbAttributionId;
builder.environment = self.environment;

if (self.trackMacMd5) {
builder.macShortMd5 = self.macShortMd5;
}
}

# pragma mark - timer
Expand Down
8 changes: 6 additions & 2 deletions src/Assets/AdjustIo/Data/SDK/iOS/AdjustIo/AIActivityState.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@

@interface AIActivityState : NSObject <NSCoding>

// persistent data
@property (nonatomic, copy) NSString *uuid;

// global counters
@property (nonatomic, assign) int eventCount;
@property (nonatomic, assign) int sessionCount;
Expand All @@ -19,11 +22,12 @@
@property (nonatomic, assign) double sessionLength; // all durations in seconds
@property (nonatomic, assign) double timeSpent;
@property (nonatomic, assign) double lastActivity; // all times in seconds since 1970

@property (nonatomic, assign) double createdAt;

// not persisted, only injected
@property (nonatomic, assign) double lastInterval;

- (void)resetSessionAttributes:(long)now;
- (void)resetSessionAttributes:(double)now;

- (void)injectSessionAttributes:(AIPackageBuilder *)packageBilder;
- (void)injectEventAttributes:(AIPackageBuilder *)packageBilder;
Expand Down
14 changes: 13 additions & 1 deletion src/Assets/AdjustIo/Data/SDK/iOS/AdjustIo/AIActivityState.m
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#import "AIActivityState.h"
#import "AIPackageBuilder.h"
#import "UIDevice+AIAdditions.h"


#pragma mark public implementation
Expand All @@ -17,6 +18,9 @@ - (id)init {
self = [super init];
if (self == nil) return nil;

// create UUID for new devices
self.uuid = [UIDevice.currentDevice aiCreateUuid];

self.eventCount = 0;
self.sessionCount = 0;
self.subsessionCount = -1; // -1 means unknown
Expand All @@ -29,7 +33,7 @@ - (id)init {
return self;
}

- (void)resetSessionAttributes:(long)now {
- (void)resetSessionAttributes:(double)now {
self.subsessionCount = 1;
self.sessionLength = 0;
self.timeSpent = 0;
Expand Down Expand Up @@ -67,6 +71,12 @@ - (id)initWithCoder:(NSCoder *)decoder {
self.timeSpent = [decoder decodeDoubleForKey:@"timeSpent"];
self.createdAt = [decoder decodeDoubleForKey:@"createdAt"];
self.lastActivity = [decoder decodeDoubleForKey:@"lastActivity"];
self.uuid = [decoder decodeObjectForKey:@"uuid"];

// create UUID for migrating devices
if (self.uuid == nil) {
self.uuid = [UIDevice.currentDevice aiCreateUuid];
}

self.lastInterval = -1;

Expand All @@ -81,6 +91,7 @@ - (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeDouble:self.timeSpent forKey:@"timeSpent"];
[encoder encodeDouble:self.createdAt forKey:@"createdAt"];
[encoder encodeDouble:self.lastActivity forKey:@"lastActivity"];
[encoder encodeObject:self.uuid forKey:@"uuid"];
}


Expand All @@ -92,6 +103,7 @@ - (void)injectGeneralAttributes:(AIPackageBuilder *)builder {
builder.sessionLength = self.sessionLength;
builder.timeSpent = self.timeSpent;
builder.createdAt = self.createdAt;
builder.uuid = self.uuid;
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@
- (NSString *)aiUrlEncode;
- (NSString *)aiRemoveColons;

+ (NSString *)aiJoin:(NSString *)strings, ...;

@end
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,18 @@ - (NSString *)aiRemoveColons {
return [self stringByReplacingOccurrencesOfString:@":" withString:@""];
}

+ (NSString *)aiJoin:(NSString *)first, ... {
NSString *iter, *result = first;
va_list strings;
va_start(strings, first);

while ((iter = va_arg(strings, NSString*))) {
NSString *capitalized = iter.capitalizedString;
result = [result stringByAppendingString:capitalized];
}

va_end(strings);
return result;
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@
- (NSString *)aiMacAddress;
- (NSString *)aiDeviceType;
- (NSString *)aiDeviceName;
- (NSString *)aiCreateUuid;

@end
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,74 @@
#import "UIDevice+AIAdditions.h"
#import "NSString+AIAdditions.h"

#import <AdSupport/ASIdentifierManager.h>
#import <sys/socket.h>
#import <sys/sysctl.h>
#import <net/if.h>
#import <net/if_dl.h>

#if !ADJUST_NO_IDFA
#import <AdSupport/ASIdentifierManager.h>
#endif

@implementation UIDevice(AIAdditions)

- (BOOL)aiTrackingEnabled {
if (NSClassFromString(@"ASIdentifierManager")) {
return ASIdentifierManager.sharedManager.advertisingTrackingEnabled;
} else {
#if !ADJUST_NO_IDFA
NSString *className = [NSString aiJoin:@"A", @"S", @"identifier", @"manager", nil];
NSString *keyManager = [NSString aiJoin:@"shared", @"manager", nil];
NSString *keyEnabled = [NSString aiJoin:@"is", @"advertising", @"tracking", @"enabled", nil];

Class class = NSClassFromString(className);
if (class) {
@try {
SEL selManager = NSSelectorFromString(keyManager);
SEL selEnabled = NSSelectorFromString(keyEnabled);

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
id manager = [class performSelector:selManager];
BOOL enabled = (BOOL)[manager performSelector:selEnabled];
#pragma clang diagnostic pop

return enabled;
} @catch (NSException *e) {
return NO;
}
} else
#endif
{
return NO;
}
}

- (NSString *)aiIdForAdvertisers {
if (NSClassFromString(@"ASIdentifierManager")) {
return ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString;
} else {
#if !ADJUST_NO_IDFA
NSString *className = [NSString aiJoin:@"A", @"S", @"identifier", @"manager", nil];
NSString *keyManager = [NSString aiJoin:@"shared", @"manager", nil];
NSString *keyIdentifier = [NSString aiJoin:@"advertising", @"identifier", nil];
NSString *keyString = [NSString aiJoin:@"UUID", @"string", nil];

Class class = NSClassFromString(className);
if (class) {
@try {
SEL selManager = NSSelectorFromString(keyManager);
SEL selIdentifier = NSSelectorFromString(keyIdentifier);
SEL selString = NSSelectorFromString(keyString);

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
id manager = [class performSelector:selManager];
id identifier = [manager performSelector:selIdentifier];
NSString *string = [identifier performSelector:selString];
#pragma clang diagnostic pop

return string;
} @catch (NSException *e) {
return @"";
}
} else
#endif
{
return @"";
}
}
Expand Down Expand Up @@ -101,4 +149,13 @@ - (NSString *)aiDeviceName {
return machine;
}

- (NSString *)aiCreateUuid {
CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
CFStringRef stringRef = CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
NSString *uuidString = (__bridge_transfer NSString*)stringRef;
NSString *lowerUuid = [uuidString lowercaseString];
CFRelease(newUniqueId);
return lowerUuid;
}

@end
16 changes: 1 addition & 15 deletions src/Assets/AdjustIo/Data/SDK/iOS/AdjustIo/AILogger.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,13 @@ typedef enum {
// A simple logger with multiple log levels.
@interface AILogger : NSObject

@property (copy) NSString *logTag;
@property (assign) AILogLevel logLevel;

// convenience methods
+ (void)setLogTag:(NSString *)logTag;
+ (void)setLogLevel:(AILogLevel)logLevel;

+ (void)verbose:(NSString *)message, ...;
+ (void)debug: (NSString *)message, ...;
+ (void)info: (NSString *)message, ...;
+ (void)warn: (NSString *)message, ...;
+ (void)error: (NSString *)message, ...;
+ (void)assert: (NSString *)message, ...;

+ (AILogger *)loggerWithTag:(NSString *)logTag;
- (id)initWithTag:(NSString *)logTag;

- (void)verbose:(NSString *)message, ...;
- (void)debug: (NSString *)message, ...;
- (void)info: (NSString *)message, ...;
- (void)warn: (NSString *)message, ...;
- (void)error: (NSString *)message, ...;
- (void)assert: (NSString *)message, ...;

@end
Loading

0 comments on commit 3036bcb

Please sign in to comment.