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