@@ -40,18 +40,23 @@ public class GoogleAnalyticsMPV3 {
40
40
private string clientId ;
41
41
private string url ;
42
42
private float timeStarted ;
43
- private Dictionary < Field , object > trackerValues ;
43
+ private Dictionary < Field , object > trackerValues = new Dictionary < Field , object > ( ) ;
44
44
private bool startSessionOnNextHit = false ;
45
45
private bool endSessionOnNextHit = false ;
46
+ private bool trackingCodeSet = true ;
46
47
47
48
public void InitializeTracker ( ) {
49
+ if ( String . IsNullOrEmpty ( trackingCode ) ) {
50
+ Debug . Log ( "No tracking code set for 'Other' platforms - hits will not be set" ) ;
51
+ trackingCodeSet = false ;
52
+ return ;
53
+ }
48
54
if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . INFO ) ) {
49
55
Debug . Log ( "Platform is not Android or iOS - " +
50
56
"hits will be sent using measurement protocol." ) ;
51
57
}
52
58
screenRes = Screen . width + "x" + Screen . height ;
53
59
clientId = SystemInfo . deviceUniqueIdentifier ;
54
- trackerValues = new Dictionary < Field , object > ( ) ;
55
60
string language = Application . systemLanguage . ToString ( ) ;
56
61
optOut = false ;
57
62
#if ! UNITY_WP8
@@ -89,6 +94,9 @@ public void SetTrackerVal(Field field, object value) {
89
94
}
90
95
91
96
private string AddTrackerVals ( ) {
97
+ if ( ! trackingCodeSet ) {
98
+ return "" ;
99
+ }
92
100
string vals = "" ;
93
101
foreach ( KeyValuePair < Field , object > pair in trackerValues ) {
94
102
vals += AddOptionalMPParameter ( pair . Key , pair . Value ) ;
@@ -105,6 +113,12 @@ internal void StopSession() {
105
113
}
106
114
107
115
private void SendGaHitWithMeasurementProtocol ( string url ) {
116
+ if ( String . IsNullOrEmpty ( url ) ) {
117
+ if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
118
+ Debug . Log ( "No tracking code set for 'Other' platforms - hit will not be sent." ) ;
119
+ }
120
+ return ;
121
+ }
108
122
if ( dryRun || optOut ) {
109
123
if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
110
124
Debug . Log ( "Dry run or opt out enabled - hits will not be sent." ) ;
@@ -123,30 +137,41 @@ private void SendGaHitWithMeasurementProtocol(string url) {
123
137
if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . VERBOSE ) ) {
124
138
Debug . Log ( newUrl ) ;
125
139
}
126
- WWW request = new WWW ( newUrl ) ;
127
- while ( ! request . isDone ) {
128
- }
129
- if ( request . responseHeaders . ContainsKey ( "STATUS" ) ) {
130
- if ( request . responseHeaders [ "STATUS" ] == "HTTP/1.1 200 OK" ) {
131
- if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . INFO ) ) {
132
- Debug . Log ( "Successfully sent Google Analytics hit." ) ;
140
+ GoogleAnalyticsV3 . getInstance ( ) . StartCoroutine ( this . HandleWWW ( new WWW ( newUrl ) ) ) ;
141
+ }
142
+
143
+ /*
144
+ Make request using yield and coroutine to prevent lock up waiting on request to return.
145
+ */
146
+ public IEnumerator HandleWWW ( WWW request )
147
+ {
148
+ while ( ! request . isDone )
149
+ {
150
+ yield return request ;
151
+ if ( request . responseHeaders . ContainsKey ( "STATUS" ) ) {
152
+ if ( request . responseHeaders [ "STATUS" ] == "HTTP/1.1 200 OK" ) {
153
+ if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . INFO ) ) {
154
+ Debug . Log ( "Successfully sent Google Analytics hit." ) ;
155
+ }
156
+ } else {
157
+ if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
158
+ Debug . LogWarning ( "Google Analytics hit request rejected with" +
159
+ "status code " + request . responseHeaders [ "STATUS" ] ) ;
160
+ }
133
161
}
134
162
} else {
135
163
if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
136
- Debug . LogWarning ( "Google Analytics hit request rejected with" +
137
- "status code " + request . responseHeaders [ "STATUS" ] ) ;
164
+ Debug . LogWarning ( "Google Analytics hit request failed with error "
165
+ + request . error ) ;
138
166
}
139
167
}
140
- } else {
141
- if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
142
- Debug . LogWarning ( "Google Analytics hit request failed with error "
143
- + request . error ) ;
144
- }
145
168
}
146
169
}
147
170
148
171
private string AddRequiredMPParameter ( Field parameter , object value ) {
149
- if ( value == null ) {
172
+ if ( ! trackingCodeSet ) {
173
+ return "" ;
174
+ } else if ( value == null ) {
150
175
if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
151
176
Debug . LogWarning ( "Value was null for required parameter " + parameter + ". Hit cannot be sent" ) ;
152
177
}
@@ -157,7 +182,9 @@ private string AddRequiredMPParameter(Field parameter, object value) {
157
182
}
158
183
159
184
private string AddRequiredMPParameter ( Field parameter , string value ) {
160
- if ( value == null ) {
185
+ if ( ! trackingCodeSet ) {
186
+ return "" ;
187
+ } else if ( value == null ) {
161
188
if ( GoogleAnalyticsV3 . belowThreshold ( logLevel , GoogleAnalyticsV3 . DebugMode . WARNING ) ) {
162
189
Debug . LogWarning ( "Value was null for required parameter " + parameter + ". Hit cannot be sent" ) ;
163
190
}
@@ -168,22 +195,25 @@ private string AddRequiredMPParameter(Field parameter, string value) {
168
195
}
169
196
170
197
private string AddOptionalMPParameter ( Field parameter , object value ) {
171
- if ( value == null ) {
198
+ if ( value == null || ! trackingCodeSet ) {
172
199
return "" ;
173
200
} else {
174
201
return parameter + "=" + WWW . EscapeURL ( value . ToString ( ) ) ;
175
202
}
176
203
}
177
204
178
205
private string AddOptionalMPParameter ( Field parameter , string value ) {
179
- if ( String . IsNullOrEmpty ( value ) ) {
206
+ if ( String . IsNullOrEmpty ( value ) || ! trackingCodeSet ) {
180
207
return "" ;
181
208
} else {
182
209
return parameter + "=" + WWW . EscapeURL ( value ) ;
183
210
}
184
211
}
185
212
186
213
private string AddCustomVariables < T > ( HitBuilder < T > builder ) {
214
+ if ( ! trackingCodeSet ) {
215
+ return "" ;
216
+ }
187
217
String url = "" ;
188
218
foreach ( KeyValuePair < int , string > entry in builder . GetCustomDimensions ( ) )
189
219
{
@@ -210,6 +240,9 @@ private string AddCustomVariables<T>(HitBuilder<T> builder) {
210
240
211
241
212
242
private string AddCampaignParameters < T > ( HitBuilder < T > builder ) {
243
+ if ( ! trackingCodeSet ) {
244
+ return "" ;
245
+ }
213
246
String url = "" ;
214
247
url += AddOptionalMPParameter ( Fields . CAMPAIGN_NAME , builder . GetCampaignName ( ) ) ;
215
248
url += AddOptionalMPParameter ( Fields . CAMPAIGN_SOURCE , builder . GetCampaignSource ( ) ) ;
@@ -382,4 +415,5 @@ public void SetDryRun(bool dryRun) {
382
415
public void SetOptOut ( bool optOut ) {
383
416
this . optOut = optOut ;
384
417
}
418
+
385
419
}
0 commit comments