forked from segmentio/analytics-ios
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAnalytics.m
More file actions
143 lines (102 loc) · 2.97 KB
/
Copy pathAnalytics.m
File metadata and controls
143 lines (102 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Analytics.m
// Copyright 2013 Segment.io
#import "Analytics.h"
#define ANALYTICS_VERSION @"0.3.3"
@implementation Analytics {
dispatch_queue_t _serialQueue;
}
static Analytics *sharedInstance = nil;
#pragma mark - Initializiation
+ (instancetype)withSecret:(NSString *)secret
{
NSParameterAssert(secret.length > 0);
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] initWithSecret:secret];
});
return sharedInstance;
}
+ (instancetype)sharedAnalytics
{
NSAssert(sharedInstance, @"%@ sharedInstance called before withSecret", self);
return sharedInstance;
}
- (id)initWithSecret:(NSString *)secret
{
NSParameterAssert(secret.length);
if (self = [self init]) {
_secret = secret;
_providerManager = [ProviderManager withSecret:secret];
}
return self;
}
#pragma mark - Analytics API
- (void)identify:(NSString *)userId
{
[self identify:userId traits:nil context:nil];
}
- (void)identify:(NSString *)userId traits:(NSDictionary *)traits
{
[self identify:userId traits:traits context:nil];
}
- (void)identify:(NSString *)userId traits:(NSDictionary *)traits context:(NSDictionary *)context
{
[self.providerManager identify:userId traits:traits context:context];
}
- (void)track:(NSString *)event
{
[self track:event properties:nil context:nil];
}
- (void)track:(NSString *)event properties:(NSDictionary *)properties
{
[self track:event properties:properties context:nil];
}
- (void)track:(NSString *)event properties:(NSDictionary *)properties context:(NSDictionary *)context
{
NSAssert(event.length, @"%@ track requires an event name.", self);
[self.providerManager track:event properties:properties context:context];
}
- (void)screen:(NSString *)screenTitle
{
[self screen:screenTitle properties:nil context:nil];
}
- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties
{
[self screen:screenTitle properties:properties context:nil];
}
- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties context:(NSDictionary *)context
{
NSAssert(screenTitle.length, @"%@ screen requires a screenTitle.", self);
[self.providerManager screen:screenTitle properties:properties context:context];
}
#pragma mark - Application State API
- (void)applicationDidEnterBackground
{
[self.providerManager applicationDidEnterBackground];
}
- (void)applicationWillEnterForeground
{
[self.providerManager applicationWillEnterForeground];
}
- (void)applicationWillTerminate
{
[self.providerManager applicationWillTerminate];
}
- (void)applicationWillResignActive
{
[self.providerManager applicationWillResignActive];
}
- (void)applicationDidBecomeActive
{
[self.providerManager applicationDidBecomeActive];
}
#pragma mark - NSObject
- (void)reset
{
[self.providerManager reset];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<Analytics secret:%@>", self.secret];
}
@end