sobre sistema servicio quitar permanentes otras ocultar notificaciones notificacion muestra desactivar datos como app aplicaciones android service push-notification android-notifications firebase-cloud-messaging

android - sistema - La notificación push funciona incorrectamente cuando la aplicación está en segundo plano o no se está ejecutando



quitar notificacion sin servicio de datos android (2)

Estoy usando Firebase Cloud Messaging para enviar notificaciones push.

Aquí está mi FirebaseMessageService :

public class FireBaseMessageService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.e("TAG", "From: " + remoteMessage.getFrom()); Log.e("TAG", "Notification Message Body: " + remoteMessage.getData().get("CardName")+" : "+remoteMessage.getData().get("CardCode")); sendNotification(remoteMessage.getNotification().getBody()); } private void sendNotification(String messageBody) { Intent intent = new Intent(this, StartActivity.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); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher_final) .setContentTitle("Notification") .setContentText(messageBody) .setTicker("Test") .setAutoCancel(true) .setDefaults(Notification.DEFAULT_SOUND) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); } }

Y FirebaseInstanceServer :

public class FirebaseInstanceService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.e("TAG", "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app''s servers. sendRegistrationToServer(refreshedToken); } private void sendRegistrationToServer(String token) { // Add custom implementation, as needed. Log.e("TAG", "Refreshed token2: " + token); } }

Que se declara en el AndroidManifest :

<service android:name=".util.notifications.FireBaseMessageService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".util.notifications.FirebaseInstanceService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service>

Entonces, el problema es que cuando la aplicación se está ejecutando, el ticker se muestra bien y la notificación viene con un sonido predeterminado, pero cuando la aplicación está en segundo plano o no se está ejecutando, la notificación viene sin ningún sonido y el ticker no se muestra en la barra de estado.
¿Por qué sucede esto y cómo puedo solucionarlo?


Con FCM usted especifica una carga útil POST para enviar a https://fcm.googleapis.com/fcm/send . En esa carga útil puede especificar data o una clave de notification , o ambos.

Si su carga útil contiene solo una clave de data , su aplicación manejará todos los mensajes push. Por ejemplo, todos se entregan a su controlador onMessageReceived .

Si su carga útil contiene una clave de notification , su aplicación manejará los mensajes push solo si su aplicación está activa / en primer plano. Si no lo está (por lo que está en segundo plano, o se cerró por completo), FCM se encarga de mostrarle la notificación utilizando los valores que coloca en la carga útil de la clave de notification .

Tenga en cuenta que las notificaciones enviadas desde una consola (como la consola Firebase) siempre incluyen una clave de notification .

Parece que desea manejar los mensajes de FCM usted mismo para poder personalizar la notificación un poco más, etc., por lo que sería mejor no incluir la clave de notification en la carga útil POST, de modo que todos los mensajes push se entreguen a su onMessageReceived .

Puedes leer más sobre esto aquí:
Opciones avanzadas de mensajería
Sintaxis de mensaje descendente