android - notificaciones - firebase cloud messaging
No hay sonido de notificación al enviar notificaciones desde firebase en android (8)
Con HTTP v1 API es diferente
Ejemplo:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//codes..,.,,
Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(sound);
}
Estoy enviando notificaciones push de Firebase a mi aplicación de Android. pero cuando mi aplicación está en segundo plano, no se llama al método firebase onMessageReceived; en cambio, firebase envía una notificación al sistema para mostrar la notificación en la bandeja del sistema. la notificación aparece en la bandeja del sistema pero no hay sonido para la notificación, incluso si he permitido el sonido de notificación para mi aplicación en la configuración del sistema.
qué puedo hacer para reproducir el sonido de notificación cuando se recibe una notificación de firebase.
Así es como envío notificaciones desde Firebase a mi aplicación Blogpost .
El método
onMessageReceived
se
onMessageReceived
solo cuando la aplicación está en primer plano o la carga de notificación solo contiene el tipo de datos.
De los documentos de Firebase
Para la mensajería posterior, FCM proporciona dos tipos de carga útil: notificación y datos .
Para el tipo de notificación , FCM muestra automáticamente el mensaje a los dispositivos del usuario final en nombre de la aplicación cliente. Las notificaciones tienen un conjunto predefinido de teclas visibles para el usuario.
Para el tipo de datos , la aplicación cliente es responsable de procesar los mensajes de datos. Los mensajes de datos solo tienen pares clave-valor personalizados.Utilice las notificaciones cuando desee que FCM se encargue de mostrar una notificación en nombre de la aplicación de su cliente. Use mensajes de datos cuando desee que su aplicación maneje la pantalla o procese los mensajes en su aplicación cliente de Android, o si desea enviar mensajes a dispositivos iOS cuando hay una conexión FCM directa.
Más abajo en los docs
El comportamiento de la aplicación cuando se reciben mensajes que incluyen notificaciones y cargas de datos depende de si la aplicación está en segundo plano o en primer plano, esencialmente, si está activa o no en el momento de la recepción.
En segundo plano , las aplicaciones reciben la carga de notificación en la bandeja de notificaciones y solo manejan la carga de datos cuando el usuario toca la notificación.
Cuando está en primer plano , su aplicación recibe un objeto de mensaje con ambas cargas disponibles.
Si está utilizando la consola de Firebase para enviar notificaciones, la carga siempre contendrá el tipo de notificación. Debe usar la API de Firebase para enviar la notificación con solo el tipo de datos en la carga útil de la notificación. De esa manera, su aplicación siempre recibe una notificación cuando se recibe una nueva notificación y la aplicación puede manejar la carga de notificación.
Si desea reproducir el sonido de notificación cuando la aplicación está en segundo plano utilizando el método convencional, debe https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support a la carga útil de notificación.
En la carga de notificación de la notificación hay una tecla de sonido.
De la documentación oficial su uso es:
Indica un sonido para reproducir cuando el dispositivo recibe una notificación. Admite el valor predeterminado o el nombre de archivo de un recurso de sonido incluido en la aplicación. Los archivos de sonido deben residir en / res / raw /.
P.ej:
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon",
"sound" : "mySound"
}
}
Si desea utilizar el sonido predeterminado del dispositivo, debe utilizar:
"sound": "default"
.
Consulte este enlace para ver todas las claves posibles en las cargas útiles: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support
Para aquellos que no conocen, Firebase maneja las notificaciones de manera diferente cuando la aplicación está en segundo plano. En este caso, no se llama a la función onMessageReceived.
Cuando su aplicación está en segundo plano, Android dirige los mensajes de notificación a la bandeja del sistema. Un usuario que toca la notificación abre el iniciador de aplicaciones de forma predeterminada. Esto incluye mensajes que contienen notificaciones y carga de datos. En estos casos, la notificación se entrega a la bandeja del sistema del dispositivo, y la carga de datos se entrega en los extras de la intención de su Actividad de inicio.
Prueba esto
{
"to" : "DEVICE-TOKEN",
"notification" : {
"body" : "NOTIFICATION BODY",
"title" : "NOTIFICATION TITILE",
"sound" : "default"
}
}
@note para sonido de notificación personalizado: ->
"sound" : "MyCustomeSound.wav"
Puedo reproducir sonido de notificación incluso si lo envío desde la consola de Firebase. Para hacerlo, solo necesita agregar la clave "sonido" con el valor "predeterminado" en la opción anticipada.
hazlo así
{
"message":{
"topic":"news",
"notification":{
"body":"Very good news",
"title":"Good news"
},
"android":{
"notification":{
"body":"Very good news",
"title":"Good news",
"sound":"default"
}
}
}
}
prueba esto....
public void buildPushNotification(Context ctx, String content, int icon, CharSequence text, boolean silent) {
Intent intent = new Intent(ctx, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 1410, intent, PendingIntent.FLAG_ONE_SHOT);
Bitmap bm = BitmapFactory.decodeResource(ctx.getResources(), //large drawable);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx)
.setSmallIcon(icon)
.setLargeIcon(bm)
.setContentTitle(content)
.setContentText(text)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
if(!silent)
notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1410, notificationBuilder.build());
}
y en onMessageReceived, llámalo
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d("Msg", "Message received [" + remoteMessage.getNotification().getBody() + "]");
buildPushNotification(/*your param*/);
}
o sigue a , también es correcto como él dice, pero puedes usar una consola Firebase.