19

Po otrzymaniu powiadomienia push w systemie Android pojawia się następujący błąd. Naprawdę nie mogę znaleźć żadnych informacji na ten temat. Czy ktoś może pomóc? Naprawdę jestem zagubiony.Uchwyt FirebaseIntent 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())); 

    } 

Narzędzia

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

Odpowiedz

50

Powinieneś zachować wersję bibliotek Firebase i bibliotek usług Google Play w podobny sposób. Więc zaktualizować numery wersji libararies Firebase do 10.2.1:

Zmiana:

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

Do:

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

@ user-44651 Czy to jest odpowiedź na twoje pytanie? –

+0

To działało dla mnie, gdy miałem jedną bibliotekę w zależności od com.google.firebase: firebase-messaging: 10.2.0 i jeden na com.google.firebase: firebase-core: 10.2.1. Dodawanie zależności do wiadomości: 10.2.1 rozwiązało mój problem tutaj. –

+0

wszystkie wersje bibliotek pod podobnymi pakietami powinny się zgadzać, proszę przyjąć tę poprawną odpowiedź. – Manny265

1

Właśnie czyścić projekt i pracował

11

yout moszczu mieć wszystkie linie usługi Google Play w tej samej wersji:

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

Nie pytaj mnie dlaczego ... Rozwiązał nawet upartą układankę kompilacji. uchwytIntent w ogóle nie istniał. Dziwne, ponieważ na 10 powinno być zdefiniowane, na 11 powinno być zdefiniowane ... nietypowe dla nich, aby złamać kompatybilność kompilacji, a jednak ... fakty mówią. – Meymann