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)
- GCM push notificación. Notificación incorrecta publicada - No se pudo expandir RemoteViews para: StatusBarNotification
- Firebase Cloud Messaging: mejores prácticas
- ¿Las notificaciones no siempre se reciben por teléfono?
- OneSignal: no se puede abrir la actividad después de hacer clic en el botón
- Notificación lanza RemoteServiceException en el dispositivo de Motorola con OS 7
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!
- Un servidor que envía notificaciones push a dispositivos Android e iOS
- Aplicación Phonegap de Android: llevar la actividad al frente
- Gestión de escenarios de Notificación de empuje en iOS y Android
- Appcelerator Titanium LocalNotification para Android
- El clic de Android en la notificación no abre la Actividad adjunta
- Android Push Notification, cuando la aplicación está cerrada Tengo un estilo diferente
- Al hacer clic en la notificación no se abre la actividad mencionada
- BroadcastReceiver no se llama cuando la pantalla está bloqueada en Android
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
- Aplicación Phonegap de Android: llevar la actividad al frente
- Android Smart Location Library siempre está conectado a los gps después de la aplicación cerrada