Carga útil de notificación de GCM 3.0 que no muestra la notificación de Android cuando la aplicación está en primer plano

Cuando envío un mensaje del gcm con la carga útil de la notificación (ningunos datos), la notificación de android se demuestra solamente si mi app está en fondo. Si la aplicación está en primer plano, no se muestra ninguna notificación de android, pero se invoca onMessageReceived () en la implementación de GcmListenerService con null "message".

onMessageReceived () no se llama cuando la aplicación está en segundo plano y la notificación de android se muestra como se esperaba.

¿Es este el comportamiento esperado o me falta algo? Por favor, hágamelo saber en caso de que se necesite algún código del lado del cliente.

Aquí está el fragmento de código del lado del servidor:

Message.Builder messageBuilder = new Message.Builder(); messageBuilder.notification(new Notification.Builder("ic_launcher") .clickAction("ScrHome1") .title("Bling") .body(blingNotification.getPayload().getValue()) .build()); Message message = messageBuilder.build(); sender.send(message, targetIdList, retries); 

ACTUALIZAR

He intentado comprobar el mismo comportamiento en la aplicación de ejemplo proporcionado b google y encontró que es igual. ¿Se supone que es así?

Aquí está el código del lado del servidor de ejemplo de gcm en el que hemos hecho cambios menores para enviar un mensaje con notificación sólo carga útil.

 public class GcmSender { public static final String API_KEY = "AIaSyCMzWOageHbcX9yxNtfL6RygdbLT-7Ls"; @SuppressWarnings("unchecked") public static void main(String[] args) { try { // Prepare JSON containing the GCM message content. What to send and where to send. JSONObject jGcmData = new JSONObject(); JSONObject jData = new JSONObject(); JSONObject jNotification = new JSONObject(); jData.put("message", "hello"); jNotification.put("body", "hi dev"); jNotification.put("title", "POC"); jNotification.put("icon", "ic_launcher"); // Where to send GCM message. jGcmData.put("to", "eucb9MGv3g:APA91bGJWZjBET12nYuDrX8yiylPqt3uy87ThP2f4E9Nw89GOvbZkWSTFVPyQ8keTPQubWzpW_10-Aydqu04MD1GvzeTUAh6SoFk6qeXSUW0205h6sbQdTe74VZfMu8t2P9nrWOE"); // What to send in GCM message. jGcmData.put("notification", jNotification); // Create connection to send GCM Message request. URL url = new URL("https://android.googleapis.com/gcm/send"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Authorization", "key=" + API_KEY); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestMethod("POST"); conn.setDoOutput(true); // Send GCM message content. OutputStream outputStream = conn.getOutputStream(); outputStream.write(jGcmData.toString().getBytes()); // Read GCM response. InputStream inputStream = conn.getInputStream(); String resp = IOUtils.toString(inputStream); System.out.println(resp); System.out.println("Check your device/emulator for notification or logcat for " + "confirmation of the receipt of the GCM message."); } catch (IOException e) { System.out.println("Unable to send GCM message."); System.out.println("Please ensure that API_KEY has been replaced by the server " + "API key, and that the device's registration token is correct (if specified)."); e.printStackTrace(); } } 

}

La observación es la misma, siempre que la aplicación de cliente de ejemplo se encuentra en segundo plano, la notificación de android se muestra sin ninguna intervención de código de cliente, pero cuando la aplicación de cliente de ejemplo está en primer plano, no se muestra la notificación de Android, pero MyGcmListenerService.onMessageReceived (String from, Bundle data ) se llama con valores como De: 234552842207 Mensaje: null.

Cabe señalar que este método no fue llamado en el caso anterior cuando la aplicación de cliente de ejemplo estaba en primer plano.

Así que ahora hay 3 posibilidades.

  • Hay algo incorrecto o falta en la forma en que estamos enviando mensaje de abajo con la carga de notificación.
  • El comportamiento es así.
  • Posibilidad de un error.

Por favor, ayúdame aquí.

Así que fue la posibilidad no. 3 "El comportamiento es así solamente".

Esta es la respuesta de [email protected]:

Esto es para confirmarle que la carga de notificación de Android sólo se mostrará en la bandeja de notificaciones cuando la aplicación esté en segundo plano. Si está en primer plano y desea implementar una notificación, podría considerar implementar notificaciones de forma similar a este método en la aplicación de ejemplo. Se llama desde onMessageReceived (). Espero que esto ayude.

En su actividad de Chat, cree un receptor de difusión como el que se muestra a continuación y llámelo en la función onCreate .

Agregar variable BroadcastReceiver mRegistrationBroadcastReceiver; a tu clase

 private void setUpBroadcastReceiver() { mRegistrationBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //create notification } }; } 
  • obtener un error clave de notificación 401 gcm https://android.googleapis.com/gcm/googlenotification
  • Android: mensajes de alta prioridad con la mensajería en la nube de google (con corona sdk)
  • Integración de GCM para Android
  • ¿Han caducado los ID de registro de GCM?
  • GCM 3.0 - Necesidad de aclaración sobre el mensaje ascendente a los dispositivos
  • Cómo desarrollar el backend de Google App Engine con Android Studio
  • Consejos sobre GCM unregister
  • Recibir notificación de empuje cuando la aplicación se ha detenido de forma forzada (Android).
  • Las notificaciones de envío de GCM no funcionan si la aplicación está cerrada en algunos dispositivos
  • Utilizar múltiples cuentas de firebase en una sola aplicación de Android para google analytics
  • ¿Cuánto tiempo toma un mensaje de Google Cloud Messaging para llegar al dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.