Android Oreo GCM значок push-уведомления белый, когда приложение закрыто - PullRequest
0 голосов
/ 18 мая 2018

Я прочитал ~ 10 подобных вопросов на SO, а также на некоторых других страницах поиска в Google и на страницах документации, и до сих пор не могу понять, в чем проблема.

В принципе, еслиприложение закрыто (или заблокировано), значок push-уведомлений отображается в виде белого квадрата.

Если приложение запущено, оно отображается со значком, который я хочу.

Мой значок прозрачныйи просто белый.Это простой значок, полученный от самого Google.

Вот что у меня есть, и где может быть проблема.Наше приложение имеет несколько модулей.Я сосредоточусь на трех из них:

  • App
  • AppCode
  • PushNotification

Я создаю локальное уведомление намодуль 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
}]

Кроме того, вот некоторыеиз других ответов, которые я рассмотрел:

Вопрос 1

Вопрос 2

Вопрос 3

...