Есть ли лучший способ перенаправления, когда пользователь нажимает уведомление с помощью firebase? - PullRequest
0 голосов
/ 05 августа 2020

fcm / send

{
    "registration_ids": ["futj4oisZk5rvmU3mlX9Sq:APA91bGECOqPhLS95XOraN4NOhAuT9WAZ18vXM5dYtf8nSY-EUkgomTghFVvAaqL46q_-T6NMIMXQzegRlo3majiJDyntRS0qWmzihP-vZJ4RdJqBPqIeDueI3NxxxhUKItGJymVbjazv"],
    "notification": {
        "body": "VI VỆ SINH",
        "title": "Thanh Toán",
        "badge": "1",
        "idata": "hello",
        "sound": "sound.mp3",
        "android_channel_id": "Skycic",
        "click_action": "NotificationNavActivity"
    },
    "data": {
        "solution": "dms",
        "menu": "dealer",
        "id": "ODLA8300002"
    }
}

По-моему, у меня есть активность для intent-filter и FirebaseMessagingService

<activity android:name=".main.activity.NotificationNavActivity">
     <intent-filter>
        <action android:name="NotificationNavActivity" />
        <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</activity>
private fun sendNotification(messageBody: RemoteMessage.Notification, solution: String, menu: String, id: String) {
        val intent = Intent(this, NotificationNavActivity::class.java)
        intent.putExtra("solution", solution)
        intent.putExtra("menu", menu)
        intent.putExtra("id", id)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        val pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT)

        val channelId = resources.getString(R.string.default_notification_channel_id)
        val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
        val notificationBuilder = NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.drawable.icon_app)
                .setStyle(NotificationCompat.BigTextStyle().bigText(messageBody.body))
                .setContentTitle(messageBody.title)
                .setContentText(messageBody.body?.trim())
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent)

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

        // Since android Oreo notification channel is needed.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val audioAttributes = AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .build()
            val channel = NotificationChannel(channelId,
                    resources.getString(R.string.default_notification_channel_id),
                    NotificationManager.IMPORTANCE_DEFAULT)
            channel.setSound(soundUri, audioAttributes)
            channel.enableVibration(true)
            channel.vibrationPattern = longArrayOf(1000, 1000, 1000, 1000, 1000)
            notificationManager.createNotificationChannel(channel)
        }

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build())

        playNotificationSound()
    }

NotificationNavActivity

class NotificationNavActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_notification_nav)

        val solution = intent?.getStringExtra("solution") ?: ""
        val menu = intent?.getStringExtra("menu") ?: ""
        val id = intent?.getStringExtra("id") ?: ""

        val notificationData = NotificationFBData(
                solution = solution,
                menu = menu,
                id = id
        )

        val intent = Intent(this, MainActivity::class.java)
        intent.putExtra(Constants.NOTIFICATION_FB, notificationData)
        startActivity(intent)

        finish()
    }
}

Что ж, в моем NotificationNavActivity я перенаправляю на нужные мне экраны, но я беспокоюсь, когда приложение на переднем плане будет иметь много экземпляров NotificationNavActivity и других после каждого уведомления о нажатии. Есть ли другой способ лучше?

...