Ícono de notificación con el nuevo sistema Firebase Cloud Messaging

Resuelto marco asked hace 54 años • 11 respuestas

Ayer Google presentó en el Google I/O el nuevo sistema de notificaciones basado en el nuevo Firebase. Probé este nuevo FCM (Firebase Cloud Messaging) con el ejemplo en Github.

El ícono de la notificación es siempre ic_launcher a pesar de haber declarado un elemento de diseño específico.

Por qué ? Aquí debajo el código oficial para manejar el mensaje.

public class AppFirebaseMessagingService extends FirebaseMessagingService {

    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */
    // [START receive_message]
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // If the application is in the foreground handle both data and notification messages here.
        // Also if you intend on generating your own notifications as a result of a received FCM
        // message, here is where that should be initiated. See sendNotification method below.
        sendNotification(remoteMessage);
    }
    // [END receive_message]

    /**
     * Create and show a simple notification containing the received FCM message.
     *
     * @param remoteMessage FCM RemoteMessage received.
     */
    private void sendNotification(RemoteMessage remoteMessage) {

        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

// this is a my insertion looking for a solution
        int icon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.myicon: R.mipmap.myicon;
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(icon)
                .setContentTitle(remoteMessage.getFrom())
                .setContentText(remoteMessage.getNotification().getBody())
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }

}
marco avatar Jan 01 '70 08:01 marco
Aceptado

Desafortunadamente, esta fue una limitación de las notificaciones de Firebase en el SDK 9.0.0-9.6.1. Cuando la aplicación está en segundo plano, el ícono del iniciador se usa desde el manifiesto (con el tinte requerido de Android) para los mensajes enviados desde la consola.

Sin embargo, con SDK 9.8.0, puedes anular el valor predeterminado. En su AndroidManifest.xml puede configurar los siguientes campos para personalizar el icono y el color:

<meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/notification_icon" />
<meta-data android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/google_blue" />

Tenga en cuenta que si la aplicación está en primer plano (o se envía un mensaje de datos), puede usar completamente su propia lógica para personalizar la visualización. También siempre puede personalizar el icono si envía el mensaje desde las API HTTP/XMPP.

Ian Barber avatar May 19 '2016 19:05 Ian Barber

Utilice una implementación de servidor para enviar mensajes a su cliente y utilice mensajes de tipo de datos en lugar de mensajes de tipo de notificación .

Esto le ayudará a recibir una devolución de llamada onMessageReceivedindependientemente de si su aplicación está en segundo plano o en primer plano y luego podrá generar su notificación personalizada.

geekoraul avatar May 27 '2016 18:05 geekoraul