Сделать так, чтобы уведомления в андроид приложении выскакивали сверху (heads-up)
Есть приложение для андроида, в котором реализованы push-уведомления, но они работают не так, как мне хотелось бы. Если приложение открыто, то уведомления появляются сверху и их видно. Но если приложение свернуто или не запущено, то уведомления приходят, но беззвучно, и узнать о том, что уведомление пришло, можно только открыв шторку и найдя его.
Вот так у меня реализованы уведомления в файле MessagingService.kt
package app.provapp.online
import android.Manifest
import android.annotation.SuppressLint
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.media.RingtoneManager
import android.os.Build
import android.util.Log
import android.widget.RemoteViews
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
const val channelId = "main_channel"
SuppressLint("MissingFirebaseInstanceTokenRefresh") # Убрал знак собаки, потому что фриланс не публикует проект, думая, что это имейл 🙂
class MessagingService: FirebaseMessagingService() {
override fun onMessageReceived(message: RemoteMessage) {
message.notification!!.title?.let { message.notification!!.body?.let { it1 ->
createNotificationChannel(it, it1
) } }
Log.d("SDDS", "DSADAS")
}
private fun createNotificationChannel(title: String, body: String) {
val notificationChannel = NotificationChannel(channelId,
"Message Channel",
NotificationManager.IMPORTANCE_HIGH)
notificationChannel.canBypassDnd()
notificationChannel.setBypassDnd(true)
notificationChannel.enableVibration(true)
val notificationManager = NotificationManagerCompat.from(this)
notificationManager.createNotificationChannel(notificationChannel)
val notification: Notification = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(body)
.setChannelId(channelId)
.setDefaults(Notification.DEFAULT_ALL)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setAutoCancel(true)
.setOnlyAlertOnce(true)
.setPriority(NotificationCompat.PRIORITY_HIGH) // heads-up
.setFullScreenIntent(null, true)
.build()
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.POST_NOTIFICATIONS
) != PackageManager.PERMISSION_GRANTED
) {
return
}
notificationManager.notify(0, notification)
}
}
То же самое приложение имеет версию для айфона, и там уведомления работают как надо - они всегда появляются сверху, даже если приложение не запущено, таким образом пользователь видит, что уведомление пришло.
Отзыв заказчика о сотрудничестве с Родіоном Шуліком
Сделать так, чтобы уведомления в андроид приложении выскакивали сверху (heads-up)Очень приятно было работать.
Выполнил все пожелания из технического задания плюс еще сверху то, что я запрашивал, он реализовал.
Всем рекомендую фрилансера!
Отзыв фрилансера о сотрудничестве с Романом Наливайко
Сделать так, чтобы уведомления в андроид приложении выскакивали сверху (heads-up)Очень приятный и вежливый заказчик)
-
1938 42 2 Давайте разберемся в чем проблема.
У меня есть опыт с пушами.
Обращайтесь.
-
231 1 0 Привет!
Я готов взять на себя выполнение этой задачи. У меня около трех лет опыта разработки Android-приложений, в частности, я уже работал с подобными функциями. Могу быстро и качественно реализовать необходимый функционал.
Готов обсудить все детали в личных сообщениях. Могу приступить к работе сегодня.
Буду рад сотрудничеству!
-
1. Сповіщення обробляється у фоновому режимі Firebase SDK, але ви не встановлюєте правильний контекст для звукового сигналу.
2. Пріоритет повідомлення може бути недостатнім (хоча у вас стоїть PRIORITY_HIGH).
3. FullScreenIntent може бути некоректно реалізований або не потрібний.
Ось кілька способів вирішити проблему:
1. Налаштуйте звуковий сигнал
У вашому методі createNotificationChannel можна додати кастомний звук для каналу:
val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
notificationChannel.setSound(soundUri, Notification.AUDIO_ATTRIBUTES_DEFAULT)2. Оновіть FullScreenIntent
Замість null використовуйте PendingIntent для відкриття Activity, якщо це потрібно:
val intent = Intent(this, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
val pendingIntent = PendingIntent.getActivity(
this, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val notification: Notification = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(body)
.setChannelId(channelId)
.setDefaults(Notification.DEFAULT_ALL)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setFullScreenIntent(pendingIntent, true) // Важливо!
.build()Це змушує Android відображати сповіщення навіть тоді, коли додаток не запущений.
3. Переконайтеся, що IMPORTANCE_HIGH
Канал сповіщень має мати максимальний рівень важливості, як ви вказали:
notificationChannel.importance = NotificationManager.IMPORTANCE_HIGH
4. Перевірте дозволи на сповіщення
Переконайтеся, що у вас є дозвіл POST_NOTIFICATIONS, який потрібен з Android 13. Для пристроїв нижче Android 13 це не потрібно:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.POST_NOTIFICATIONS
) != PackageManager.PERMISSION_GRANTED
) {
// Запросіть дозвіл
return
}
}5. Обробка сповіщень у фоновому режимі
В Android, коли додаток у фоновому режимі, Firebase передає сповіщення напряму у системний менеджер сповіщень. У такому разі вам потрібно обробляти дані через RemoteMessage.data, якщо використовуються data-сповіщення:
override fun onMessageReceived(message: RemoteMessage) {
if (message.data.isNotEmpty()) {
val title = message.data["title"] ?: "Default Title"
val body = message.data["body"] ?: "Default Body"
createNotificationChannel(title, body)
} else {
message.notification?.let {
createNotificationChannel(it.title ?: "Default Title", it.body ?: "Default Body")
}
}
}6. Перевірте серверну конфігурацію
Якщо ви використовуєте Firebase Console для надсилання сповіщень, переконайтеся, що обираєте опцію “High Priority”. Якщо це ваш сервер, у JSON-даних встановіть priority: "high":
{
"to": "DEVICE_TOKEN",
"priority": "high",
"notification": {
"title": "Заголовок",
"body": "Текст повідомлення"
}
}Після внесення цих змін перевірте додаток. Це має вирішити проблему із фоновими сповіщеннями
-
Ви отримуєте сповіщення, коли додаток не запущений? Чи тільки тоді, коли він запущений?
Є рішення для обох випадків…
-
Які пермішини є в маніфесті?
-
Здравствуйте, вы хотите, чтобы экран пробуждался, когда приходит уведомления?
-
Актуальные фриланс-проекты в категории Разработка под Android
Нужен человек, который сейчас физически в ЯпонииНужно протестировать открытие ссылки и записать экран смартфона. Ничего сложного. Любой сможет это сделать. Разработка под Android, Тестирование и QA ∙ 1 день 16 часов назад ∙ 3 ставки |
Скрипт для модификации APKУ меня есть скрипт под старые версии APK Minecraft, который позволял делать версию игры с более меньшим весом за счет того, что там удалялась музыка. Также, скрипт делал клон Minecraft (чтобы можно было иметь две игры майнкрафт на своем устройстве...), а также во вкладку… Java, Разработка под Android ∙ 2 дня 2 часа назад ∙ 12 ставок |
Необходимо разработать мобильное приложение для Android и iOSНеобходимо разработать мобильное приложение для Android и iOS, которое будет работать как мессенджер с нашим AI через готовый Backend и API.Функционал: авторизация; список AI-ассистентов; чат; отправка и получение сообщений; поддержка WebSockets (диалог в реальном времени);… Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 3 дня 12 часов назад ∙ 43 ставки |
Трансформация сайта intebwio на платформы: android, ios, windows, linux 5000$
223 588 UAH
Привет! Я ищу опытного программиста, команду или агентстводля комплексного переноса моей инновационной веб-платформы Intebwio напосвященные приложения для систем: Android, iOS, Windows и Linux.О продукте: Intebwio — это основанный на искусственном интеллектебраузер/поисковик… Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 3 дня 14 часов назад ∙ 19 ставок |
Разработчик Ton Blockchain 10000 $
447 283 UAH
Здравствуйте! Я ищу фрилансера-разработчика TON для [краткосрочного / долгосрочного] проекта. Мне нужен кто-то, кто может помочь мне с [конкретно укажите, что вам нужно, например, написание смарт-контракта для стейкинга / подключение фронтенда к TonConnect / создание токена].… Разработка под Android ∙ 3 дня 21 час назад ∙ 15 ставок |


