Я прочитал ~ 10 подобных вопросов на SO, а также на некоторых других страницах поиска Google и документации, и я до сих пор не могу понять, в чем проблема.
По сути, если приложение закрыто (или находится в фоновом режиме), значок push-уведомления отображается в виде белого квадрата.
Если приложение запущено, оно отображается с нужным мне значком.
Моя иконка прозрачная и просто белая. Это простая иконка, созданная самим Google.
Вот что у меня есть, и где может быть проблема. Наше приложение имеет несколько модулей. Я остановлюсь на 3 из них:
- Приложение
- код приложения
- Отправить уведомление
Я создаю локальное уведомление в модуле PushNotification
:
override fun onMessageReceived(from: String?, data: Bundle?) {
super.onMessageReceived(from, data)
Log.d("PNReceiver", "onMessageReceived")
val notification = data?.get("notification") as Bundle?
val notificationTitle = notification?.get("title") as String
val notificationBody = notification?.get("body") as String
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channelId = getString(R.string.notification_channel_id)
if(manager.getNotificationChannel(channelId) == null) {
val channel = NotificationChannel(channelId,
getString(R.string.notification_channel_name),
NotificationManager.IMPORTANCE_DEFAULT)
channel.description =
getString(R.string.notification_channel_description)
manager.createNotificationChannel(channel)
}
createLocalNotification(manager, channelId, notificationTitle, notificationBody)
}
}
private fun createLocalNotification(notificationManager: NotificationManager,
channelId: String,
title: String,
body: String) {
val largeIcon = BitmapFactory.decodeResource(resources, R.drawable.ic_cake_variant)
val builder = NotificationCompat.Builder(this, channelId)
.setContentTitle(title)
.setContentText(body)
.setStyle(NotificationCompat.BigTextStyle().bigText(body))
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setSmallIcon(R.drawable.ic_cake_variant)
.setLargeIcon(largeIcon)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND or Notification.DEFAULT_LIGHTS or Notification.DEFAULT_VIBRATE)
notificationManager.notify(0, builder.build())
}
Кроме того, я пытаюсь нажать точно такой же значок в манифесте модуля PushNotification
:
<application>
... some gcm stuff...
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/notification_channel_id" />
<meta-data android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_cake_variant" />
</application>
Остальные 2 модуля (App
и AppCode
) не имеют ничего общего с кодом push-уведомления.
FWIW, наш график потока данных/зависимостей модулей: App
-> AppCode
-> PushNotification
Кроме того, мы по-прежнему используем GCM, а не FCM, в версии com.google.android.gms:play-services-gcm:11.8.0
.
Пробовал версию 15.0.1
, тоже безуспешно.
Я пропустил что-то супер очевидное? Спасибо за помощь.
ОБНОВЛЕНИЕ
Вот как выглядит тело полученного сообщения:
Bundle[{
google.sent_time = 1526919xxxxxx,
google.message_id = 0: 1526919xxxxxxx % xxx c5e8a46xxxxxx,
notification = Bundle[{
body = test message 1,
title = test title 1
}],
message = test message 1,
collapse_key = com.mycompany
}]
Кроме того, вот некоторые из других ответов, которые я рассмотрел:
data
? Укажите ссылки, которые вы уже проверили, чтобы предлагаемые решения были сужены. Кроме того, продолжайте использовать FCM, хотя это не решает эту конкретную проблему, но может предотвратить появление других. - person AL.   schedule 19.05.2018