В настоящее время, когда пользователь получает уведомление, когда приложение флаттера свернуто, и нажимает на уведомление, оно каждый раз перенаправляет пользователя на screen A
. Но я хочу, чтобы пользователь приземлился, скажем, screen C
через Deeplink, который создается вручную. Кроме того, если пользователь сворачивает приложение с любого экрана, нажатие на уведомление приводит пользователя к этому экрану. Но независимо от того, откуда пользователь сворачивает приложение или когда приложение находится в фоновом режиме, нажатие на уведомление должно перенаправлять пользователя к screen C
всегда. Я не реализовывал уведомления раньше, так что я впервые имею дело с этой проблемой, поэтому ищу помощь в этом отношении. Код класса уведомления ниже:
companion object {
const val CHAT_REQUEST_NOTIFICATION_ID = 1775
const val CHAT_CHANNEL_ID = "com.example.com.CHAT_CHANNEL_ID"
const val CHAT_CHANNEL_NAME = "Demo Notifications"
fun showChatNotification(context: Context, userName: String?, body: String?) {
createChatNotificationChannel(context);
val chatIntent = Intent();
val deeplink = generateDeepLink(userName);
chatIntent.setAction(Intent.ACTION_VIEW);
chatIntent.setData(Uri.parse(deeplink));
val chatPendingIntent = PendingIntent.getActivity(context, 100, chatIntent, PendingIntent.FLAG_ONE_SHOT)
val notification: Notification
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notification = Notification.Builder(context, CHAT_CHANNEL_ID)
.setContentIntent(chatPendingIntent)
.setSmallIcon(R.drawable.notification_icon)
.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.ic_app_icon))
.setAutoCancel(true)
.setContentTitle("Message")
.setContentText(body)
.setOngoing(false)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.build()
} else {
notification = Notification.Builder(context)
.setContentIntent(chatPendingIntent)
.setSmallIcon(android.R.drawable.btn_star)
.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.app_icon))
.setAutoCancel(true)
.setVibrate(chatVibrationPattern)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setContentTitle("Message")
.setOngoing(false)
.setContentText(body)
.build()
}
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.notify(CHAT_REQUEST_NOTIFICATION_ID, notification)
}
fun generateDeepLink(userId: String?): String {
return "https://demo.page.link/?link=https://demo.com/chat?user=$userId&apn=com.example.com&efr=1";
}
private fun createChatNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.deleteNotificationChannel(CHAT_CHANNEL_ID)
val importance = NotificationManager.IMPORTANCE_HIGH
val notificationChannel = NotificationChannel(CHAT_CHANNEL_ID, CHAT_CHANNEL_NAME, importance)
notificationChannel.description = "Message"
notificationChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
notificationManager.createNotificationChannel(notificationChannel)
}
}
}
Я использую эмуляторы Android (6.0).