Skip to content

Crash if no internet available, Twitter #1057

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
thomsan opened this issue Dec 15, 2017 · 8 comments
Closed

Crash if no internet available, Twitter #1057

thomsan opened this issue Dec 15, 2017 · 8 comments

Comments

@thomsan
Copy link

thomsan commented Dec 15, 2017

1: Are you in the right place?

yes

Step 2: Describe your environment

  • Android device: Samsung Galaxy S6
  • Android OS version: 7.0
  • Google Play Services version: 11.9.51
  • Firebase/Play Services SDK version: 11.4.2
  • FirebaseUI version: 3.1.0

Step 3: Describe the problem:

If I'm signed out and don't have internet connection the app crashes on startup.
The logs say something related to Twitter can't be found, even though I don't use Twitter authentication.
I only use Google and Email authentication.

Steps to reproduce:

  1. Sign out, if previously signed in
  2. Turn on Airplane mode
  3. Start app

Observed Results:

Immediate app crash with following output:

12-15 16:38:18.483 3689-3689/example.com I/art: Rejecting re-init on previously-failed class java.lang.Class<com.firebase.ui.auth.provider.TwitterProvider>: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/twitter/sdk/android/core/Callback;
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.firebase.ui.auth.AuthUI$IdpConfig$Builder.<init>(java.lang.String) (AuthUI.java:382)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void example.com.MainActivity$3.onAuthStateChanged(com.google.firebase.auth.FirebaseAuth) (MainActivity.java:189)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.google.firebase.auth.zzi.run() ((null):-1)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:751)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.os.Looper.loop() (Looper.java:154)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6682)
12-15 16:38:18.483 3689-3689/example.com I/art:     at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1520)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1410)
12-15 16:38:18.483 3689-3689/example.com I/art: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.twitter.sdk.android.core.Callback" on path: DexPathList[[zip file "/data/app/example.com-1/base.apk", zip file "/data/app/example.com-1/split_lib_dependencies_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_0_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_1_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_2_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_3_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_4_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_5_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_6_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_7_apk.apk", zip file "/data/app/example.com-1/split_lib_slice_8_apk.apk", zip file
12-15 16:38:18.483 3689-3689/example.com I/art:     at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
12-15 16:38:18.483 3689-3689/example.com I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
12-15 16:38:18.483 3689-3689/example.com I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.firebase.ui.auth.AuthUI$IdpConfig$Builder.<init>(java.lang.String) (AuthUI.java:382)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void example.com.MainActivity$3.onAuthStateChanged(com.google.firebase.auth.FirebaseAuth) (MainActivity.java:189)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.google.firebase.auth.zzi.run() ((null):-1)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:751)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.os.Looper.loop() (Looper.java:154)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6682)
12-15 16:38:18.483 3689-3689/example.com I/art:     at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1520)
12-15 16:38:18.483 3689-3689/example.com I/art:     at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1410)

Expected Results:

  • What did you expect to happen?

Relevant Code:

  private FirebaseAuth.AuthStateListener createAuthStateListener(){
      return new FirebaseAuth.AuthStateListener() {
          @Override
          public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
              FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
              FirebaseUtils.setFirebaseUser(firebaseUser);
              if(firebaseUser != null){
                  // user is signed in
                  onSignedInInitialize();
              } else {
                  // user is signed out
                  onSignedOutCleanup();
                  // Choose authentication providers
189>>>            List<AuthUI.IdpConfig> providers = Arrays.asList(
                          new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
                          new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build());
                  
                  // Create and launch sign-in intent
                  startActivityForResult(
                          AuthUI.getInstance()
                                  .createSignInIntentBuilder()
                                  .setIsSmartLockEnabled(true)
                                  .setAvailableProviders(providers)
                                  .build(),
                          RC_SIGN_IN);
              }
          }
      };
  }
@samtstern
Copy link
Contributor

samtstern commented Dec 15, 2017

Hmmm import com.twitter.sdk.android.core.Callback; happens to be the first com.twitter.sdk class we import in TwitterProvider (no idea if order is relevant?) so somehow we're trying to use that class when the Twitter SDK is not included.

Not sure how this relates to being offline, but will try and think about it.

@samtstern
Copy link
Contributor

@thomsan two questions:

  • Does this only happen when offline? Or on any failed sign in?
  • If you added the Twitter SDK (see auth/README.md) does the problem persist?

@eliotstock
Copy link

I can't repro the crash when offline, but I also get the ClassNotFoundException for this class even though I'm not using Twitter for auth.

Android device: Google Pixel 2 XL
Android OS version: 8.1
Google Play Services version: 11.8.0
Firebase/Play Services SDK version: 11.8.0
FirebaseUI version: 3.2.1

@SUPERCILEX
Copy link
Collaborator

@samtstern I think this issue can probably closed since neither of us can repro and we haven't received more details. @eliotstock if you have extra info (stack trace and code sample), please share! 😄

@samtstern
Copy link
Contributor

Yes I think we can close this due to age and lack of new reports. @thomsan or @eliotstock if you see this again and can help us get more details we will definitely re-open the issue!

@objcode
Copy link

objcode commented Mar 7, 2018

I just reproduced this again, with a few more interesting details.

  1. I'm using dagger2 to inject FirebaseAuth into my app.
  2. I am not offline mode, and it's not happening at login, but rather at logout.
  3. I'm seeing log lines about "Notifying auth state listeners. Notified 0 auth state listeners."
Rejecting re-init on previously-failed class java.lang.Class<com.firebase.ui.auth.provider.TwitterProvider>: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/twitter/sdk/android/core/Callback;
              at com.google.android.gms.tasks.Task com.firebase.ui.auth.AuthUI.signOutIdps(android.content.Context) (AuthUI.java:368)
              at com.google.android.gms.tasks.Task com.firebase.ui.auth.AuthUI.signOut(android.content.Context) (AuthUI.java:297)

and the logs:

Notifying auth state listeners.
Notified 0 auth state listeners.

@samtstern samtstern reopened this Mar 7, 2018
@samtstern
Copy link
Contributor

@objcode fwiw this is a complete mystery to me. Not that it's an actually good solution, but is this fixed by a dependency on twitter-core?

@samtstern
Copy link
Contributor

This issue has been fixed and released in 3.3.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants