FCM: onMessageReceived no se llama, la notificación no llegó incluso después de enviar msg a fcm?

Estoy desarrollando una aplicación donde quiero implementar FCM push notificaciones a través de php.

Así que hice dos archivos java: 1.FirebaseInstanceID (Trabajar bien y obtener símbolo correctamente en la base de datos) 2.FirebaseMessagingSerivice (Not Called)

Mi FirebaseMessagingService.java

package com.example.xyz; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.support.v4.app.NotificationCompat; import com.google.firebase.messaging.RemoteMessage; public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService{ @Override public void onMessageReceived(RemoteMessage remoteMessage) { showNotification(remoteMessage.getData().get("message")); } private void showNotification(String message) { Intent i = new Intent(this,Dashboard.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("FCM Test") .setContentText(message) .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) .setContentIntent(pendingIntent); NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.notify(0,builder.build()); } } 

Mi resultado cuando ejecuto mi script php para enviar mensaje a FCM:

  {\"multicast_id\":7077449602201888040,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1465110073498648%d215149df9fd7ecd\"}]} 

Pero todavía no recibo ninguna notificación y todas las configuraciones como la clave api, el nombre del paquete (en la consola fcm, mi proyecto) están marcadas y están bien.

Cuando depuro la aplicación al crear un punto de interrupción en onMessageReceived () en FirebaseMessagingService.java, no pasa por eso y la aplicación se ejecuta normalmente cuando el mensaje se envía a través del script php al servidor fcm.

Mi Dashboard.java

 public class Dashboard extends AppCompatActivity { private Toolbar toolbar; private DrawerLayout drawer_layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); toolbar=(Toolbar) findViewById(R.id.app_bar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); drawer_layout=(DrawerLayout) findViewById(R.id.drawer_layout); NavigationDrawerFragment drawerfragment= (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); drawerfragment.setUp(R.id.fragment_navigation_drawer,drawer_layout,toolbar); FirebaseMessaging.getInstance().subscribeToTopic("test"); FirebaseInstanceId.getInstance().getToken(); } 

Pero mi actividad de panel contiene un fragmento sobre él. No lo sé si puede ser un problema.

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.noticeboard" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".Dashboard" android:label="@string/title_activity_dashboard" > </activity> <activity android:name=".SplashScreen" android:label="@string/title_activity_splash_screen" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Login" android:label="@string/title_activity_login" > </activity> <activity android:name=".NoticeViewer" android:label="@string/title_activity_notice_viewer" > </activity> <service android:name=".FirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGE_EVENT"/> </intent-filter> </service> <service android:name=".FirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> </application> </manifest> 

LOGCAT

 06-05 12:06:05.678 32386-32386/com.example.noticeboard W/ActivityThread: Application com.example.noticeboard is waiting for the debugger on port 8100... 06-05 12:06:05.686 32386-32386/com.example.noticeboard I/System.out: Sending WAIT chunk 06-05 12:06:05.892 32386-32393/com.example.noticeboard I/art: Debugger is active 06-05 12:06:05.897 32386-32386/com.example.noticeboard I/System.out: Debugger has connected 06-05 12:06:05.897 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:06.107 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:06.317 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:06.527 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:06.587 32386-32393/com.example.noticeboard W/art: Suspending all threads took: 41.152ms 06-05 12:06:06.741 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:06.947 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:07.157 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:07.368 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:07.577 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:07.786 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:07.998 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:08.208 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:08.418 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:08.628 32386-32386/com.example.noticeboard I/System.out: waiting for debugger to settle... 06-05 12:06:08.838 32386-32386/com.example.noticeboard I/System.out: debugger has settled (1466) 06-05 12:06:08.884 32386-32386/com.example.noticeboard W/System: ClassLoader referenced unknown path: /data/app/com.example.noticeboard-1/lib/x86 06-05 12:06:08.906 32386-32386/com.example.noticeboard D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization. 06-05 12:06:08.918 32386-32386/com.example.noticeboard D/FirebaseApp: Initialized class com.google.firebase.iid.FirebaseInstanceId. 06-05 12:06:08.919 32386-32386/com.example.noticeboard D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization. 06-05 12:06:08.943 32386-32386/com.example.noticeboard I/FA: App measurement is starting up, version: 9080 06-05 12:06:08.943 32386-32386/com.example.noticeboard I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE 06-05 12:06:09.022 32386-32386/com.example.noticeboard D/FirebaseApp: Initialized class com.google.android.gms.measurement.AppMeasurement. 06-05 12:06:09.022 32386-32386/com.example.noticeboard I/FirebaseInitProvider: FirebaseApp initialization successful 06-05 12:06:09.045 32386-32456/com.example.noticeboard W/GooglePlayServicesUtil: Google Play services out of date. Requires 9080000 but found 8087470 06-05 12:06:09.130 32386-32457/com.example.noticeboard D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 06-05 12:06:09.134 32386:32386 D/ ] HostConnection::get() New Host Connection established 0xabe6ce00, tid 32386 06-05 12:06:09.141 32386-32386/com.example.noticeboard W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_VERSION_UPDATE_REQUIRED, resolution=null, message=null} [ 06-05 12:06:09.188 32386:32457 D/ ] HostConnection::get() New Host Connection established 0xabe6cff0, tid 32457 06-05 12:06:09.193 32386-32457/com.example.noticeboard I/OpenGLRenderer: Initialized EGL, version 1.4 06-05 12:06:09.215 32386-32457/com.example.noticeboard W/EGL_emulation: eglSurfaceAttrib not implemented 06-05 12:06:09.215 32386-32457/com.example.noticeboard W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa3e6ca80, error=EGL_SUCCESS 06-05 12:06:17.473 32386-32394/com.example.noticeboard W/art: Method processed more than once: void java.lang.Thread.run() 06-05 12:06:17.474 32386-32395/com.example.noticeboard W/art: Method processed more than once: void java.lang.Object.wait(long) 06-05 12:06:17.474 32386-32395/com.example.noticeboard W/art: Method processed more than once: void java.lang.Thread.run() 06-05 12:06:17.478 32386-32396/com.example.noticeboard W/art: Method processed more than once: void java.lang.Thread.run() 06-05 12:06:32.514 32386-32457/com.example.noticeboard W/EGL_emulation: eglSurfaceAttrib not implemented 06-05 12:06:32.514 32386-32457/com.example.noticeboard W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa24ff280, error=EGL_SUCCESS 06-05 12:06:32.624 32386-32457/com.example.noticeboard E/Surface: getSlotFromBufferLocked: unknown buffer: 0xabee3340 06-05 12:06:32.656 32386-332/com.example.noticeboard D/FirebaseInstanceId: topic sync succeeded 

¡Gracias por adelantado!

Usted no está siguiendo el código apropiado. Vuelva a ver este enlace .

Solución

Utilizar debajo del código

 <action android:name="com.google.firebase.MESSAGING_EVENT" /> 

en lugar de

 <action android:name="com.google.firebase.MESSAGE_EVENT"/> 

Error común

 android:name="YourApplicationPackageName.YourFirebaseMessagingServiceName" 

Necesitas cambiar alguna porción de AndroidManifest.xml .

Su código :

  <service android:name=".FirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGE_EVENT"/> </intent-filter> </service> <service android:name=".FirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> 

Reemplazar con el código siguiente:

 <service android:name="com.example.noticeboard.FirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGE_EVENT"/> </intent-filter> </service> <service android:name="com.example.noticeboard.FirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> 

Desafortunadamente, la respuesta de usman Iqbal no es del todo correcta. Los documentos oficiales de Android utilizan MESSAGING_EVENT:

  <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> 

Fuente: https://firebase.google.com/docs/cloud-messaging/android/receive#edit-the-app-manifest

  • GCM BroadcastReceiver setResultCode uso
  • Implementación de la notificación push del servidor
  • Nuevo error de origen desconocido del registro de la API de GCM
  • Notificación de la mensajería en la nube de Firebase Vibración
  • Productos de Android Gradle con notificaciones de Parse Push
  • Cómo mostrar las notificaciones Heads up android
  • Cómo implementar notificaciones push para android en React Native
  • No se pueden recibir mensajes con Google Cloud Messaging para Android (no la biblioteca de ayuda)
  • Analizar: enviar notificaciones push desde la aplicación
  • Enviar Notificaciones push a iOS / Android en WiFi cerrado (sin conexión a Internet)
  • Despierta Android Phone / tablet?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.