19

Wenn ich eine Push-Benachrichtigung auf Android erhalte, erhalte ich den folgenden Fehler. Ich kann wirklich keine Informationen darüber finden. Kann jemand helfen? Ich bin wirklich ratlos.Firebase handleIntent AbstractMethodError

FATAL EXCEPTION: pool-1-thread-1 Process: com.mycompany.myerror, PID: 22712 java.lang.AbstractMethodError: abstract method "void com.google.firebase.iid.zzb.handleIntent(android.content.Intent)" at com.google.firebase.iid.zzb$1.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818)

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.android.support:appcompat-v7:25.3.0' 
    compile 'com.android.support:support-v4:25.3.0' 
    compile 'com.android.support:design:25.3.0' 
    //https://developers.google.com/android/guides/setup 
    compile 'com.google.android.gms:play-services-places:10.2.1' 
    compile 'com.google.android.gms:play-services-maps:10.2.1' 
    compile 'com.google.android.gms:play-services-location:10.2.1' 
    compile 'com.google.android.gms:play-services-vision:10.2.1' 
    compile 'com.google.android.gms:play-services-gcm:10.2.1' 
    compile 'com.google.firebase:firebase-messaging:10.0.1' 
    compile 'com.google.firebase:firebase-core:10.0.1' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.google.zxing:core:3.2.0' 
    compile 'com.journeyapps:zxing-android-embedded:3.5.0' 
    compile 'com.loopj.android:android-async-http:1.4.9' 
    testCompile 'junit:junit:4.12' 
} 

FirebaseMessagingService.java

public class FirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "FCM Service"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     super.onMessageReceived(remoteMessage); 
     try { 
      sendNotification(remoteMessage); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 


    private void sendNotification(final RemoteMessage remoteMessage) throws Exception { 

     Calendar calendar = Calendar.getInstance(); 
     Calendar c = Calendar.getInstance(); 
     SimpleDateFormat sdf = new SimpleDateFormat("h:mm a"); 
     String strDate = sdf.format(c.getTime()); 

     String contentTitle = "New Push Message"; 
     String contentText = "Received at " + strDate; 

     Utilities.sendNotification(getApplicationContext(), 
       getNotificationIcon(), 
       contentTitle, 
       contentText, 
       0, 
       HomeActivity.class, 
       Utilities.getNotificationId(getApplicationContext())); 

    } 

Dienstprogramme

public static void sendNotification(Context appContext, 
              int icon, 
              String title, 
              String msg, 
              long when, 
              Class<? extends Context> classToLaunch, 
              long processId) { 

      //Define notification msg 
      Intent launchIntent = null; 

      if (classToLaunch != null) { 
       launchIntent = new Intent(appContext, classToLaunch); 
      } else { 
       launchIntent = new Intent(); 
      } 

      // This is dummy data for just differentiate Pending intent 
      // only set value that is check IntentFilter 
      launchIntent.addCategory("CATEGORY" + new Date(System.currentTimeMillis())); 
      launchIntent.addFlags((int) System.currentTimeMillis()); 
      launchIntent.setAction("ACTION" + new Date(System.currentTimeMillis())); 

      // also make launch mode to singleTop in manifest for that activity 
      launchIntent.setFlags(
        Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | 
          Intent.FLAG_ACTIVITY_NEW_TASK); 

      // intent to be launched when click on notification 
      PendingIntent pendingIntent = PendingIntent.getActivity(appContext, 
        0, 
        launchIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT); 

      //Instantiate the notification 
      NotificationCompat.Builder builder = new NotificationCompat.Builder(appContext); //(icon, msg, when); 
      builder.setContentTitle(title); 
      builder.setSmallIcon(icon); 
      builder.setWhen(when); 
      builder.setTicker(msg); 
      builder.setContentText(msg); 
      builder.setContentIntent(pendingIntent); 
      builder.setAutoCancel(true); 
      builder.setDefaults(Notification.DEFAULT_LIGHTS); 
      builder.setDefaults(Notification.DEFAULT_SOUND); 


      NotificationManager notificationManager = (NotificationManager) appContext.getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify((int) processId, builder.build()); 
     } 

HomeActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     if (getIntent().getExtras() != null) { 
      for (String key : getIntent().getExtras().keySet()) { 
       Object value = getIntent().getExtras().get(key); 
       if (BuildConfig.DEBUG_APPLICATION) { 
        Log.d(TAG, "Key: " + key + " Value: " + value); 
       } 
      } 
     } 
} 

Antwort

50

Sie sollten die Firebase Libraties-Version und Google Play Services-Bibliotheken ähnlich halten. So aktualisieren Sie die Versionsnummern der Firebase libararies bis 10.2.1:

Wechsel:

compile 'com.google.firebase:firebase-core:10.0.1' 
compile 'com.google.firebase:firebase-messaging:10.0.1' 

An:

compile 'com.google.firebase:firebase-core:10.2.1' 
compile 'com.google.firebase:firebase-messaging:10.2.1' 
+0

@ user-44651 Ist diese Antwort Ihre Frage? –

+0

Das funktionierte für mich, als ich eine lib hatte, die von com.google.firebase: firebase-messaging: 10.2.0 und eins von com.google.firebase: firebase-core: 10.2.1. Hinzufügen der Abhängigkeit zu Messaging: 10.2.1 hat mein Problem hier gelöst. –

+0

alle Bibliotheksversionen unter ähnlichen Paketen sollten übereinstimmen, bitte akzeptieren Sie dies als richtige Antwort – Manny265

1

ich das Projekt nur gereinigt und es funktionierte

11

Yout muss Haben Sie alle die Linie von Google Play Service in der gleichen Version

compile 'com.google.android.gms:play-services:11.0.1' 
compile 'com.google.android.gms:play-services-maps:11.0.1' 
compile 'com.google.firebase:firebase-core:11.0.1' 
compile 'com.google.firebase:firebase-messaging:11.0.1' 
+0

Fragen Sie mich nicht, warum ... Es hat sogar einige hartnäckige Compilation Puzzler gelöst. handleIntent fehlte überhaupt. Seltsam, weil auf 10 sollte es definiert werden, auf 11 sollte es definiert werden ... nicht typisch für sie kompilierungskompatibilität brechen, und doch ... Fakten sprechen. – Meymann

Verwandte Themen