Skip to content

Commit 00ce320

Browse files
authored
[MERGE] #384 -> develop
[ADD/#384] 4์ฐจ ์Šคํ”„๋ฆฐํŠธ / ์— ํ”Œ๋ฆฌํŠœ๋“œ ์ด๋ฒคํŠธ ์ถ”๊ฐ€
2 parents 5df3ce7 + 0ee5d33 commit 00ce320

4 files changed

Lines changed: 59 additions & 15 deletions

File tree

โ€Žcore/analytics/src/main/java/com/terning/core/analytics/EventType.ktโ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ enum class EventType(val prefix: String) {
44
SIGNUP("signup"),
55
SCREEN("screen"),
66
CLICK("click"),
7-
SCROLL("scroll")
7+
SCROLL("scroll"),
8+
PUSH_NOTIFICATION("push_notification")
89
}

โ€Žcore/firebase/build.gradle.ktsโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies {
1212
//core
1313
implementation(projects.core.navigator)
1414
implementation(projects.core.designsystem)
15+
implementation(projects.core.analytics)
1516

1617
// domain
1718
implementation(projects.domain.user)

โ€Žcore/firebase/src/main/java/com/terning/core/firebase/messageservice/TerningMessagingService.ktโ€Ž

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import coil3.ImageLoader
1414
import coil3.request.ImageRequest
1515
import com.google.firebase.messaging.FirebaseMessagingService
1616
import com.google.firebase.messaging.RemoteMessage
17+
import com.terning.core.analytics.AmplitudeTracker
18+
import com.terning.core.analytics.EventType
1719
import com.terning.core.designsystem.type.NotificationRedirect
1820
import com.terning.core.designsystem.util.DeeplinkDefaults
1921
import com.terning.core.designsystem.util.DeeplinkDefaults.REDIRECT
@@ -34,6 +36,9 @@ class TerningMessagingService : FirebaseMessagingService() {
3436
@Inject
3537
lateinit var navigatorProvider: NavigatorProvider
3638

39+
@Inject
40+
lateinit var amplitudeTracker: AmplitudeTracker
41+
3742
override fun onNewToken(token: String) {
3843
super.onNewToken(token)
3944

@@ -43,23 +48,27 @@ class TerningMessagingService : FirebaseMessagingService() {
4348
override fun handleIntent(intent: Intent?) {
4449
super.handleIntent(intent)
4550

46-
extractInformation(
47-
title = intent?.getStringExtra(TITLE),
48-
body = intent?.getStringExtra(BODY),
49-
type = intent?.getStringExtra(TYPE),
50-
imageUrl = intent?.getStringExtra(IMAGE_URL)
51-
)
51+
if (!isAppInForeground()) {
52+
extractInformation(
53+
title = intent?.getStringExtra(TITLE),
54+
body = intent?.getStringExtra(BODY),
55+
type = intent?.getStringExtra(TYPE),
56+
imageUrl = intent?.getStringExtra(IMAGE_URL)
57+
)
58+
}
5259
}
5360

5461
override fun onMessageReceived(message: RemoteMessage) {
5562
super.onMessageReceived(message)
5663

57-
extractInformation(
58-
title = message.data[TITLE],
59-
body = message.data[BODY],
60-
type = message.data[TYPE],
61-
imageUrl = message.data[IMAGE_URL]
62-
)
64+
if (isAppInForeground()) {
65+
extractInformation(
66+
title = message.data[TITLE],
67+
body = message.data[BODY],
68+
type = message.data[TYPE],
69+
imageUrl = message.data[IMAGE_URL]
70+
)
71+
}
6372
}
6473

6574
private fun extractInformation(
@@ -70,6 +79,11 @@ class TerningMessagingService : FirebaseMessagingService() {
7079
) {
7180
if (title.isNullOrEmpty() || !userRepository.getAlarmAvailable()) return
7281

82+
amplitudeTracker.track(
83+
type = EventType.PUSH_NOTIFICATION,
84+
name = "received"
85+
)
86+
7387
sendNotification(
7488
title = title,
7589
body = body.orEmpty(),
@@ -91,6 +105,7 @@ class TerningMessagingService : FirebaseMessagingService() {
91105
action = Intent.ACTION_VIEW
92106
data = deeplink.toUri()
93107
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
108+
putExtra(FROM_NOTIFICATION, true)
94109
}
95110
val pendingIntent = PendingIntent.getActivity(
96111
this@TerningMessagingService,
@@ -159,5 +174,6 @@ class TerningMessagingService : FirebaseMessagingService() {
159174
private const val BODY: String = "body"
160175
private const val TYPE: String = "type"
161176
private const val IMAGE_URL: String = "imageUrl"
177+
const val FROM_NOTIFICATION: String = "fromNotification"
162178
}
163179
}

โ€Žfeature/main/src/main/java/com/terning/feature/main/MainActivity.ktโ€Ž

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import androidx.activity.enableEdgeToEdge
1010
import androidx.annotation.RequiresApi
1111
import androidx.compose.runtime.CompositionLocalProvider
1212
import com.terning.core.analytics.AmplitudeTracker
13+
import com.terning.core.analytics.EventType
1314
import com.terning.core.analytics.LocalTracker
1415
import com.terning.core.designsystem.theme.TerningPointTheme
1516
import com.terning.core.designsystem.util.DeeplinkDefaults.REDIRECT
17+
import com.terning.core.firebase.messageservice.TerningMessagingService.Companion.FROM_NOTIFICATION
1618
import dagger.hilt.android.AndroidEntryPoint
1719
import javax.inject.Inject
1820

@@ -28,8 +30,7 @@ class MainActivity : ComponentActivity() {
2830
enableEdgeToEdge()
2931
setContent {
3032
val navigator: MainNavigator = rememberMainNavigator()
31-
val redirect: String? = intent.data?.getQueryParameter(REDIRECT)
32-
val host: String? = intent.data?.host
33+
val (host, redirect) = handleDeeplink(intent)
3334

3435
TerningPointTheme {
3536
CompositionLocalProvider(LocalTracker provides tracker) {
@@ -43,7 +44,32 @@ class MainActivity : ComponentActivity() {
4344
}
4445
}
4546

47+
private fun handleDeeplink(intent: Intent?): Pair<String?, String?> {
48+
val uri = intent?.data
49+
val uriString = uri?.toString()
50+
51+
if (uriString.isNullOrEmpty()) return null to null
52+
53+
val host = uri.host
54+
val redirect = uri.getQueryParameter(REDIRECT)
55+
56+
if (!intent.getBooleanExtra(ALREADY_TRACKED, false)
57+
&& intent.getBooleanExtra(FROM_NOTIFICATION, false)
58+
) {
59+
tracker.track(
60+
type = EventType.PUSH_NOTIFICATION,
61+
name = "opened"
62+
)
63+
}
64+
65+
intent.putExtra(ALREADY_TRACKED, true)
66+
67+
return host to redirect
68+
}
69+
4670
companion object {
71+
private const val ALREADY_TRACKED: String = "alreadyTracked"
72+
4773
fun getIntent(
4874
context: Context,
4975
) = Intent(context, MainActivity::class.java)

0 commit comments

Comments
ย (0)