Skip to content

Commit bb2efe5

Browse files
authored
내가 찜한 메뉴 수정 (#167)
* fcm 토큰 전송 로직 수정 * Release 3.5.0-rc.1 * version 수정
1 parent af16118 commit bb2efe5

3 files changed

Lines changed: 44 additions & 12 deletions

File tree

app/src/main/java/com/wafflestudio/siksha2/preferences/SikshaPrefObjects.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,15 @@ class SikshaPrefObjects @Inject constructor(
106106
String::class.java
107107
)
108108

109+
val lastRegisteredFcmToken: Preference<String> =
110+
Preference(
111+
"lastRegisteredFcmToken",
112+
"",
113+
sharedPreferences,
114+
serializer,
115+
String::class.java
116+
)
117+
109118
val alarmEnabled: Preference<Boolean> =
110119
Preference(
111120
"alarmEnabled",

app/src/main/java/com/wafflestudio/siksha2/repositories/UserStatusManager.kt

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.google.android.gms.auth.api.signin.GoogleSignIn
66
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
77
import com.google.android.gms.common.Scopes
88
import com.google.android.gms.common.api.Scope
9+
import com.google.firebase.messaging.FirebaseMessaging
910
import com.kakao.sdk.user.UserApiClient
1011
import com.wafflestudio.siksha2.R
1112
import com.wafflestudio.siksha2.models.User
@@ -21,9 +22,9 @@ import com.wafflestudio.siksha2.network.dto.core.UserDto
2122
import com.wafflestudio.siksha2.network.result.NetworkResult
2223
import com.wafflestudio.siksha2.preferences.SikshaPrefObjects
2324
import com.wafflestudio.siksha2.utils.showToast
24-
import kotlinx.coroutines.CoroutineScope
2525
import kotlinx.coroutines.Dispatchers
26-
import kotlinx.coroutines.launch
26+
import kotlinx.coroutines.tasks.await
27+
import kotlinx.coroutines.withContext
2728
import okhttp3.MultipartBody
2829
import timber.log.Timber
2930
import javax.inject.Inject
@@ -46,7 +47,7 @@ class UserStatusManager @Inject constructor(
4647
sikshaPrefObjects.oAuthProvider.setValue(provider)
4748
sikshaPrefObjects.accessToken.setValue(attachBearerPrefix(accessToken))
4849

49-
registerFcmTokenAfterLogin(attachBearerPrefix(accessToken))
50+
syncFcmTokenIfNeeded(accessToken)
5051
}
5152
else -> { }
5253
}
@@ -167,18 +168,38 @@ class UserStatusManager @Inject constructor(
167168
"Bearer $token"
168169
}
169170

170-
private fun registerFcmTokenAfterLogin(accessToken: String) {
171-
val fcmToken = sikshaPrefObjects.fcmToken.getValue()
171+
suspend fun syncFcmTokenIfNeeded(accessToken: String? = null) {
172+
val bearer = accessToken ?: sikshaPrefObjects.accessToken.getValue()
173+
if (bearer.isBlank()) return
172174

173-
CoroutineScope(Dispatchers.IO).launch {
174-
try {
175-
val response = sikshaApi.registerUserDevice(
176-
mapOf("fcm_token" to fcmToken),
177-
accessToken
175+
// 토큰 불러오기
176+
val currentToken = try {
177+
FirebaseMessaging.getInstance().token.await()
178+
} catch (e: Exception) {
179+
Log.e("UserStatusManager", "FCM token fetch failed", e)
180+
return
181+
}
182+
183+
// prefs에 현재 토큰 저장 (기존 onNewToken으로도 저장되지만 안전하게 동기화)
184+
sikshaPrefObjects.fcmToken.setValue(currentToken)
185+
186+
// 서버 등록 여부 판단
187+
val lastRegistered = sikshaPrefObjects.lastRegisteredFcmToken.getValue()
188+
val needsRegister = lastRegistered.isBlank() || lastRegistered != currentToken
189+
if (!needsRegister) return
190+
191+
// 서버 등록
192+
try {
193+
withContext(Dispatchers.IO) {
194+
sikshaApi.registerUserDevice(
195+
mapOf("fcm_token" to currentToken),
196+
attachBearerPrefix(bearer)
178197
)
179-
} catch (e: Exception) {
180-
Log.e("UserStatusManager", "FCM registration exception", e)
181198
}
199+
sikshaPrefObjects.lastRegisteredFcmToken.setValue(currentToken)
200+
Timber.d("FCM token registered to server: $currentToken")
201+
} catch (e: Exception) {
202+
Log.e("UserStatusManager", "FCM registration exception", e)
182203
}
183204
}
184205
}

app/src/main/java/com/wafflestudio/siksha2/ui/SplashActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ class SplashActivity : AppCompatActivity() {
7979
return@launch
8080
}
8181

82+
userStatusManager.syncFcmTokenIfNeeded()
83+
8284
// 실험
8385
delay(250L)
8486
startActivity(Intent(this@SplashActivity, RootActivity::class.java))

0 commit comments

Comments
 (0)