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 package kr.co.vividnext.sodalive.base
import android.annotation.SuppressLint 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.content.pm.ActivityInfo
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.disposables.CompositeDisposable
@ -26,6 +31,13 @@ abstract class BaseActivity<T : ViewBinding>(
resources.displayMetrics.heightPixels 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") @SuppressLint("SourceLockedOrientationActivity")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -37,11 +49,33 @@ abstract class BaseActivity<T : ViewBinding>(
setupView() 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() { override fun onDestroy() {
compositeDisposable.clear() compositeDisposable.clear()
super.onDestroy() super.onDestroy()
} }
private fun showPointDialog(message: String) {
SodaDialog(
activity = this,
layoutInflater = layoutInflater,
title = "포인트 지급",
desc = message,
confirmButtonTitle = "확인",
confirmButtonClick = { finish() }
).show(screenWidth)
}
fun showToast(message: String) { fun showToast(message: String) {
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show() Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
} }

View File

@ -8,6 +8,7 @@ import android.content.Intent
import android.media.RingtoneManager import android.media.RingtoneManager
import android.os.Build import android.os.Build
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage import com.google.firebase.messaging.RemoteMessage
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
@ -20,7 +21,11 @@ class SodaFirebaseMessagingService : FirebaseMessagingService() {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
when { when {
remoteMessage.data.isNotEmpty() -> { 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) sendNotification(remoteMessage.data)
} }
} }