12
12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
See the License for the specific language governing permissions and
14
14
limitations under the License.
15
- */
15
+ */
16
16
17
17
#import " GAIHandler.h"
18
18
#import " GAI.h"
@@ -27,6 +27,8 @@ @implementation GAIHandler
27
27
bool startSessionOnNextHit = false ;
28
28
bool endSessionOnNextHit = false ;
29
29
NSDictionary *campaignData;
30
+ NSMutableDictionary *customMetrics = nil ;
31
+ NSMutableDictionary *customDimensions= nil ;
30
32
31
33
GAI* shared_instance () {
32
34
return [GAI sharedInstance ];
@@ -106,35 +108,55 @@ void setBool(const char * parameterName, const BOOL isValue) {
106
108
107
109
void set (const char * parameterName, const char * value ) {
108
110
id <GAITracker> tracker = [[GAI sharedInstance ] defaultTracker ];
109
-
111
+
110
112
[tracker set: [NSString stringWithUTF8String: parameterName]
111
- value: [NSString stringWithUTF8String: value ]];
113
+ value: [NSString stringWithUTF8String: value ]];
112
114
}
113
115
114
116
NSString * get (const char * parameterName) {
115
117
id tracker = [[GAI sharedInstance ] defaultTracker ];
116
118
return [tracker get: [NSString stringWithUTF8String: parameterName]];
117
119
}
118
120
119
- void setCustomDimensionOnTracker (int index, char * value) {
120
- id tracker = [[GAI sharedInstance ] defaultTracker ];
121
- [tracker set: [GAIFields customDimensionForIndex: index]
122
- value: [NSString stringWithUTF8String: value]];
121
+ void addCustomDimensionToDictionary (int index, char * value){
122
+ if (!customDimensions) {
123
+ customDimensions = [[NSMutableDictionary alloc ] initWithCapacity: 20 ];
124
+ }
125
+ customDimensions[@(index)] = @(value);
123
126
}
124
127
125
- void setCustomMetricOnTracker (int index, char * value) {
126
- id tracker = [[GAI sharedInstance ] defaultTracker ];
127
- [tracker set: [GAIFields customMetricForIndex: index]
128
- value: [NSString stringWithUTF8String: value]];
128
+ void addCustomMetricToDictionary (int index, char * value){
129
+ if (!customMetrics) {
130
+ customMetrics = [[NSMutableDictionary alloc ] initWithCapacity: 20 ];
131
+ }
132
+ customMetrics[@(index)] = @(value);
133
+ }
134
+
135
+ + (void ) setCustomDimensionsOnBuilder : (GAIDictionaryBuilder*)builder {
136
+ for (id key in customDimensions) {
137
+ NSString * string = [customDimensions objectForKey: key];
138
+ [builder set: string
139
+ forKey: [GAIFields customDimensionForIndex: [key intValue ]]];
140
+ }
141
+ customDimensions = nil ;
142
+ }
143
+
144
+ + (void ) setCustomMetricsOnBuilder : (GAIDictionaryBuilder*)builder {
145
+ for (id key in customMetrics) {
146
+ NSString * string = [customMetrics objectForKey: key];
147
+ [builder set: string
148
+ forKey: [GAIFields customMetricForIndex: [key intValue ]]];
149
+ }
150
+ customMetrics = nil ;
129
151
}
130
152
131
153
void buildCampaignParametersDictionary (const char * source, const char * medium, const char * name, const char * content, const char * keyword) {
132
154
campaignData = [NSDictionary dictionaryWithObjectsAndKeys:
133
- [NSString stringWithUTF8String: source], kGAICampaignSource ,
134
- [NSString stringWithUTF8String: medium], kGAICampaignMedium ,
135
- [NSString stringWithUTF8String: name], kGAICampaignName ,
136
- [NSString stringWithUTF8String: content], kGAICampaignContent ,
137
- [NSString stringWithUTF8String: keyword], kGAICampaignKeyword , nil ];
155
+ [NSString stringWithUTF8String: source], kGAICampaignSource ,
156
+ [NSString stringWithUTF8String: medium], kGAICampaignMedium ,
157
+ [NSString stringWithUTF8String: name], kGAICampaignName ,
158
+ [NSString stringWithUTF8String: content], kGAICampaignContent ,
159
+ [NSString stringWithUTF8String: keyword], kGAICampaignKeyword , nil ];
138
160
hasCampaignParameters = true ;
139
161
}
140
162
@@ -150,7 +172,7 @@ + (void) addAdditionalParametersToBuilder: (GAIDictionaryBuilder*)builder {
150
172
endSessionOnNextHit = false ;
151
173
[builder set: @" end" forKey: kGAISessionControl ];
152
174
}
153
-
175
+
154
176
}
155
177
156
178
void sendAppView (const char * value) {
@@ -161,18 +183,23 @@ void sendAppView(const char * value) {
161
183
value: [NSString stringWithUTF8String: value]];
162
184
163
185
[GAIHandler addAdditionalParametersToBuilder: builder];
186
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
187
+ [GAIHandler setCustomMetricsOnBuilder: builder];
164
188
165
189
[tracker send: [builder build ]];
166
190
}
167
-
191
+
168
192
void sendEvent (const char * category, const char * action, const char * label, const long long value) {
169
193
id tracker = [[GAI sharedInstance ] defaultTracker ];
170
-
194
+
171
195
GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createEventWithCategory: [NSString stringWithUTF8String: category]
172
- action: [NSString stringWithUTF8String: action]
196
+ action: [NSString stringWithUTF8String: action]
173
197
label: [NSString stringWithUTF8String: label]
174
198
value: [NSNumber numberWithLongLong: value]];
175
199
[GAIHandler addAdditionalParametersToBuilder: builder];
200
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
201
+ [GAIHandler setCustomMetricsOnBuilder: builder];
202
+
176
203
[tracker send: [builder build ]];
177
204
}
178
205
@@ -186,21 +213,27 @@ void sendTransaction( const char * transactionID, const char* affiliation, const
186
213
shipping: [NSNumber numberWithDouble: shipping]
187
214
currencyCode: [NSString stringWithUTF8String: currencyCode]];
188
215
[GAIHandler addAdditionalParametersToBuilder: builder];
216
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
217
+ [GAIHandler setCustomMetricsOnBuilder: builder];
218
+
189
219
[tracker send: [builder build ]];
190
220
}
191
221
192
222
void sendItemWithTransaction (const char * transactionID, const char * name, const char * sku, const char * category, const double price, const long long quantity, const char * currencyCode) {
193
223
id tracker = [[GAI sharedInstance ] defaultTracker ];
194
224
195
225
GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createItemWithTransactionId: [NSString stringWithUTF8String: transactionID]
196
- name: [NSString stringWithUTF8String: name]
197
- sku: [NSString stringWithUTF8String: sku]
198
- category: [NSString stringWithUTF8String: category]
199
- price: [NSNumber numberWithDouble: price]
200
- quantity: [NSNumber numberWithLongLong: quantity]
201
- currencyCode: [NSString stringWithUTF8String: currencyCode]];
226
+ name: [NSString stringWithUTF8String: name]
227
+ sku: [NSString stringWithUTF8String: sku]
228
+ category: [NSString stringWithUTF8String: category]
229
+ price: [NSNumber numberWithDouble: price]
230
+ quantity: [NSNumber numberWithLongLong: quantity]
231
+ currencyCode: [NSString stringWithUTF8String: currencyCode]];
202
232
203
233
[GAIHandler addAdditionalParametersToBuilder: builder];
234
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
235
+ [GAIHandler setCustomMetricsOnBuilder: builder];
236
+
204
237
[tracker send: [builder build ]];
205
238
}
206
239
@@ -212,6 +245,9 @@ void sendException(const char * errorDescription, const bool isFatal) {
212
245
withFatal: isFatal ? @YES : @NO ];
213
246
214
247
[GAIHandler addAdditionalParametersToBuilder: builder];
248
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
249
+ [GAIHandler setCustomMetricsOnBuilder: builder];
250
+
215
251
[tracker send: [builder build ]];
216
252
217
253
}
@@ -224,6 +260,9 @@ void sendSocial(const char * socialNetwork, const char * socialAction, const cha
224
260
target: [NSString stringWithUTF8String: targetUrl]];
225
261
226
262
[GAIHandler addAdditionalParametersToBuilder: builder];
263
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
264
+ [GAIHandler setCustomMetricsOnBuilder: builder];
265
+
227
266
[tracker send: [builder build ]];
228
267
}
229
268
@@ -235,6 +274,9 @@ void sendTiming(const char * timingCategory, const long long timingInterval, con
235
274
name: [NSString stringWithUTF8String: name]
236
275
label: [NSString stringWithUTF8String: label]];
237
276
[GAIHandler addAdditionalParametersToBuilder: builder];
277
+ [GAIHandler setCustomDimensionsOnBuilder: builder];
278
+ [GAIHandler setCustomMetricsOnBuilder: builder];
279
+
238
280
[tracker send: [builder build ]];
239
281
}
240
282
0 commit comments