2016-06-05 17 views
5

Pracuję nad aplikacją, w której chcę zaimplementować powiadomienia push FCM przez php.FCM: onMessageReceived nie jest wywoływane, powiadomienie nie dotarło nawet po wysłaniu msg do fcm?

więc zrobiłem dwa pliki Java: 1.FirebaseInstanceID (działa dobrze i coraz tokenu poprawnie w bazie danych) 2.FirebaseMessagingSerivice (nie nazywa)

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

Mój wynik po uruchomieniu skryptu php, aby wysłać wiadomość do FCM:

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

Ale nadal nie dostaję żadnego powiadomienia i wszystkie konfiguracje, takie jak klucz APi, nazwa pakietu (w konsoli fcm, mój projekt) są sprawdzane i są w porządku.

Podczas debugowania aplikacji poprzez utworzenie punktu przerwania w onMessageReceived() w FirebaseMessagingService.java, nie przechodzi przez to i aplikacja działa normalnie, gdy wiadomość jest przesyłana przez skrypt php do serwera fcm.

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

} 

ale moja aktywność deska rozdzielcza zawiera fragment nad it.I nie tak, czy może to być problemem zrobić.

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 

Dzięki z góry!

+0

wysyłasz do prawidłowego tokena? możesz dodać kod manifestu. – Shubhank

+0

dodano ... i tak wysyłam poprawny token, a tylko dostaję sukces: 1 w wyniku fcm server.check it .. –

+0

sukces będzie również tam, jeśli wyślesz na token innego urządzenia. Odinstaluj aplikację i ponownie zainstaluj, aby uzyskać nowy token i użyj jej do wysłania wiadomości. – Shubhank

Odpowiedz

0

Częstym błędem

android:name="YourApplicationPackageName.YourFirebaseMessagingServiceName" 

trzeba zmienić jakąś część AndroidManifest.xml.

Kod:

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

Wymień następujący kod:

<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

Niedawno kilka godzin wcześniej rozwiązałem problem, a problem jest w pliku manifestu. Właśnie zmieniłem "com.google.firebase.MESSAGE_EVENT" na "com.google.firebase.MESSAGING_EVENT" .. to rozwiązało mój problem .. dzięki, dzięki za wysiłek! –

+0

Miałem ten sam jeden i powyżej wzmianki (odpowiedź) działa dla mnie. –

+0

co zmieniłeś? –

2

Nie naśladują prawidłowego kodu. Check this link again.

Rozwiązanie

skorzystać z poniższego kodu

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

zamiast

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