From 3ff18db85cf88c09d9607cc989cdeef5f7ff2097 Mon Sep 17 00:00:00 2001 From: sujin-kk Date: Wed, 17 Aug 2022 11:16:04 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix=20:=20fcm=20=EC=86=8C=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A7=81=EC=A0=91=20=EB=B6=80?= =?UTF-8?q?=ED=8C=85=20=EB=AA=A8=EB=93=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 3 +- .../service/FairerFirebaseMessagingService.kt | 35 ++++++------------- .../deptromeet/housekeeper/Dependencies.kt | 2 ++ 4 files changed, 16 insertions(+), 25 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8ecc5506..b43d278a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -108,6 +108,7 @@ dependencies { implementation Dependencies.firebasektx implementation Dependencies.firebasedynamiclink implementation Dependencies.firebasemessaging + implementation Dependencies.firebaseMessagingDirectboot implementation Dependencies.workermanager diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4eba4528..4419fd02 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,7 +50,8 @@ + android:exported="false" + android:directBootAware="true"> diff --git a/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt b/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt index 41efca41..14fe8071 100644 --- a/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt +++ b/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt @@ -8,6 +8,7 @@ import android.app.PendingIntent import android.app.PendingIntent.FLAG_ONE_SHOT import android.content.Context import android.content.Intent +import android.media.RingtoneManager import android.os.Build import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat @@ -34,8 +35,9 @@ class FairerFirebaseMessagingService: FirebaseMessagingService() { @Override override fun onMessageReceived(message: RemoteMessage) { super.onMessageReceived(message) - Timber.d("From: ${message.from}") + Timber.tag(TAG_FCM).d("From: ${message.from}") if (message.data.isNotEmpty()) { + // payload : 전송된 데이터 Timber.tag(TAG_FCM).d("Message data payload: ${message.data}") @@ -50,10 +52,14 @@ class FairerFirebaseMessagingService: FirebaseMessagingService() { } } + private fun handleNow() { + + } + @SuppressLint("UnspecifiedImmutableFlag") private fun showNotification(messageTitle: String?, messageBody: String?) { val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager - val notificationID = Random.nextInt() // 고유 id를 지정 + val notificationID = (System.currentTimeMillis() / 7).toInt() // 고유 ID 지정 createNotificationChannel(notificationManager) @@ -61,14 +67,16 @@ class FairerFirebaseMessagingService: FirebaseMessagingService() { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) } val pendingIntent = PendingIntent.getActivity(this, notificationID, intent, FLAG_ONE_SHOT) + val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.mipmap.ic_launcher_fairer) .setContentTitle(messageTitle) .setContentText(messageBody) .setPriority(NotificationCompat.PRIORITY_DEFAULT) - .setContentIntent(pendingIntent) + .setSound(soundUri) // 알림 소리 .setAutoCancel(true) // 알림 터치 시 자동으로 삭제 + .setContentIntent(pendingIntent) .build() notificationManager.notify(notificationID, notificationBuilder) @@ -85,27 +93,6 @@ class FairerFirebaseMessagingService: FirebaseMessagingService() { notificationManager.createNotificationChannel(channel) } - // TODO : WorkerManager 이용해서 FCM Managing - private fun sendFCMTokenToServer(context: Context) { - val constraints = Constraints.Builder() - /* 네트워크 연결상태 & 배터리 부족에 대한 제약 조건 */ - .setRequiredNetworkType(NetworkType.CONNECTED) - .setRequiresCharging(true) - .build() - - // 10, 20, 40초 늘려가며 retry - val workRequest = OneTimeWorkRequestBuilder() - .setConstraints(constraints) - .setBackoffCriteria( - BackoffPolicy.LINEAR, - OneTimeWorkRequest.MIN_BACKOFF_MILLIS, - TimeUnit.MILLISECONDS) - .build() - - val workManager = WorkManager.getInstance(context) - workManager.enqueue(workRequest) - } - companion object { private const val CHANNEL_NAME = "FairerNotification" private const val CHANNEL_DESCRIPTION = "Channel For Fairer Notification" diff --git a/buildSrc/src/main/kotlin/deptromeet/housekeeper/Dependencies.kt b/buildSrc/src/main/kotlin/deptromeet/housekeeper/Dependencies.kt index 92ac7bfd..1759c952 100644 --- a/buildSrc/src/main/kotlin/deptromeet/housekeeper/Dependencies.kt +++ b/buildSrc/src/main/kotlin/deptromeet/housekeeper/Dependencies.kt @@ -89,10 +89,12 @@ object Dependencies { private const val FIREBASE_BOM = "30.0.2" private const val FIREBASE_MESSAGING = "23.0.6" + private const val FIREBASE_MESSAGING_DIRECTBOOT = "20.2.0" const val firebaseBOM = "com.google.firebase:firebase-bom:$FIREBASE_BOM" const val firebasektx = "com.google.firebase:firebase-analytics-ktx" const val firebasedynamiclink = "com.google.firebase:firebase-dynamic-links-ktx" const val firebasemessaging = "com.google.firebase:firebase-messaging-ktx:$FIREBASE_MESSAGING" + const val firebaseMessagingDirectboot = "com.google.firebase:firebase-messaging-directboot:$FIREBASE_MESSAGING_DIRECTBOOT" private const val GLIDE = "4.13.0" const val glide ="com.github.bumptech.glide:glide:$GLIDE" From 103d6b4507cb1c8bf1342b7fc9924c503d2edfcf Mon Sep 17 00:00:00 2001 From: sujin-kk Date: Wed, 17 Aug 2022 11:18:05 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore=20:=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../housekeeper/service/FCMWorker.kt | 30 ------------------- .../service/FairerFirebaseMessagingService.kt | 4 --- .../housekeeper/ui/LoginViewModel.kt | 5 ---- 3 files changed, 39 deletions(-) delete mode 100644 app/src/main/java/com/depromeet/housekeeper/service/FCMWorker.kt diff --git a/app/src/main/java/com/depromeet/housekeeper/service/FCMWorker.kt b/app/src/main/java/com/depromeet/housekeeper/service/FCMWorker.kt deleted file mode 100644 index 74ae6e2f..00000000 --- a/app/src/main/java/com/depromeet/housekeeper/service/FCMWorker.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.depromeet.housekeeper.service - -import android.content.Context -import androidx.work.CoroutineWorker -import androidx.work.ForegroundInfo -import androidx.work.WorkerParameters -import com.depromeet.housekeeper.local.PrefsManager -import com.depromeet.housekeeper.model.Token -import com.depromeet.housekeeper.network.remote.repository.Repository -import kotlinx.coroutines.flow.collect -import timber.log.Timber - -class FCMWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { - override suspend fun getForegroundInfo(): ForegroundInfo { - return super.getForegroundInfo() - } - - override suspend fun doWork(): Result { - Repository.saveToken(Token(PrefsManager.deviceToken)) - .runCatching { - collect { - Timber.d("fcm 토큰 보내기 성공 + $this") - } - } - .onFailure { - return Result.retry() - } - return Result.success() - } -} diff --git a/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt b/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt index 14fe8071..b80b488a 100644 --- a/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt +++ b/app/src/main/java/com/depromeet/housekeeper/service/FairerFirebaseMessagingService.kt @@ -52,10 +52,6 @@ class FairerFirebaseMessagingService: FirebaseMessagingService() { } } - private fun handleNow() { - - } - @SuppressLint("UnspecifiedImmutableFlag") private fun showNotification(messageTitle: String?, messageBody: String?) { val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager diff --git a/app/src/main/java/com/depromeet/housekeeper/ui/LoginViewModel.kt b/app/src/main/java/com/depromeet/housekeeper/ui/LoginViewModel.kt index 4fe76316..1dfc7097 100644 --- a/app/src/main/java/com/depromeet/housekeeper/ui/LoginViewModel.kt +++ b/app/src/main/java/com/depromeet/housekeeper/ui/LoginViewModel.kt @@ -1,22 +1,17 @@ package com.depromeet.housekeeper.ui import android.app.Application -import android.content.Context import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope -import androidx.work.* import com.depromeet.housekeeper.local.PrefsManager import com.depromeet.housekeeper.model.SocialType import com.depromeet.housekeeper.model.Token import com.depromeet.housekeeper.network.remote.model.LoginResponse import com.depromeet.housekeeper.network.remote.repository.Repository -import com.depromeet.housekeeper.service.FCMWorker import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import timber.log.Timber -import java.util.concurrent.TimeUnit class LoginViewModel(application: Application) : AndroidViewModel(application) {