feat: 포그라운드 상태에서 FCM data-only 수신 시 인앱 팝업 표시
This commit is contained in:
		@@ -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()
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user