Skip to content
This repository was archived by the owner on Nov 12, 2024. It is now read-only.

Commit

Permalink
Add Analytics implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbanes committed Jul 3, 2023
1 parent 792e6a2 commit 1c0a7d6
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@

package app.tivi.core.analytics

import kotlin.experimental.ExperimentalObjCName
import kotlin.native.ObjCName

@OptIn(ExperimentalObjCName::class)
@ObjCName(swiftName = "TiviAnalytics")
interface Analytics {
fun trackScreenView(
name: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import app.tivi.inject.ApplicationScope
import me.tatarka.inject.annotations.Provides

actual interface AnalyticsComponent {
var analyticsProvider: () -> Analytics

@Provides
@ApplicationScope
fun provideAnalytics(): Analytics = object : Analytics {
override fun trackScreenView(name: String, arguments: Map<String, *>?) = Unit
}
fun provideAnalytics(): Analytics = analyticsProvider()
}
15 changes: 14 additions & 1 deletion ios-app/Tivi/Tivi/TiviApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@

import SwiftUI
import TiviKt
import FirebaseAnalytics
import FirebaseCore

class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
if FirebaseOptions.defaultOptions()?.apiKey != nil {
if !(FirebaseOptions.defaultOptions()?.apiKey?.isEmpty ?? true) {
FirebaseApp.configure()
}
return true
Expand All @@ -28,6 +29,7 @@ struct TiviApp: App {
let applicationComponent = IosApplicationComponent.companion.create()

init() {
applicationComponent.analyticsProvider = { FirebaseAnalytics() }
applicationComponent.initializers.initialize()
}

Expand All @@ -40,3 +42,14 @@ struct TiviApp: App {
}
}
}

class FirebaseAnalytics: TiviAnalytics {
func trackScreenView(name: String, arguments: [String : Any]?) {
var params = [AnalyticsParameterScreenName: name]
arguments?.forEach { (key, value) in
params[key] = "screen_arg_\(value)"
}

Analytics.logEvent(AnalyticsEventSelectContent, parameters: params)
}
}
1 change: 1 addition & 0 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ kotlin {
baseName = "TiviKt"

export(projects.ui.root)
export(projects.core.analytics)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.compose.ui.unit.Density
import app.tivi.app.ApplicationInfo
import app.tivi.app.Flavor
import app.tivi.appinitializers.AppInitializers
import app.tivi.core.analytics.Analytics
import me.tatarka.inject.annotations.Component
import me.tatarka.inject.annotations.Provides
import platform.Foundation.NSBundle
Expand All @@ -16,6 +17,10 @@ import platform.Foundation.NSBundle
abstract class IosApplicationComponent : SharedApplicationComponent {
abstract val initializers: AppInitializers

override var analyticsProvider: () -> Analytics = {
error("Analytics not provided")
}

@ApplicationScope
@Provides
fun provideApplicationId(): ApplicationInfo = ApplicationInfo(
Expand Down

0 comments on commit 1c0a7d6

Please sign in to comment.