Я сталкиваюсь с проблемой с глубокими ссылками в моем приложении Android. Когда пользователь получает push -уведомление с глубокой ссылкой, оно работает отлично, если приложение уже работает, но когда приложение полностью закрыто (не в недавних приложениях), нажатие уведомления открывает приложение, но полностью игнорирует глубокую ссылку. Схема: AppName: // Chat/{chatid}/{userId}
Проблема
Когда приложение запускается или в фоне: навигация по глубокой ссылке />
[*] Служба обмена сообщениями пожарной базы (appfireBaseMessAgingService.kt)
Kotlin < /p>
переопределить веселье onmessegereceived (remotemessage: remotemessage) {
// Обработка сообщений ... vary vary = "
"
"
"
«Чат»
var deeplink: String? = null
var notificationId = System.CurrentTimeMillis (). toInt () < /p>
if (remoteMessage.data.isNotEmpty()) {
title = remoteMessage.data["title"] ?: ""
message = remoteMessage.data["message"] ?: ""
category = remoteMessage.data["category"] ?: category
deepLink = remoteMessage.data["deepLink"]
// ...
}
// Show notification if we have content
if (title.isNotEmpty() || message.isNotEmpty()) {
showNotification(notificationId, title, message, category, deepLink)
}
< /code>
} < /p>
private fun infotification (
notificationId: int,
title: string,
Сообщение: строка,
Категория: строка,
deeplink: string?
) {br /> val intent = if (! /> intent(intent.action_view, deeplink.touri ()). Применить {
package< /code> = packageName
addflags(intent.flag_activity_clear_top)
}
} else {
intent (this, mainActivity :: class.java) .apply {
addflags(intent.flag_activity_clear_top) /> addflags(intent.flag_activity_new_task)
}
} < /p>
Log.d("FCMService", "Creating notification with intent: $intent")
Log.d("FCMService", "Intent URI: ${intent.data}")
val pendingIntent = PendingIntent.getActivity(
this,
System.currentTimeMillis().toInt(),
intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_ONE_SHOT
)
// Build notification
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH)
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(notificationId, notificationBuilder.build())
< /code>
}
2. MANEACTIVITION Глубокая обработка канала
Kotlinoverride Fun Oncreate (SaveDinStanceState: Bundle?) // Setup UI, etc...
setContent {
navController = rememberNavController()
AppAndroidTheme {
// Main content...
}
}
if (intent?.action == Intent.ACTION_VIEW) {
handleDeepLink(intent)
}
< /code>
} < /p>
переопределить веселье onnewintent (intent: intent) {
super.onnewintent(intent)> // Set the new intent
setIntent(intent)
navController.handleDeepLink(intent)
// Handle it if it's a deep link
if (intent.action == Intent.ACTION_VIEW) {
handleDeepLink(intent)
}
< /code>
} < /p>
Private Fun Handleeeplink (intent: intent) {
val uri = intent.data
log.d(tag, «Обработка глубокой ссылки uri: $ uri») < /p>
if (uri != null && uri.scheme == "appNAme") {
when (uri.host) {
"chat" -> {
// Extract path segments
val pathSegments = uri.pathSegments
Log.d(TAG, "Path segments: $pathSegments")
if (pathSegments.size >= 2) {
val chatId = pathSegments[0]
val userId = pathSegments[1]
Log.d(TAG, "Navigating to chat: chatId=$chatId, userId=$userId")
// Wait for UI to be ready before navigating
Handler(Looper.getMainLooper()).postDelayed({
navigateToChat(chatId, userId)
}, 300)
}
}
}
}
< /code>
} < /p>
private fun navigateToChat(chatId: String, userId: String) {
try {
Log.d(TAG, "Attempting navigation to chat screen with chatId=$chatId, userId=$userId")
navController.navigate(MainScreens.ChatScreen(chatId, userId)) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
Log.d(TAG, "Navigation completed")
} catch (e: Exception) {
Log.e(TAG, "Navigation error", e)
}
}
< /code>
< /li>
Конфигурация глубокой ссылки Navgraph Kotlin < /p>
composable(
deeplinks = listof (
navdeeptrink< mainscreens.chatscreen>(br /> "uri /" " />){ uriPattern = "appANme://chat/{chatId}/{selectedProviderId}"}
)
) {
val chatRoute: MainScreens.ChatScreen = it.toRoute()
ChatScreen(
chatId = chatRoute.chatId,
selectedUserId = chatRoute.selectedProviderId,
onNavigateBack = { navController.popBackStack() }
)
}
AndroidManifest.xml
< /code>
< /li>
< /ol>
Что я попробовал < /p>
Использование активности батутного /вскрытия для обработки глубоких ссылок
/> Различные настройки запуска в AndroidManifest
с использованием вещательного приемника для обработки глубоких ссылок
с использованием TaskStackBuilder для создания правильного спинного стека
Различные задержки с времени для обработки глубокой ссылки < /p>
Отладочные журналы
Когда приложение уже работает, я вижу правильные журналы: < /p>
FCMService: Message received: notification=com.google.firebase.messaging.RemoteMessage$Notification@6bbba6f, data={messageId=1454719f-82ff-42d9-856c-27b64e57921d, chatId=wKu3Y4NHzPDSmBQG9sOt, messageType=TEXT, category=chat, timestamp=1743720987827, title=Pixel 9 sent you a message, click_action=android.intent.action.VIEW, deepLink=appNAme://chat/wKu3Y4NHzPDSmBQG9sOt/bxlAM2GCMCcwHLjHSL0cNqmef4r1, message=fed up menhh, senderId=bxlAM2GCMCcwHLjHSL0cNqmef4r1}
DeepLinkDebug: onNewIntent called with intent: Intent { act=android.intent.action.VIEW dat=appNAme://chat/... flg=0x14000000 pkg=com.talos.appNAme cmp=com.talos.appNAme/.ui.MainActivity }
DeepLinkDebug: Intent action: android.intent.action.VIEW
DeepLinkDebug: Intent data: appNAme://chat/wKu3Y4NHzPDSmBQG9sOt/bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Processing deep link URI: appNAme://chat/wKu3Y4NHzPDSmBQG9sOt/bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Path segments: [wKu3Y4NHzPDSmBQG9sOt, bxlAM2GCMCcwHLjHSL0cNqmef4r1]
DeepLinkDebug: Navigating to chat: chatId=wKu3Y4NHzPDSmBQG9sOt, userId=bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Attempting navigation to chat screen with chatId=wKu3Y4NHzPDSmBQG9sOt, userId=bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Navigation completed
< /code>
Но когда приложение полностью закрыто, я вообще не вижу журналов при нажатии на уведомление, только стандартные журналы запуска приложения при его открытии: < /p>
DeepLinkDebug: MainActivity onCreate with intent: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 pkg=com.talos.appNAme cmp=com.talos.appNAme/.ui.MainActivity bnds=[440,2416][671,2676] }
DeepLinkDebug: Intent action: android.intent.action.MAIN
DeepLinkDebug: Intent data: null
DeepLinkDebug: Intent extras: null
< /code>
Мой вопрос
Как я могу получить глубокие ссылки для правильной работы, когда приложение будет запущено из полностью закрытого состояния через уведомление Push? Кажется, что глубокая ссылка намерение теряется или не передается должным образом, когда приложение началось.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... art-only-w
Android: Firebase Push -уведомление Глубокие ссылки не работают над холодным стартом (работает только тогда, когда прило ⇐ Android
Форум для тех, кто программирует под Android
1744223315
Anonymous
Я сталкиваюсь с проблемой с глубокими ссылками в моем приложении Android. Когда пользователь получает push -уведомление с глубокой ссылкой, оно работает отлично, если приложение уже работает, но когда приложение полностью закрыто (не в недавних приложениях), нажатие уведомления открывает приложение, но полностью игнорирует глубокую ссылку. Схема: AppName: // Chat/{chatid}/{userId}
Проблема
Когда приложение запускается или в фоне: навигация по глубокой ссылке />
[*] Служба обмена сообщениями пожарной базы (appfireBaseMessAgingService.kt)
Kotlin < /p>
переопределить веселье onmessegereceived (remotemessage: remotemessage) {
// Обработка сообщений ... vary vary = "
"
"
"
«Чат»
var deeplink: String? = null
var notificationId = System.CurrentTimeMillis (). toInt () < /p>
if (remoteMessage.data.isNotEmpty()) {
title = remoteMessage.data["title"] ?: ""
message = remoteMessage.data["message"] ?: ""
category = remoteMessage.data["category"] ?: category
deepLink = remoteMessage.data["deepLink"]
// ...
}
// Show notification if we have content
if (title.isNotEmpty() || message.isNotEmpty()) {
showNotification(notificationId, title, message, category, deepLink)
}
< /code>
} < /p>
private fun infotification (
notificationId: int,
title: string,
Сообщение: строка,
Категория: строка,
deeplink: string?
) {br /> val intent = if (! /> intent(intent.action_view, deeplink.touri ()). Применить {
package< /code> = packageName
addflags(intent.flag_activity_clear_top)
}
} else {
intent (this, mainActivity :: class.java) .apply {
addflags(intent.flag_activity_clear_top) /> addflags(intent.flag_activity_new_task)
}
} < /p>
Log.d("FCMService", "Creating notification with intent: $intent")
Log.d("FCMService", "Intent URI: ${intent.data}")
val pendingIntent = PendingIntent.getActivity(
this,
System.currentTimeMillis().toInt(),
intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_ONE_SHOT
)
// Build notification
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH)
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(notificationId, notificationBuilder.build())
< /code>
}
2. MANEACTIVITION Глубокая обработка канала
Kotlinoverride Fun Oncreate (SaveDinStanceState: Bundle?) // Setup UI, etc...
setContent {
navController = rememberNavController()
AppAndroidTheme {
// Main content...
}
}
if (intent?.action == Intent.ACTION_VIEW) {
handleDeepLink(intent)
}
< /code>
} < /p>
переопределить веселье onnewintent (intent: intent) {
super.onnewintent(intent)> // Set the new intent
setIntent(intent)
navController.handleDeepLink(intent)
// Handle it if it's a deep link
if (intent.action == Intent.ACTION_VIEW) {
handleDeepLink(intent)
}
< /code>
} < /p>
Private Fun Handleeeplink (intent: intent) {
val uri = intent.data
log.d(tag, «Обработка глубокой ссылки uri: $ uri») < /p>
if (uri != null && uri.scheme == "appNAme") {
when (uri.host) {
"chat" -> {
// Extract path segments
val pathSegments = uri.pathSegments
Log.d(TAG, "Path segments: $pathSegments")
if (pathSegments.size >= 2) {
val chatId = pathSegments[0]
val userId = pathSegments[1]
Log.d(TAG, "Navigating to chat: chatId=$chatId, userId=$userId")
// Wait for UI to be ready before navigating
Handler(Looper.getMainLooper()).postDelayed({
navigateToChat(chatId, userId)
}, 300)
}
}
}
}
< /code>
} < /p>
private fun navigateToChat(chatId: String, userId: String) {
try {
Log.d(TAG, "Attempting navigation to chat screen with chatId=$chatId, userId=$userId")
navController.navigate(MainScreens.ChatScreen(chatId, userId)) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
Log.d(TAG, "Navigation completed")
} catch (e: Exception) {
Log.e(TAG, "Navigation error", e)
}
}
< /code>
< /li>
Конфигурация глубокой ссылки Navgraph Kotlin < /p>
composable(
deeplinks = listof (
navdeeptrink< mainscreens.chatscreen>(br /> "uri /" " />){ uriPattern = "appANme://chat/{chatId}/{selectedProviderId}"}
)
) {
val chatRoute: MainScreens.ChatScreen = it.toRoute()
ChatScreen(
chatId = chatRoute.chatId,
selectedUserId = chatRoute.selectedProviderId,
onNavigateBack = { navController.popBackStack() }
)
}
AndroidManifest.xml
< /code>
< /li>
< /ol>
Что я попробовал < /p>
Использование активности батутного /вскрытия для обработки глубоких ссылок
/> Различные настройки запуска в AndroidManifest
с использованием вещательного приемника для обработки глубоких ссылок
с использованием TaskStackBuilder для создания правильного спинного стека
Различные задержки с времени для обработки глубокой ссылки < /p>
Отладочные журналы
Когда приложение уже работает, я вижу правильные журналы: < /p>
FCMService: Message received: notification=com.google.firebase.messaging.RemoteMessage$Notification@6bbba6f, data={messageId=1454719f-82ff-42d9-856c-27b64e57921d, chatId=wKu3Y4NHzPDSmBQG9sOt, messageType=TEXT, category=chat, timestamp=1743720987827, title=Pixel 9 sent you a message, click_action=android.intent.action.VIEW, deepLink=appNAme://chat/wKu3Y4NHzPDSmBQG9sOt/bxlAM2GCMCcwHLjHSL0cNqmef4r1, message=fed up menhh, senderId=bxlAM2GCMCcwHLjHSL0cNqmef4r1}
DeepLinkDebug: onNewIntent called with intent: Intent { act=android.intent.action.VIEW dat=appNAme://chat/... flg=0x14000000 pkg=com.talos.appNAme cmp=com.talos.appNAme/.ui.MainActivity }
DeepLinkDebug: Intent action: android.intent.action.VIEW
DeepLinkDebug: Intent data: appNAme://chat/wKu3Y4NHzPDSmBQG9sOt/bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Processing deep link URI: appNAme://chat/wKu3Y4NHzPDSmBQG9sOt/bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Path segments: [wKu3Y4NHzPDSmBQG9sOt, bxlAM2GCMCcwHLjHSL0cNqmef4r1]
DeepLinkDebug: Navigating to chat: chatId=wKu3Y4NHzPDSmBQG9sOt, userId=bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Attempting navigation to chat screen with chatId=wKu3Y4NHzPDSmBQG9sOt, userId=bxlAM2GCMCcwHLjHSL0cNqmef4r1
DeepLinkDebug: Navigation completed
< /code>
Но когда приложение полностью закрыто, я вообще не вижу журналов при нажатии на уведомление, только стандартные журналы запуска приложения при его открытии: < /p>
DeepLinkDebug: MainActivity onCreate with intent: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 pkg=com.talos.appNAme cmp=com.talos.appNAme/.ui.MainActivity bnds=[440,2416][671,2676] }
DeepLinkDebug: Intent action: android.intent.action.MAIN
DeepLinkDebug: Intent data: null
DeepLinkDebug: Intent extras: null
< /code>
Мой вопрос
Как я могу получить глубокие ссылки для правильной работы, когда приложение будет запущено из полностью закрытого состояния через уведомление Push? Кажется, что глубокая ссылка намерение теряется или не передается должным образом, когда приложение началось.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79565078/android-firebase-push-notification-deep-links-not-working-on-cold-start-only-w[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия