feat: fcm 데이터 수신 방식 수정
- data-only 메시지만 수신 방식에서 notification + data로 수신 방식 변경
This commit is contained in:
		| @@ -5,6 +5,9 @@ import android.content.pm.ApplicationInfo | ||||
| import android.content.pm.PackageManager | ||||
| import android.os.Build | ||||
| import androidx.appcompat.app.AppCompatDelegate | ||||
| import androidx.lifecycle.DefaultLifecycleObserver | ||||
| import androidx.lifecycle.LifecycleOwner | ||||
| import androidx.lifecycle.ProcessLifecycleOwner | ||||
| import com.appsflyer.AppsFlyerLib | ||||
| import com.appsflyer.deeplink.DeepLinkResult | ||||
| import com.facebook.FacebookSdk | ||||
| @@ -18,9 +21,10 @@ import kr.co.vividnext.sodalive.di.AppDI | ||||
| import kr.co.vividnext.sodalive.tracking.FirebaseTracking | ||||
| import tech.notifly.Notifly | ||||
|  | ||||
| class SodaLiveApp : Application() { | ||||
| class SodaLiveApp : Application(), DefaultLifecycleObserver { | ||||
|     override fun onCreate() { | ||||
|         super.onCreate() | ||||
|         super<Application>.onCreate() | ||||
|         ProcessLifecycleOwner.get().lifecycle.addObserver(this) | ||||
|  | ||||
|         Logger.addLogAdapter(object : AndroidLogAdapter() { | ||||
|             override fun isLoggable(priority: Int, tag: String?): Boolean { | ||||
| @@ -58,8 +62,7 @@ class SodaLiveApp : Application() { | ||||
|                 packageManager.getApplicationInfo(packageName, 0) | ||||
|             } | ||||
|             debuggable = 0 != appInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE | ||||
|         } catch (e: PackageManager.NameNotFoundException) { | ||||
|             /* debuggable variable will remain false */ | ||||
|         } catch (_: PackageManager.NameNotFoundException) { | ||||
|         } | ||||
|  | ||||
|         return debuggable | ||||
| @@ -123,4 +126,17 @@ class SodaLiveApp : Application() { | ||||
|             BuildConfig.NOTIFLY_PASSWORD, | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     override fun onStart(owner: LifecycleOwner) { | ||||
|         super.onStart(owner) | ||||
|         isAppInForeground = true | ||||
|     } | ||||
|  | ||||
|     override fun onStop(owner: LifecycleOwner) { | ||||
|         isAppInForeground = false | ||||
|     } | ||||
|  | ||||
|     companion object { | ||||
|         var isAppInForeground = false | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package kr.co.vividnext.sodalive.fcm | ||||
| import android.app.NotificationChannel | ||||
| import android.app.NotificationManager | ||||
| import android.app.PendingIntent | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.media.RingtoneManager | ||||
| import android.os.Build | ||||
| @@ -12,6 +11,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager | ||||
| import com.google.firebase.messaging.FirebaseMessagingService | ||||
| import com.google.firebase.messaging.RemoteMessage | ||||
| import kr.co.vividnext.sodalive.R | ||||
| import kr.co.vividnext.sodalive.app.SodaLiveApp | ||||
| import kr.co.vividnext.sodalive.common.Constants | ||||
| import kr.co.vividnext.sodalive.common.SharedPreferenceManager | ||||
| import kr.co.vividnext.sodalive.splash.SplashActivity | ||||
| @@ -25,8 +25,13 @@ class SodaFirebaseMessagingService : FirebaseMessagingService() { | ||||
|                         val intent = Intent("ACTION_POINT_GRANTED") | ||||
|                         intent.putExtra("message", remoteMessage.data["message"]) | ||||
|                         LocalBroadcastManager.getInstance(this).sendBroadcast(intent) | ||||
|                     } else if ( | ||||
|                         SodaLiveApp.isAppInForeground && | ||||
|                         remoteMessage.notification != null | ||||
|                     ) { | ||||
|                         sendNotification(remoteMessage.data, remoteMessage.notification) | ||||
|                     } else if (remoteMessage.data["message"]?.isNotBlank() == true) { | ||||
|                         sendNotification(remoteMessage.data) | ||||
|                         sendNotification(remoteMessage.data, remoteMessage.notification) | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| @@ -37,11 +42,14 @@ class SodaFirebaseMessagingService : FirebaseMessagingService() { | ||||
|         SharedPreferenceManager.pushToken = token | ||||
|     } | ||||
|  | ||||
|     private fun sendNotification(messageData: Map<String, String>) { | ||||
|     private fun sendNotification( | ||||
|         messageData: Map<String, String>, | ||||
|         notification: RemoteMessage.Notification? | ||||
|     ) { | ||||
|         val notificationChannelId = getString(R.string.default_notification_channel_id) | ||||
|         val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) | ||||
|         val notificationManager = | ||||
|             getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager | ||||
|             getSystemService(NOTIFICATION_SERVICE) as NotificationManager | ||||
|  | ||||
|         // Since android Oreo notification channel is needed. | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
| @@ -91,16 +99,19 @@ class SodaFirebaseMessagingService : FirebaseMessagingService() { | ||||
|                 PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT | ||||
|             ) | ||||
|  | ||||
|         val title = notification?.title ?: messageData["title"] | ||||
|         val message = notification?.body ?: messageData["message"] | ||||
|  | ||||
|         val notificationBuilder = NotificationCompat.Builder(this, notificationChannelId) | ||||
|             .setSmallIcon(R.mipmap.ic_launcher) | ||||
|             .setContentTitle(messageData["title"]) | ||||
|             .setContentText(messageData["message"]) | ||||
|             .setContentTitle(title) | ||||
|             .setContentText(message) | ||||
|             .setSound(defaultSoundUri) | ||||
|             .setAutoCancel(true) | ||||
|             .setContentIntent(pendingIntent) | ||||
|  | ||||
|         val bigTextStyle = NotificationCompat.BigTextStyle(notificationBuilder) | ||||
|         bigTextStyle.bigText(messageData["message"]) | ||||
|         bigTextStyle.bigText(message) | ||||
|  | ||||
|         notificationManager.notify(System.currentTimeMillis().toInt(), notificationBuilder.build()) | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user