Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Modules/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ enum XcodeSupport {
.product(name: "Kingfisher", package: "Kingfisher"),
.product(name: "SwiftSubtitles", package: "SwiftSubtitles"),
.product(name: "FirebaseRemoteConfig", package: "firebase-ios-sdk"),
.product(name: "FirebaseAnalyticsWithoutAdIdSupport", package: "firebase-ios-sdk"),
.product(name: "DifferenceKit", package: "DifferenceKit"),
]
),
Expand Down
8 changes: 4 additions & 4 deletions Pocket Casts TV App/Analytics/DiscoverAnalytics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,19 @@ enum DiscoverAnalytics {
static let searchSource = "search"

static func listImpression(listId: String, source: String) {
Analytics.track(.discoverListImpression, properties: ["list_id": listId, "source": source])
AnalyticsHelper.listImpression(listId: listId, category: nil, source: source)
}

static func podcastTapped(listId: String, podcastUuid: String, source: String) {
Analytics.track(.discoverListPodcastTapped, properties: ["list_id": listId, "podcast_uuid": podcastUuid, "source": source])
static func podcastTapped(listId: String, podcastUuid: String, dateTime: String? = nil, source: String) {
AnalyticsHelper.podcastTappedFromList(listId: listId, podcastUuid: podcastUuid, listDateTime: dateTime, source: source)
}

static func episodeTapped(listId: String, podcastUuid: String?, episodeUuid: String, source: String) {
var properties: [String: Sendable] = ["list_id": listId, "episode_uuid": episodeUuid, "source": source]
if let podcastUuid {
properties["podcast_uuid"] = podcastUuid
}
Analytics.track(.discoverListEpisodeTapped, properties: properties)
AnalyticsHelper.podcastEpisodeTapped(fromList: listId, podcastUuid: podcastUuid ?? "", episodeUuid: episodeUuid, source: source)
}

static func categoryPillTapped(_ category: DiscoverCategory, region: String?, source: String) {
Expand Down
6 changes: 4 additions & 2 deletions Pocket Casts TV App/Data/DiscoverManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@ struct DiscoverSection {
let sponsoredPodcastsIDs: Set<String>
/// Analytics list identifier for the section, used by the `discover_list_*` events.
let listId: String?
let dateTime: String?

init(title: String? = nil, subtitle: String? = nil, podcasts: [DiscoverPodcast] = [], sponsoredPodcastsIDs: Set<String> = [], listId: String? = nil) {
init(title: String? = nil, subtitle: String? = nil, podcasts: [DiscoverPodcast] = [], sponsoredPodcastsIDs: Set<String> = [], listId: String? = nil, dateTime: String? = nil) {
self.title = title
self.subtitle = subtitle
self.podcasts = podcasts
self.sponsoredPodcastsIDs = sponsoredPodcastsIDs
self.listId = listId
self.dateTime = dateTime
}
}

Expand Down Expand Up @@ -147,7 +149,7 @@ actor DiscoverManager {
}
}

return DiscoverSection(title: podcastCollection?.title, subtitle: podcastCollection?.subtitle, podcasts: listOfPodcasts, sponsoredPodcastsIDs: Set(sponsoredPodcasts.values.compactMap({$0.uuid})), listId: listId)
return DiscoverSection(title: podcastCollection?.title, subtitle: podcastCollection?.subtitle, podcasts: listOfPodcasts, sponsoredPodcastsIDs: Set(sponsoredPodcasts.values.compactMap({$0.uuid})), listId: listId, dateTime: podcastCollection?.datetime)
}

func findItem(of type: DiscoverType) async -> DiscoverItem? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class DiscoverSectionModel {

private(set) var listId: String?

private(set) var dateTime: String?

init(type: DiscoverType, source: String, discoverManager: DiscoverManager = DiscoverManager.shared) {
self.type = type
self.item = nil
Expand Down Expand Up @@ -65,6 +67,7 @@ class DiscoverSectionModel {
sponsored = section.sponsoredPodcastsIDs
isSponsored = item?.isSponsored ?? false
listId = section.listId
dateTime = section.dateTime
}
}

Expand All @@ -76,7 +79,7 @@ class DiscoverSectionModel {

func trackPodcastTapped(_ podcast: DiscoverPodcast) {
guard let listId, let podcastUuid = podcast.uuid else { return }
DiscoverAnalytics.podcastTapped(listId: listId, podcastUuid: podcastUuid, source: source)
DiscoverAnalytics.podcastTapped(listId: listId, podcastUuid: podcastUuid, dateTime: dateTime, source: source)
}

var focusStoreID: String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@
argument = "-PCSimulateDataLoss"
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "-FIRAnalyticsDebugEnabled"
isEnabled = "NO">
</CommandLineArgument>
</CommandLineArguments>
</LaunchAction>
<ProfileAction
Expand Down
22 changes: 15 additions & 7 deletions podcasts/AnalyticsHelper.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if !os(watchOS) && !os(tvOS)
#if !os(watchOS)
import Firebase
#endif

Expand Down Expand Up @@ -116,11 +116,14 @@ class AnalyticsHelper {
bumpStat("discover_list_podcast_subscribe", parameters: properties)
}

class func podcastTappedFromList(listId: String, podcastUuid: String, listDateTime: String? = nil) {
class func podcastTappedFromList(listId: String, podcastUuid: String, listDateTime: String? = nil, source: String? = nil) {
var properties = ["list_id": listId, "podcast_uuid": podcastUuid]
if let listDateTime {
properties["list_datetime"] = listDateTime
}
if let source {
properties["source"] = source
}
Analytics.track(.discoverListPodcastTapped, properties: properties)
bumpStat("discover_list_podcast_tap", parameters: properties)
}
Expand All @@ -135,9 +138,11 @@ class AnalyticsHelper {
Analytics.track(.discoverAdCategorySubscribed, properties: properties)
}

class func podcastEpisodeTapped(fromList listId: String, podcastUuid: String, episodeUuid: String) {
let properties = ["list_id": listId, "podcast_uuid": podcastUuid, "episode_uuid": episodeUuid]

class func podcastEpisodeTapped(fromList listId: String, podcastUuid: String, episodeUuid: String, source: String? = nil) {
var properties = ["list_id": listId, "podcast_uuid": podcastUuid, "episode_uuid": episodeUuid]
if let source {
properties["source"] = source
}
Analytics.track(.discoverListEpisodeTapped, properties: properties)
bumpStat("discover_list_podcast_episode_tap", parameters: properties)
}
Expand All @@ -151,11 +156,14 @@ class AnalyticsHelper {
bumpStat("discover_list_show_all", parameters: properties)
}

class func listImpression(listId: String, category: String?) {
class func listImpression(listId: String, category: String?, source: String? = nil) {
var properties = ["list_id": listId]
if let category {
properties["category"] = category
}
if let source {
properties["source"] = source
}
Analytics.track(.discoverListImpression, properties: properties)
bumpStat("discover_list_impression", parameters: properties)
}
Expand Down Expand Up @@ -441,7 +449,7 @@ private extension AnalyticsHelper {
guard optedOut == false else { return }

// assuming for now we don't want analytics on a watch
#if !os(watchOS) && !os(tvOS)
#if !os(watchOS)
Firebase.Analytics.logEvent(name, parameters: parameters)

if FeatureFlag.firebaseLogging.enabled {
Expand Down