Enviar notificaciones cuando la aplicación esté cerrada

¿Sabes si es posible recibir notificaciones del mensaje de nube de google cuando la aplicación está completamente cerrada?

Sé si está abierto o en el fondo sí, pero se puede programar de alguna manera con el fin de recibirlos?

EDITAR:

Continúo sin recibir notificaciones cuando la aplicación se cierra.

Adjunto el código en caso de que tenga un error y no lo estoy viendo.

MANIFIESTO

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.frab" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="com.frab.permission.C2D_MESSAGE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.VIBRATE" /> <permission android:name="com.frab.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.frab.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".GGMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.something" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" /> </application> </manifest> 

RECEPTOR DE RADIODIFUSIÓN

 package com.something; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.activities.SignIn; import com.google.android.gcm.GCMBaseIntentService; import com.objects.Globals; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GGM <-----> FRAB"; private Bundle extras; public GCMIntentService() { super(Globals.SENDER_ID); } @Override public void onDestroy() { Log.d(TAG, "terminando servicio"); } @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "onRegistered: registrationId=" + registrationId); } @Override protected void onUnregistered(Context context, String registrationId) { Log.i(TAG, "onUnregistered: registrationId = " + registrationId); } @Override protected void onMessage(Context context, Intent data) { extras = data.getExtras(); String message = extras.getString("msg"); Log.d("******", message); sendNotification(message); } @Override protected void onError(Context arg0, String errorId) { Log.e(TAG, "onError: errorId = " + errorId); } } package com.something; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.support.v4.content.WakefulBroadcastReceiver; public class GGMBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

Cuando la aplicación está abierta: OK

Cuando la aplicación está en segundo plano: Ok

Cuando la aplicación se cierra con fuerza por el usuario: las notificaciones no llegan

¿Cuál es el problema?

Muchas gracias.

Sí, es posible "recibir notificaciones del mensaje de nube de google cuando la aplicación está completamente cerrada".

De hecho, un receptor de difusión es el mecanismo que GCM utiliza para entregar mensajes. Necesitas implementar un BroadcastReceiver y declararlo en AndroidManifest.xml.

Consulte el fragmento de código siguiente.

AndroidManifest.xml

 <receiver android:name=".GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <!-- Receives the actual messages. --> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.google.android.gcm.demo.app" /> </intent-filter> </receiver> <service android:name=".GcmIntentService" /> 

Código Java

 public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

Cuando GCM envía un mensaje a su dispositivo, BroadcastReceiver recibirá el mensaje y llamará a la función onReceive() , en la que puede iniciar un servicio para realizar realmente la tarea prevista.

El ejemplo de código anterior utiliza un BroadcastReceiver especializado llamado WakefulBroadcastReceiver , que asegura que el dispositivo no se vaya a dormir mientras el servicio está haciendo su trabajo.

Consulte la página oficial de Android para obtener lo mismo: https://developer.android.com/google/gcm/client.html

Cuando la aplicación se cierra forcelly por el usuario: las notificaciones no llegan

Es una característica de la plataforma Android. Al detener una aplicación por parte del usuario, la aplicación se detiene y no se ejecuta ninguno de su código, incluidos los receptores de difusión declarados en el manifiesto. Sólo cuando el usuario inicia explícitamente la aplicación se coloca en un estado donde los receptores se disparó.

Para más información: http://www.doubleencore.com/2014/06/effects-android-application-termination/

No funcionará en matar a la aplicación del administrador de tareas, pero el trabajo si lo desliza fuera de reciente. Intenté hacerlo en whatsapp matándolo y pedirle a alguien que me enviara un msg, y no tengo ninguna notificación. Entonces empecé la aplicación, y recibí una notificación.

Acabo de terminar una aplicación de GCM. Aún funciona bien si cierra la aplicación. La cosa es que ya debería haber abierto la aplicación por una vez. Crear dos clases para lograr este objetivo: GcmBroadcastReceiver y GcnIntentService . Obtenga más información http://developer.android.com/google/gcm/index.html

Aquí está el truco

 public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

La clase que se está extendiendo es WakeFulBroadcastReceiver . Hay un permiso WAKE_LOCK en Manifest.xml. Esto permite que WakeLocks evite que el procesador se WakeLocks dormido o que la pantalla se atenúe. Sin embargo, si amplía BroadcastReceiver , no funcionará después de cerrar la aplicación.

 <uses-permission android:name="android.permission.WAKE_LOCK" /> 

He estado intentando otro teléfono y el segundo funcionó perfectamente, incluso cuando el teléfono estaba apagado. La primera tenía una habitación que no permitía ser notificado cuando la aplicación estaba cerrada … Gracias a todos

Después de algunas pruebas que hice sobre este tema, descubrí que se comporta de manera diferente sobre cómo se cierra la aplicación. Si cierra la aplicación mientras el cable está conectado al dispositivo, bloquea cada notificación cuando se cierra la aplicación. Sin embargo, si retira el cable del dispositivo y cierra la aplicación, al enviar la notificación, ¡todo funcionará de nuevo, como debería!

En caso de que obtenga un mensaje emergente "Esperando el depurador", reinicie el dispositivo y envíe una notificación de prueba.

  • La aplicación se bloquea si la aplicación se cierra mediante el servicio Push: parse.com
  • Notificación incorrecta enviada desde el paquete, no se pudo expandir RemoteViews
  • ¿Cómo eliminar una notificación push de Android desde el centro de notificaciones cuando la aplicación se inicia con su icono de lanzador?
  • No hay sonido de notificación al enviar notificación de firebase en android
  • Notificación de Push en Android?
  • FCM push notification issue: - "error": "NotRegistered"
  • GCM Mantenga mensajes en el servidor hasta que llegue uno nuevo
  • Notificación de Parse Push no enviando desde Android al Canal
  • Apertura del navegador en la notificación push
  • ¿Cómo crear una Notificación Push automática para mi propia aplicación?
  • Registro de identificación del dispositivo directamente con Amazon SNS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.