capacitor-community / fcm

Enable Firebase Cloud Messaging for Capacitor apps
https://capacitor.ionicframework.com/docs/
MIT License
237 stars 83 forks source link

Android app crashes after splash screen #56

Closed madmacc closed 3 years ago

madmacc commented 3 years ago

When running on device from Android Studio the app crashes right after the splash screen and I get the error "AppName has stopped".

I am following the instructions and using the sample code. See below. If I remove the subscribe code it runs without crashing and get to the then code after the register: I can't see any console logs in the remote browser as it crashes.

 PushNotifications.register()
    .then(() => {
      console.log('success');
    })
    .catch((err) => alert(JSON.stringify(err)));

I am currently using the old version of the plugin with a different app on the same device and it works fine.

I might try going back to io.stewan.capacitor.fcm.FCMPlugin if I can't resolve this. Does it work with the latest versions of Ionic and Capacitor?

To Reproduce ionic build npx cap copy android (previously have run sync) npx cap open android run (from android studio)

Expected behavior App opens successfully.

Project: "@capacitor/android": "^2.4.2", "@capacitor/core": "2.4.2", "@ionic-native/core": "^5.0.0",

Smartphone:

Code:

import '@capacitor-community/firebase-analytics';

import {
  Plugins,
  PushNotification,
  PushNotificationActionPerformed,
  PushNotificationToken,
  NotificationChannel,
  // PushNotificationChannel,
  AppState,
  AppUrlOpen
} from '@capacitor/core';

const { PushNotifications } = Plugins;

initializeApp() {

    this.platform.ready().then(() => {
      if (this.platform.is('capacitor')) {
        this.setupPushNotifications();
 });
  }

setupPushNotifications() {
    PushNotifications.register()
    .then(() => {
      //
      // Subscribe to a specific topic
      // you can use `FCMPlugin` or just `fcm`
      fcm
        .subscribeTo({ topic: 'test' })
        .then((r) => alert(`subscribed to topic`))
        .catch((err) => console.log(err));
    })
    .catch((err) => alert(JSON.stringify(err)));
}

MainActivity.java:
package nz.co.wekasolutions.nmtbc;

import android.os.Bundle;

import com.getcapacitor.BridgeActivity;
import com.getcapacitor.Plugin;
import com.getcapacitor.community.firebaseanalytics.FirebaseAnalytics;
import com.getcapacitor.community.fcm.FCMPlugin;

import java.util.ArrayList;

public class MainActivity extends BridgeActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
      // Additional plugins you've installed go here
      // Ex: add(TotallyAwesomePlugin.class);
      add(FirebaseAnalytics.class);
      add(FCMPlugin.class);
    }});
  }
}
madmacc commented 3 years ago

Android logs:

2020-11-10 12:59:15.802 11480-11554/? E/Capacitor: Serious error executing plugin
    java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99)
        at com.getcapacitor.Bridge$1.run(Bridge.java:526)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.lang.NoSuchMethodError: No virtual method zza(Ljava/lang/String;)Lcom/google/android/gms/tasks/Task; in class Lcom/google/firebase/iid/FirebaseInstanceId; or its super classes (declaration of 'com.google.firebase.iid.FirebaseInstanceId' appears in /data/app/nz.co.wekasolutions.nmtbc-9MDPHeR5OHnOkhnzVUxi-Q==/base.apk)
        at com.google.firebase.messaging.FirebaseMessaging.subscribeToTopic(com.google.firebase:firebase-messaging@@20.1.2:19)
        at com.getcapacitor.community.fcm.FCMPlugin.subscribeTo(FCMPlugin.java:28)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99) 
        at com.getcapacitor.Bridge$1.run(Bridge.java:526) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
2020-11-10 12:59:15.807 11480-11554/? E/AndroidRuntime: FATAL EXCEPTION: CapacitorPlugins
    Process: nz.co.wekasolutions.nmtbc, PID: 11480
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.getcapacitor.Bridge$1.run(Bridge.java:535)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99)
        at com.getcapacitor.Bridge$1.run(Bridge.java:526)
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
     Caused by: java.lang.NoSuchMethodError: No virtual method zza(Ljava/lang/String;)Lcom/google/android/gms/tasks/Task; in class Lcom/google/firebase/iid/FirebaseInstanceId; or its super classes (declaration of 'com.google.firebase.iid.FirebaseInstanceId' appears in /data/app/nz.co.wekasolutions.nmtbc-9MDPHeR5OHnOkhnzVUxi-Q==/base.apk)
        at com.google.firebase.messaging.FirebaseMessaging.subscribeToTopic(com.google.firebase:firebase-messaging@@20.1.2:19)
        at com.getcapacitor.community.fcm.FCMPlugin.subscribeTo(FCMPlugin.java:28)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99) 
        at com.getcapacitor.Bridge$1.run(Bridge.java:526) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 

2020-11-10 12:59:32.146 11657-11745/nz.co.wekasolutions.nmtbc E/Capacitor: Serious error executing plugin
    java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99)
        at com.getcapacitor.Bridge$1.run(Bridge.java:526)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.lang.NoSuchMethodError: No virtual method zza(Ljava/lang/String;)Lcom/google/android/gms/tasks/Task; in class Lcom/google/firebase/iid/FirebaseInstanceId; or its super classes (declaration of 'com.google.firebase.iid.FirebaseInstanceId' appears in /data/app/nz.co.wekasolutions.nmtbc-9MDPHeR5OHnOkhnzVUxi-Q==/base.apk)
        at com.google.firebase.messaging.FirebaseMessaging.subscribeToTopic(com.google.firebase:firebase-messaging@@20.1.2:19)
        at com.getcapacitor.community.fcm.FCMPlugin.subscribeTo(FCMPlugin.java:28)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99) 
        at com.getcapacitor.Bridge$1.run(Bridge.java:526) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
2020-11-10 12:59:32.148 11657-11745/nz.co.wekasolutions.nmtbc E/AndroidRuntime: FATAL EXCEPTION: CapacitorPlugins
    Process: nz.co.wekasolutions.nmtbc, PID: 11657
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.getcapacitor.Bridge$1.run(Bridge.java:535)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99)
        at com.getcapacitor.Bridge$1.run(Bridge.java:526)
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
     Caused by: java.lang.NoSuchMethodError: No virtual method zza(Ljava/lang/String;)Lcom/google/android/gms/tasks/Task; in class Lcom/google/firebase/iid/FirebaseInstanceId; or its super classes (declaration of 'com.google.firebase.iid.FirebaseInstanceId' appears in /data/app/nz.co.wekasolutions.nmtbc-9MDPHeR5OHnOkhnzVUxi-Q==/base.apk)
        at com.google.firebase.messaging.FirebaseMessaging.subscribeToTopic(com.google.firebase:firebase-messaging@@20.1.2:19)
        at com.getcapacitor.community.fcm.FCMPlugin.subscribeTo(FCMPlugin.java:28)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99) 
        at com.getcapacitor.Bridge$1.run(Bridge.java:526) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
madmacc commented 3 years ago

This comment resolved it: https://github.com/ionic-team/capacitor/issues/2906#issuecomment-627582190

Spent half a day on this!!
Maybe add it to the instructions?

adamrz commented 3 years ago

This killed me today for 1/2 a day as well. Thank you for sharing the resolution!