Skip to content

Commit 402b547

Browse files
committed
[BOOK-430] feat: deviceId, fcmToken 서버 등록 로직 구현
- FID(Firebase Installation ID)를 기기 ID로 사용하여 FCM 토큰과 함께 서버에 등록하도록 `upsertDevice` API를 호출하는 로직 추가
1 parent fdd3317 commit 402b547

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.ninecraft.booket.core.data.impl.di
22

33
import com.google.firebase.Firebase
4+
import com.google.firebase.installations.FirebaseInstallations
5+
import com.google.firebase.installations.installations
46
import com.google.firebase.messaging.FirebaseMessaging
57
import com.google.firebase.messaging.messaging
68
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
@@ -32,4 +34,8 @@ internal object FirebaseModule {
3234
@Singleton
3335
@Provides
3436
fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging
37+
38+
@Singleton
39+
@Provides
40+
fun provideFirebaseInstallation(): FirebaseInstallations = Firebase.installations
3541
}

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.ninecraft.booket.core.data.impl.repository
22

3+
import com.google.firebase.installations.FirebaseInstallations
34
import com.google.firebase.messaging.FirebaseMessaging
45
import com.ninecraft.booket.core.common.utils.runSuspendCatching
56
import com.ninecraft.booket.core.data.api.repository.UserRepository
67
import com.ninecraft.booket.core.data.impl.mapper.toModel
78
import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource
89
import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource
9-
import com.ninecraft.booket.core.network.request.FcmTokenRequest
10+
import com.ninecraft.booket.core.network.request.DeviceRegistrationRequest
1011
import com.ninecraft.booket.core.network.request.NotificationSettingsRequest
1112
import com.ninecraft.booket.core.network.request.TermsAgreementRequest
1213
import com.ninecraft.booket.core.network.service.ReedService
@@ -21,6 +22,7 @@ internal class DefaultUserRepository @Inject constructor(
2122
private val onboardingDataSource: OnboardingDataSource,
2223
private val notificationDataSource: NotificationDataSource,
2324
private val firebaseMessaging: FirebaseMessaging,
25+
private val firebaseInstallations: FirebaseInstallations,
2426
) : UserRepository {
2527
override suspend fun agreeTerms(termsAgreed: Boolean) = runSuspendCatching {
2628
service.agreeTerms(TermsAgreementRequest(termsAgreed)).toModel()
@@ -45,12 +47,12 @@ internal class DefaultUserRepository @Inject constructor(
4547
return@runSuspendCatching
4648
}
4749

48-
updateFcmToken(newToken)
50+
registerDevice(newToken)
4951
setFcmToken(newToken)
5052
}
5153

5254
override suspend fun syncFcmToken(fcmToken: String): Result<Unit> = runSuspendCatching {
53-
updateFcmToken(fcmToken)
55+
registerDevice(fcmToken)
5456
setFcmToken(fcmToken)
5557
}
5658

@@ -88,7 +90,17 @@ internal class DefaultUserRepository @Inject constructor(
8890
notificationDataSource.setFcmToken(fcmToken)
8991
}
9092

91-
private suspend fun updateFcmToken(fcmToken: String) {
92-
service.updateFcmToken(FcmTokenRequest(fcmToken))
93+
private suspend fun getDeviceId(): String {
94+
return try {
95+
firebaseInstallations.id.await()
96+
} catch (e: Exception) {
97+
Logger.e("Failed to fetch device ID: ${e.message}")
98+
throw e
99+
}
100+
}
101+
102+
private suspend fun registerDevice(fcmToken: String) {
103+
val deviceId = getDeviceId()
104+
service.upsertDevice(DeviceRegistrationRequest(deviceId, fcmToken))
93105
}
94106
}

0 commit comments

Comments
 (0)