La aplicación de Android no recibe la notificación de FCM cuando se cierra
Estoy comprobando que Firebase Cloud Messaging envíe una notificación. Han implementado ya y su notificación de recepción cuando la aplicación está en estado abierto. Pero si cierro la aplicación, ya no da notificación. Hay alguna solución para esto.
Código:
- ¿Cuáles son los tamaños de los iconos en los botones de acción de notificaciones de Android?
- Iniciar servicio desde la notificación
- ¿Cómo programar las notificaciones locales de Android?
- Notificación de Android en una fecha específica
- ¿Hay alguna manera de detectar si la barra de notificación ha sido borrada?
WebRequest wRequest; wRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); wRequest.Method = "post"; wRequest.ContentType = " application/json;charset=UTF-8"; wRequest.Headers.Add(string.Format("Authorization: key={0}", AppId)); wRequest.Headers.Add(string.Format("Sender: id={0}", SenderId)); string postData = "{\"registration_ids\":[\"" + regIds + "\"], \"data\": "+ value +"}"; Byte[] bytes = Encoding.UTF8.GetBytes(postData); wRequest.ContentLength = bytes.Length; Stream stream = wRequest.GetRequestStream(); stream.Write(bytes, 0, bytes.Length); stream.Close(); WebResponse wResponse = wRequest.GetResponse();
Servicio de mensajería:
public class MessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); sendNotification(data); } public void showMessage(Map<String, String> serverData) { Intent i = new Intent(this,MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setAutoCancel(true) .setContentTitle(serverData.get("Title")) .setContentText(serverData.get("Message")) .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) .setContentIntent(pendingIntent); NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(Integer.parseInt(serverData.get("ItemId")),builder.build()); } private void sendNotification(Map<String, String> serverData) { 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_UPDATE_CURRENT); long[] pattern = {500,500,500,500,500}; Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) .setContentTitle(serverData.get("Title")) .setContentText(serverData.get("Message")) .setAutoCancel(true) .setVibrate(pattern) .setLights(Color.BLUE,1,1) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(Integer.parseInt(serverData.get("ItemId")), notificationBuilder.build()); } }
Actividad principal-
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseMessaging.getInstance().subscribeToTopic("test"); FirebaseInstanceId.getInstance().getToken(); } }
Manifiesto-
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.com.firebasenotify"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name=".InstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service> </application> </manifest>
- Recibe notificación push de Android aunque la aplicación esté cerrada
- Java.lang.SecurityException: Requiere permiso de VIBRATE en Jelly Bean 4.2
- Mostrar una alerta o una vista al recibir una notificación
- Android Muestra una notificación en la barra de estado sin una vista ampliable
- Android 5 Mala notificación enviada desde el paquete
- Notificación incorrecta enviada desde el paquete No se pudo expandir RemoteViews
- ¿Cómo saber cuando mi notificación se borra mediante el botón Borrar?
- Pin Notificación a la parte superior del área de notificación
No hubo ningún problema con el código. Yo estaba usando Mi nota 4, y de alguna manera no se muestra la notificación en Mi4 cuando la aplicación está cerrada. He probado con otro dispositivo android y su funcionamiento bien.
Gracias a Tim Castelijns y Frank van Puffelen por participar en la conversación.
Agregando la clave time_to_live en su POST Payload resolverá este problema. El valor de este parámetro debe ser una duración de 0 a 2.419.200 segundos, y corresponde al período máximo de tiempo durante el cual FCM almacena e intenta entregar el mensaje. "Time_to_live": 3 Referencia de Documentos de Firebase
Según FCM, los documentos onMessageReceived () no se llamarán cuando la aplicación esté en segundo plano . Debe enviar un objeto de notificación en orden para que aparezca en la bandeja del sistema y cuando el usuario haga clic en la actividad del lanzador se abrirá con datos como extras con la intención . Para cargas útiles debe utilizar el objeto de datos . Ver documentos y recibir mensajes en una aplicación para Android
- ¿Cómo puedo publicar en Twitter con Intent Action_send?
- ¿Cómo puedo asegurar un teclado numérico decimal en Android?