feat: 포그라운드 상태에서 FCM data-only 수신 시 인앱 팝업 표시

This commit is contained in:
klaus 2025-04-22 18:06:47 +09:00
parent c0ad98f285
commit b077a361b9
2 changed files with 40 additions and 1 deletions

View File

@ -1,11 +1,16 @@
package kr.co.vividnext.sodalive.base
import android.annotation.SuppressLint
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.LayoutInflater
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.viewbinding.ViewBinding
import io.reactivex.rxjava3.disposables.CompositeDisposable
@ -26,6 +31,13 @@ abstract class BaseActivity<T : ViewBinding>(
resources.displayMetrics.heightPixels
}
private val pointReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val message = intent?.getStringExtra("message") ?: return
showPointDialog(message)
}
}
@SuppressLint("SourceLockedOrientationActivity")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -37,11 +49,33 @@ abstract class BaseActivity<T : ViewBinding>(
setupView()
}
override fun onStart() {
super.onStart()
LocalBroadcastManager.getInstance(this)
.registerReceiver(pointReceiver, IntentFilter("ACTION_POINT_GRANTED"))
}
override fun onStop() {
super.onStop()
LocalBroadcastManager.getInstance(this).unregisterReceiver(pointReceiver)
}
override fun onDestroy() {
compositeDisposable.clear()
super.onDestroy()
}
private fun showPointDialog(message: String) {
SodaDialog(
activity = this,
layoutInflater = layoutInflater,
title = "포인트 지급",
desc = message,
confirmButtonTitle = "확인",
confirmButtonClick = { finish() }
).show(screenWidth)
}
fun showToast(message: String) {
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}

View File

@ -8,6 +8,7 @@ import android.content.Intent
import android.media.RingtoneManager
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import kr.co.vividnext.sodalive.R
@ -20,7 +21,11 @@ class SodaFirebaseMessagingService : FirebaseMessagingService() {
if (SharedPreferenceManager.token.isNotBlank()) {
when {
remoteMessage.data.isNotEmpty() -> {
if (remoteMessage.data["message"]?.isNotBlank() == true) {
if (remoteMessage.data["type"] == "POINT_GRANTED") {
val intent = Intent("ACTION_POINT_GRANTED")
intent.putExtra("message", remoteMessage.data["message"])
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
} else if (remoteMessage.data["message"]?.isNotBlank() == true) {
sendNotification(remoteMessage.data)
}
}