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