Skip to content

Commit

Permalink
Merge pull request #55 from rudderlabs/feature/RudderOption
Browse files Browse the repository at this point in the history
  • Loading branch information
arnab-p committed May 11, 2021
2 parents c64ea4f + 4e1eab7 commit 7ca189e
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 11 deletions.
28 changes: 21 additions & 7 deletions Example/Rudder/_AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
#import <Rudder/Rudder.h>
#import <AdSupport/ASIdentifierManager.h>

static NSString *DATA_PLANE_URL = @"https://a4f291d1e130.ngrok.io";
static NSString *WRITE_KEY = @"1ZTkZgCMnZyXeWsFbcjGsOx4jnv";
static NSString *DATA_PLANE_URL = @"https://22ca4837f6ce.ngrok.io";
static NSString *WRITE_KEY = @"1pcZviVxgjd3rTUUmaTUBinGH0A";

@implementation _AppDelegate

Expand All @@ -20,17 +20,31 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
[RSClient setAnonymousId:@"6a276137-2fe4-4682-a8f7-77f701f63ea0"];

// Override point for customization after application launch.
RSOption *defaultOption = [[RSOption alloc]init];
// adding an integration into integrations object directly by specifying its name
[defaultOption putIntegration:@"Amplitude" isEnabled:YES];
[defaultOption putIntegration:@"MoEngage" isEnabled:YES];
[defaultOption putIntegration:@"All" isEnabled:NO];
// adding an integration into integrations object using its Factory object
//[defaultOption putIntegrationWithFactory:[RudderMoengageFactory instance] isEnabled:NO];
RSConfigBuilder *builder = [[RSConfigBuilder alloc] init];
[builder withDataPlaneURL:[[NSURL alloc] initWithString:DATA_PLANE_URL]];
[builder withLoglevel:RSLogLevelDebug];
[builder withTrackLifecycleEvens:NO];
[builder withRecordScreenViews:NO];
[RSClient getInstance:WRITE_KEY config:[builder build]];
// creating the client object by passing the options object
[RSClient getInstance:WRITE_KEY config:[builder build] options:defaultOption];
RSOption *option = [[RSOption alloc]init];
[option putIntegration:@"Amplitude" isEnabled:YES];
[option putIntegration:@"MixPanel" isEnabled:NO];
[[RSClient sharedInstance] track:@"simple_track_event"];
[[RSClient sharedInstance] track:@"simple_track_with_props" properties:@{
@"key_1" : @"value_1",
@"key_2" : @"value_2"
} options:option];



// [[[RSClient sharedInstance] getContext] putDeviceToken:[self getDeviceToken]];
// [[[RSClient sharedInstance] getContext] putAdvertisementId:[self getIDFA]];
[[[RSClient sharedInstance] getContext] putDeviceToken:[self getDeviceToken]];
[[[RSClient sharedInstance] getContext] putAdvertisementId:[self getIDFA]];

return YES;
}
Expand Down
3 changes: 3 additions & 0 deletions Rudder/RSClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype) getInstance;
+ (instancetype) getInstance:(NSString*) writeKey;
+ (instancetype) getInstance:(NSString*) writeKey config:(RSConfig*) config;
+ (instancetype) getInstance:(NSString *)writeKey config: (RSConfig*) config options: (RSOption*) options;

- (void) trackMessage:(RSMessage*) message __attribute((deprecated("Discontinuing support. Use track method instead.")));
- (void) trackWithBuilder:(RSMessageBuilder*) builder __attribute((deprecated("Discontinuing support. Use track method instead.")));
Expand Down Expand Up @@ -63,6 +64,8 @@ NS_ASSUME_NONNULL_BEGIN

+ (instancetype _Nullable) sharedInstance;

+ (RSOption*) getDefaultOptions;

- (void)trackLifecycleEvents:(NSDictionary *)launchOptions;

- (RSContext *) getContext;
Expand Down
10 changes: 10 additions & 0 deletions Rudder/RSClient.m
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

static RSClient *_instance = nil;
static RSEventRepository *_repository = nil;
static RSOption* _defaultOptions = nil;

@implementation RSClient

Expand All @@ -26,6 +27,11 @@ + (instancetype) getInstance:(NSString *)writeKey {
return [RSClient getInstance:writeKey config:[[RSConfig alloc] init]];
}

+ (instancetype) getInstance:(NSString *)writeKey config: (RSConfig*) config options: (RSOption*) options {
_defaultOptions = options;
return [RSClient getInstance:writeKey config:config];
}

+ (instancetype) getInstance: (NSString *) writeKey config: (RSConfig*) config {
if (_instance == nil) {
static dispatch_once_t onceToken;
Expand Down Expand Up @@ -260,6 +266,10 @@ + (instancetype)sharedInstance {
return _instance;
}

+ (RSOption*) getDefaultOptions {
return _defaultOptions;
}

+ (void)setAnonymousId:(NSString *)anonymousId {
RSPreferenceManager *preferenceManager = [RSPreferenceManager getInstance];
[preferenceManager saveAnonymousId:anonymousId];
Expand Down
45 changes: 41 additions & 4 deletions Rudder/RSEventRepository.m
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,24 @@ - (void) dump:(RSMessage *)message {
if (message == nil || !self->isSDKEnabled) {
return;
}

message.integrations = @{@"All": @YES};
if([message.integrations count]==0){
if(RSClient.getDefaultOptions!=nil &&
RSClient.getDefaultOptions.integrations!=nil &&
[RSClient.getDefaultOptions.integrations count]!=0){
message.integrations = RSClient.getDefaultOptions.integrations;
}
else{
message.integrations = @{@"All": @YES};
}
}
// If `All` is absent in the integrations object we will set it to true for making All is true by default
if(message.integrations[@"All"]==nil)
{
NSMutableDictionary<NSString *, NSObject *>* mutableIntegrations = [message.integrations mutableCopy];
[mutableIntegrations setObject:@YES forKey:@"All"];
message.integrations = mutableIntegrations;

}
[self makeFactoryDump: message];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[message dict] options:0 error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
Expand All @@ -336,11 +352,32 @@ - (void) dump:(RSMessage *)message {
- (void) makeFactoryDump:(RSMessage *)message {
if (self->isFactoryInitialized) {
[RSLogger logDebug:@"dumping message to native sdk factories"];
NSDictionary<NSString*, NSObject*>* integrationOptions = message.integrations;
// If All is set to true we will dump to all the integrations which are not set to false
if([(NSNumber*)integrationOptions[@"All"] boolValue])
{
for (NSString *key in [self->integrationOperationMap allKeys]) {
id<RSIntegration> integration = [self->integrationOperationMap objectForKey:key];
if (integration != nil)
{
if(integrationOptions[key]==nil ||[(NSNumber*)integrationOptions[key] boolValue])
{
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"dumping for %@", key]];
[integration dump:message];
}
}
}
return;
}
// Since All is not set to true we will dump to all the integrations which are set to true
for (NSString *key in [self->integrationOperationMap allKeys]) {
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"dumping for %@", key]];
id<RSIntegration> integration = [self->integrationOperationMap objectForKey:key];
if (integration != nil) {
[integration dump:message];
if([(NSNumber*)integrationOptions[key] boolValue])
{
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"dumping for %@", key]];
[integration dump:message];
}
}
}
} else {
Expand Down
1 change: 1 addition & 0 deletions Rudder/RSMessageBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype) setUserProperty: (NSDictionary<NSString*, NSObject*>*) userProperty;
- (instancetype) setRSOption: (RSOption*) option;
- (instancetype) setTraits: (RSTraits*) traits;
- (instancetype) setIntegrations:(NSDictionary<NSString *, NSObject *>*) integrations;

- (RSMessage*) build;

Expand Down
9 changes: 9 additions & 0 deletions Rudder/RSMessageBuilder.m
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,19 @@ - (instancetype) setRSOption:(RSOption *)option {
}

[message setRudderOption:option];
[self setIntegrations:option.integrations];

return self;
}

- (instancetype) setIntegrations:(NSDictionary<NSString *, NSObject *>*) integrations {
if (message == nil) {
message = [[RSMessage alloc] init];
}
message.integrations = integrations;
return self;
}

- (instancetype)setTraits:(RSTraits *)traits {
[RSElementCache updateTraits: traits];
return self;
Expand Down
4 changes: 4 additions & 0 deletions Rudder/RSOption.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@

NS_ASSUME_NONNULL_BEGIN

@protocol RSIntegrationFactory;
@interface RSOption : NSObject

@property (nonatomic, strong) NSMutableArray<NSMutableDictionary<NSString*, NSObject*>*>* externalIds;
@property (nonatomic, strong) NSMutableDictionary<NSString*, NSObject*>* integrations;

- (instancetype) putExternalId: (NSString*) type withId: (NSString*) idValue;
- (instancetype) putIntegration: (NSString*) type isEnabled: (BOOL) enabled;
- (instancetype) putIntegrationWithFactory: (id<RSIntegrationFactory>) factory isEnabled: (BOOL) enabled;

@end

Expand Down
13 changes: 13 additions & 0 deletions Rudder/RSOption.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

#import "RSOption.h"
#import "RSConfig.h"

@implementation RSOption

Expand All @@ -15,6 +16,7 @@ - (instancetype)init
self = [super init];
if (self) {
_externalIds = nil;
_integrations = [[NSMutableDictionary alloc] init];
}
return self;
}
Expand Down Expand Up @@ -58,4 +60,15 @@ - (instancetype)putExternalId:(NSString *)type withId:(NSString *)idValue {
return self;
}

- (instancetype) putIntegration: (NSString*) type isEnabled: (BOOL) enabled {
[_integrations setValue:[NSNumber numberWithBool:enabled] forKey:type];
return self;
}

- (instancetype) putIntegrationWithFactory:(id<RSIntegrationFactory>)factory isEnabled:(BOOL)enabled {
[_integrations setValue:[NSNumber numberWithBool:enabled] forKey: factory.key];
return self;
}


@end

0 comments on commit 7ca189e

Please sign in to comment.