2016-06-05 21 views
5

sto sviluppando un'applicazione in cui voglio implementare le notifiche push FCM tramite php.FCM: onMessageReceived non viene chiamato, la notifica non è arrivata anche dopo aver inviato msg su fcm?

così ho fatto due file java: 1.FirebaseInstanceID (lavorando bene e ottenere gettone correttamente nel database) 2.FirebaseMessagingSerivice (non chiamato)

mio 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()); 
} 
} 

Il mio risultato quando eseguo il mio script php per inviare un messaggio a FCM:

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

Ma ancora non ricevo alcuna notifica e tutte le configurazioni come la chiave API, il nome del pacchetto (nella console fcm, il mio progetto) sono controllate e stanno bene.

Quando eseguo il debug dell'applicazione creando breakpoint su onMessageReceived() in FirebaseMessagingService.java, non viene eseguito e l'app viene eseguita normalmente quando il messaggio viene trasferito tramite script php su server fcm.

mio 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(); 

} 

Ma mia attività cruscotto contiene un frammento di sopra it.I non è che se può essere un problema fanno.

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 

Grazie in anticipo!

+0

Le inoltriamo al token corretto? puoi aggiungere il codice del tuo manifest. – Shubhank

+0

aggiunto ... e sì, sto inviando il token corretto quindi solo sto ottenendo il successo: 1 in risultato da fcm server.check it .. –

+0

il successo sarà anche lì se si invia a un altro token dispositivo. per favore disinstalla l'app e reinstalla per ottenere un nuovo token e usalo per inviare il messaggio. – Shubhank

risposta

0

errore comune

android:name="YourApplicationPackageName.YourFirebaseMessagingServiceName" 

avete bisogno di cambiare qualche porzione AndroidManifest.xml.

Il codice:

<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> 

Sostituire con seguente codice:

<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> 
+0

Recentemente poche ore prima ho risolto il problema e il problema è nel file Manifest. Ho appena cambiato "com.google.firebase.MESSAGE_EVENT" in "com.google.firebase.MESSAGING_EVENT" .. che ha risolto il mio problema .. da parte mia grazie per il tuo impegno! –

+0

ho avuto uno stesso e sopra menzione (risposta) funziona per me. –

+0

cosa hai cambiato? –

2

Non stai seguendo il codice corretto. Check this link again.

Soluzione

Usa sottostante Codice

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

invece di

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