Notificaciones de Firebase (FCM) no aparecen cuando se ha eliminado la aplicación de Android de la bandeja reciente
Estoy enviando notificaciones de Firebase a través de mi propio webservice con PHP como a continuación.
$url = 'https://fcm.googleapis.com/fcm/send'; $fields = array( 'registration_ids' => $tokens, 'data' => $message ); $headers = array( 'Authorization:key = SERVER_KEY ', 'Content-Type: application/json' );
1.Notifications están viniendo cuando la aplicación está en primero plano y fondo sin ningunos problemas, pero si quité la aplicación de la bandeja reciente entonces las notificaciones que no vienen, debo tener que manejar esto cualquier solución para esto? (Como las notificaciones de Whatsup están mostrando todos los escenarios, incluso me obligó a detener esta aplicación de la configuración)
- No se pudo expandir RemoteViews para: StatusBarNotification
- incapaz de transferir datos a través de la intención durante la notificación
- Cómo mostrar varias notificaciones en android
- Android: Notificaciones push de GCM que no aparecen en la lista de notificaciones
- Cómo dar contador si hay más de una notificación
2.Once que recibí la notificación, de "onMessageReceived" cómo pasar estos mensajes, contenido del cuerpo a mi actividad / fragmentos?
3.En algunos casos quiero enviar notificación a todos, En lugar de agregar todos los tokens a la matriz. Cualquier otra forma de manejar como "enviar a todos" algo así?
public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MsgService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d(TAG, "From: " + remoteMessage.getFrom()); Log.d(TAG, "Data Payload : " + remoteMessage.getData()); sendNotification(remoteMessage.getData().get("message")); } private void sendNotification(String messageBody) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("Firebase Push Notification") .setContentText(messageBody) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, notificationBuilder.build()); } }
Dispositivos fallidos: (Las notificaciones no aparecen después de haber sido eliminadas de la bandeja reciente)
- MI Redmi Nota 2 (5.0.2 Lollipop)
- Huawei honor 5c (5.1.1 Lollipop)
Dispositivos que han tenido éxito: (Las notificaciones son enviadas después de retirar de la bandeja reciente)
- HTC One X (4,2 Jelly Bean)
- Samsung galaxy grand prime (4,4 Kitkat)
- ContentObservers son inútiles
- ¿Es posible establecer cuánto tiempo se mostrará una notificación en android API nivel 10 o inferior?
- ¿Cómo puedo mantener la notificación de Android abierta hasta que se cierre mi aplicación?
- ¿Cómo las notificaciones necesitan WAKE_LOCK en android?
- ¿Cómo obtener un notificador de aplicación PERMANENTE en la barra de estado?
- Cambio de los botones de acción en una notificación
- Ayuda del Administrador de notificaciones de Android
- Android: ejecutando una tarea de fondo con AlarmManager
1.Notifications están viniendo cuando la aplicación está en primero plano y fondo sin ningunos problemas, pero si quité la aplicación de la bandeja reciente entonces las notificaciones que no vienen, debo tener que manejar esto cualquier solución para esto? (Como las notificaciones de Whatsup están mostrando todos los escenarios, incluso me obligó a detener esta aplicación de la configuración)
De acuerdo con tu código, debes obtener una excepción de puntero nulo en remoteMessage.getNotification().getBody()
ya que no estás enviando notificación, en lugar de eso estás enviando datos desde tu solicitud de curl. Según mi experiencia personal, el problema que acaba de mencionar se ve especialmente en Android Kitkat o dispositivos por debajo. En Lollipop o por encima de Firebase empuje parece funcionar bien.
2.Once que recibí la notificación, de "onMessageReceived" cómo pasar estos mensajes, contenido del cuerpo a mi actividad / fragmentos?
Puede emitir una Transmisión desde onMessageReceived()
y registrar un Receptor de Braodcast en su Actividad y enviar los datos en su intención de difusión. Ejemplo de código:
Actividad
private BroadcastReceiver receiver; @Overrride public void onCreate(Bundle savedInstanceState){ // your oncreate code IntentFilter filter = new IntentFilter(); filter.addAction("SOME_ACTION"); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String message = intent.getStringExtra("message"); } }; registerReceiver(receiver, filter); } @Override protected void onDestroy() { if (receiver != null) { unregisterReceiver(receiver); receiver = null } super.onDestroy(); }
FirebaseMessagingService
public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MsgService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d(TAG, "From: " + remoteMessage.getFrom()); Log.d(TAG, "Notification Message Body: " + remoteMessage.getData()); Intent intent=new Intent(); intent.setAction("SOME_ACTION"); intent.putExtra("message", remoteMessage.getNotification().getBody()); sendBroadcast(intent); } }
3.En algunos casos quiero enviar notificación a todos, En lugar de agregar todos los tokens a la matriz. Cualquier otra forma de manejar como "enviar a todos" algo así?
No hay nada como "Enviar a TODOS" en Firebase API, la única manera de hacerlo es utilizando Firebase Console que tienen sus propios problemas para manejar como un problema de icono blanco y extraer los parámetros personalizados de su notificación.
Yo estaba teniendo problemas con FCM en exactamente Mi teléfono y Huawei teléfono también! Resulta que no era un problema con FCM o su aplicación, sino en su nivel de dispositivo.
Tienen configuración de aplicación de nivel de dispositivo que deshabilita las notificaciones o incluso bloqueo de la sesión, por lo que onMessageReceived () no se activa cuando llega el mensaje. Después de cambiar la configuración (principalmente permiten notificaciones y desactivar la optimización de la batería para mi aplicación), todo funciona bien!
Consulte Mensajería en la nube Firebase no recibida cuando la aplicación se encuentra en segundo plano .
Este problema necesita implementación de back-end. Permítanme discutir cómo superar esta deficiencia.
Somos conscientes del ciclo de vida de la Actividad. Así que al destruir, llamo a un servicio desde el back-end que anula el registro de mi cliente. Todos los mensajes entrantes ahora se pondrán en cola para la entrega ya que el token para el cliente de destino no está registrado.
Así que al devolver la aplicación, llamo a un servicio back-end que registra mi cliente. El back end ahora empieza a enviar mensajes desde la cola con el nuevo token de cliente para mi dispositivo.
- Uso de LogCat en JellyBean
- Obtener un total de "Zonas / Zonas" en las que actualmente estoy, basado en la ubicación actual