Skip to content

Commit 23b9bff

Browse files
committed
Merge branch 'release/0.7.0'
2 parents ec702d5 + d417c9b commit 23b9bff

File tree

119 files changed

+4780
-866
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+4780
-866
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# 0.7.0
2+
3+
* Add media tracking APIs to the tracker (close #49)
4+
* Fix tracker initialization with partial platform context property overrides on Android (#53)
5+
* Update uuid package constraint to 4.0.0 (#48) thanks to @petermnt
6+
* Add support for Android Gradle Plugin 8 (close #46) thanks to @petermnt
7+
* Remove documentation in the project in favour of docs.snowplow.io to reduce duplicity (#51)
8+
* Update flutter_lints, http, js, and example dependency versions (#52)
9+
110
# 0.6.0
211

312
* Upgrade mobile trackers to version 6.0

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ It is build on top of Snowplow's native [iOS](https://github.com/snowplow/snowpl
3434
| Configurable GDPR context entity ||||
3535
| Lifecycle autotracking ||| |
3636
| Engagement tracking (activity tracking on Web, mobile screen engagement on mobile) ||||
37+
| Media playback tracking ||||
3738

3839
## Quick Start
3940

@@ -49,7 +50,7 @@ This will add a line with the dependency like this to your `pubspec.yaml`:
4950

5051
```yml
5152
dependencies:
52-
snowplow_tracker: ^0.6.0
53+
snowplow_tracker: ^0.7.0
5354
```
5455
5556
Import the package into your Dart code:

android/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ apply plugin: 'com.android.library'
2525
apply plugin: 'kotlin-android'
2626

2727
android {
28+
// Conditional for compatibility with AGP <4.2.
29+
if (project.android.hasProperty('namespace')) {
30+
namespace 'com.snowplowanalytics.snowplow_tracker'
31+
}
2832
compileSdkVersion 33
2933

3034
compileOptions {

android/src/main/kotlin/com/snowplowanalytics/snowplow_tracker/SnowplowTrackerController.kt

Lines changed: 172 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import android.content.Context
1515

1616
import com.snowplowanalytics.snowplow.Snowplow;
1717
import com.snowplowanalytics.snowplow.configuration.Configuration;
18+
import com.snowplowanalytics.snowplow.event.Event
1819
import com.snowplowanalytics.snowplow_tracker.readers.configurations.DefaultTrackerConfiguration
1920
import com.snowplowanalytics.snowplow_tracker.readers.messages.*
2021

@@ -51,59 +52,43 @@ object SnowplowTrackerController {
5152
}
5253

5354
fun trackStructured(eventReader: EventMessageReader) {
54-
val trackerController = Snowplow.getTracker(eventReader.tracker)
5555
val structured = eventReader.toStructuredWithContexts()
56-
57-
trackerController?.track(structured)
56+
trackEvent(structured, eventReader)
5857
}
5958

6059
fun trackSelfDescribing(eventReader: EventMessageReader) {
61-
val trackerController = Snowplow.getTracker(eventReader.tracker)
6260
val selfDescribing = eventReader.toSelfDescribingWithContexts()
63-
64-
trackerController?.track(selfDescribing)
61+
trackEvent(selfDescribing, eventReader)
6562
}
6663

6764
fun trackScreenView(eventReader: EventMessageReader) {
68-
val trackerController = Snowplow.getTracker(eventReader.tracker)
6965
val screenView = eventReader.toScreenViewWithContexts()
70-
71-
trackerController?.track(screenView)
66+
trackEvent(screenView, eventReader)
7267
}
7368

7469
fun trackScrollChanged(eventReader: EventMessageReader) {
75-
val trackerController = Snowplow.getTracker(eventReader.tracker)
7670
val scroll = eventReader.toScrollChangedWithContexts()
77-
78-
trackerController?.track(scroll)
71+
trackEvent(scroll, eventReader)
7972
}
8073

8174
fun trackListItemView(eventReader: EventMessageReader) {
82-
val trackerController = Snowplow.getTracker(eventReader.tracker)
8375
val listItem = eventReader.toListItemViewWithContexts()
84-
85-
trackerController?.track(listItem)
76+
trackEvent(listItem, eventReader)
8677
}
8778

8879
fun trackTiming(eventReader: EventMessageReader) {
89-
val trackerController = Snowplow.getTracker(eventReader.tracker)
9080
val timing = eventReader.toTimingWithContexts()
91-
92-
trackerController?.track(timing)
81+
trackEvent(timing, eventReader)
9382
}
9483

9584
fun trackConsentGranted(eventReader: EventMessageReader) {
96-
val trackerController = Snowplow.getTracker(eventReader.tracker)
9785
val consentGranted = eventReader.toConsentGrantedWithContexts()
98-
99-
trackerController?.track(consentGranted)
86+
trackEvent(consentGranted, eventReader)
10087
}
10188

10289
fun trackConsentWithdrawn(eventReader: EventMessageReader) {
103-
val trackerController = Snowplow.getTracker(eventReader.tracker)
10490
val consentWithdrawn = eventReader.toConsentWithdrawnWithContexts()
105-
106-
trackerController?.track(consentWithdrawn)
91+
trackEvent(consentWithdrawn, eventReader)
10792
}
10893

10994
fun setUserId(messageReader: SetUserIdMessageReader) {
@@ -130,4 +115,167 @@ object SnowplowTrackerController {
130115
return trackerController?.session?.sessionIndex
131116
}
132117

118+
fun startMediaTracking(messageReader: StartMediaTrackingMessageReader) {
119+
val trackerController = Snowplow.getTracker(messageReader.tracker)
120+
trackerController?.media?.startMediaTracking(
121+
messageReader.configuration.toConfiguration()
122+
)
123+
}
124+
125+
fun endMediaTracking(messageReader: EndMediaTrackingMessageReader) {
126+
val trackerController = Snowplow.getTracker(messageReader.tracker)
127+
trackerController?.media?.endMediaTracking(messageReader.mediaTrackingId)
128+
}
129+
130+
fun updateMediaTracking(messageReader: UpdateMediaTrackingMessageReader) {
131+
val trackerController = Snowplow.getTracker(messageReader.tracker)
132+
val mediaTracking = trackerController?.media?.getMediaTracking(messageReader.mediaTrackingId)
133+
mediaTracking?.update(
134+
player = messageReader.player?.toMediaPlayerEntity(),
135+
ad = messageReader.ad?.toMediaAdEntity(),
136+
adBreak = messageReader.adBreak?.toMediaAdBreakEntity()
137+
)
138+
}
139+
140+
fun trackMediaAdBreakEndEvent(messageReader: EventMessageReader) {
141+
val event = messageReader.toMediaAdBreakEndEvent()
142+
trackEvent(event, messageReader)
143+
}
144+
145+
fun trackMediaAdBreakStartEvent(messageReader: EventMessageReader) {
146+
val event = messageReader.toMediaAdBreakStartEvent()
147+
trackEvent(event, messageReader)
148+
}
149+
150+
fun trackMediaAdClickEvent(messageReader: EventMessageReader) {
151+
val event = messageReader.toMediaAdClickEvent()
152+
trackEvent(event, messageReader)
153+
}
154+
155+
fun trackMediaAdCompleteEvent(messageReader: EventMessageReader) {
156+
val event = messageReader.toMediaAdCompleteEvent()
157+
trackEvent(event, messageReader)
158+
}
159+
160+
fun trackMediaAdFirstQuartileEvent(messageReader: EventMessageReader) {
161+
val event = messageReader.toMediaAdFirstQuartileEvent()
162+
trackEvent(event, messageReader)
163+
}
164+
165+
fun trackMediaAdMidpointEvent(messageReader: EventMessageReader) {
166+
val event = messageReader.toMediaAdMidpointEvent()
167+
trackEvent(event, messageReader)
168+
}
169+
170+
fun trackMediaAdPauseEvent(messageReader: EventMessageReader) {
171+
val event = messageReader.toMediaAdPauseEvent()
172+
trackEvent(event, messageReader)
173+
}
174+
175+
fun trackMediaAdResumeEvent(messageReader: EventMessageReader) {
176+
val event = messageReader.toMediaAdResumeEvent()
177+
trackEvent(event, messageReader)
178+
}
179+
180+
fun trackMediaAdSkipEvent(messageReader: EventMessageReader) {
181+
val event = messageReader.toMediaAdSkipEvent()
182+
trackEvent(event, messageReader)
183+
}
184+
185+
fun trackMediaAdStartEvent(messageReader: EventMessageReader) {
186+
val event = messageReader.toMediaAdStartEvent()
187+
trackEvent(event, messageReader)
188+
}
189+
190+
fun trackMediaAdThirdQuartileEvent(messageReader: EventMessageReader) {
191+
val event = messageReader.toMediaAdThirdQuartileEvent()
192+
trackEvent(event, messageReader)
193+
}
194+
195+
fun trackMediaBufferEndEvent(messageReader: EventMessageReader) {
196+
val event = messageReader.toMediaBufferEndEvent()
197+
trackEvent(event, messageReader)
198+
}
199+
200+
fun trackMediaBufferStartEvent(messageReader: EventMessageReader) {
201+
val event = messageReader.toMediaBufferStartEvent()
202+
trackEvent(event, messageReader)
203+
}
204+
205+
fun trackMediaEndEvent(messageReader: EventMessageReader) {
206+
val event = messageReader.toMediaEndEvent()
207+
trackEvent(event, messageReader)
208+
}
209+
210+
fun trackMediaErrorEvent(messageReader: EventMessageReader) {
211+
val event = messageReader.toMediaErrorEvent()
212+
trackEvent(event, messageReader)
213+
}
214+
215+
fun trackMediaFullscreenChangeEvent(messageReader: EventMessageReader) {
216+
val event = messageReader.toMediaFullscreenChangeEvent()
217+
trackEvent(event, messageReader)
218+
}
219+
220+
fun trackMediaPauseEvent(messageReader: EventMessageReader) {
221+
val event = messageReader.toMediaPauseEvent()
222+
trackEvent(event, messageReader)
223+
}
224+
225+
fun trackMediaPictureInPictureChangeEvent(messageReader: EventMessageReader) {
226+
val event = messageReader.toMediaPictureInPictureChangeEvent()
227+
trackEvent(event, messageReader)
228+
}
229+
230+
fun trackMediaPlayEvent(messageReader: EventMessageReader) {
231+
val event = messageReader.toMediaPlayEvent()
232+
trackEvent(event, messageReader)
233+
}
234+
235+
fun trackMediaPlaybackRateChangeEvent(messageReader: EventMessageReader) {
236+
val event = messageReader.toMediaPlaybackRateChangeEvent()
237+
trackEvent(event, messageReader)
238+
}
239+
240+
fun trackMediaQualityChangeEvent(messageReader: EventMessageReader) {
241+
val event = messageReader.toMediaQualityChangeEvent()
242+
trackEvent(event, messageReader)
243+
}
244+
245+
fun trackMediaReadyEvent(messageReader: EventMessageReader) {
246+
val event = messageReader.toMediaReadyEvent()
247+
trackEvent(event, messageReader)
248+
}
249+
250+
fun trackMediaSeekEndEvent(messageReader: EventMessageReader) {
251+
val event = messageReader.toMediaSeekEndEvent()
252+
trackEvent(event, messageReader)
253+
}
254+
255+
fun trackMediaSeekStartEvent(messageReader: EventMessageReader) {
256+
val event = messageReader.toMediaSeekStartEvent()
257+
trackEvent(event, messageReader)
258+
}
259+
260+
fun trackMediaVolumeChangeEvent(messageReader: EventMessageReader) {
261+
val event = messageReader.toMediaVolumeChangeEvent()
262+
trackEvent(event, messageReader)
263+
}
264+
265+
private fun trackEvent(event: Event, messageReader: EventMessageReader) {
266+
val trackerController = Snowplow.getTracker(messageReader.tracker)
267+
val mediaTrackingId = messageReader.mediaTrackingId
268+
if (mediaTrackingId == null) {
269+
trackerController?.track(event)
270+
} else {
271+
val mediaTracking = trackerController?.media?.getMediaTracking(mediaTrackingId)
272+
mediaTracking?.track(
273+
event = event,
274+
player = messageReader.player?.toMediaPlayerEntity(),
275+
ad = messageReader.ad?.toMediaAdEntity(),
276+
adBreak = messageReader.adBreak?.toMediaAdBreakEntity()
277+
)
278+
}
279+
}
280+
133281
}

0 commit comments

Comments
 (0)