firebase / FirebaseUI-Android

Optimized UI components for Firebase
https://firebaseopensource.com/projects/firebase/firebaseui-android/
Apache License 2.0
4.63k stars 1.84k forks source link

Crash: ActivityNotFoundException: No Activity found to handle null #1873

Open edenman opened 3 years ago

edenman commented 3 years ago

Env

Problem

Steps to reproduce:

I haven't repro'd this myself, it came in via Sentry. There's none of my code in the stacktrace.

Relevant Code:

Breadcrumbs before the crash:

onActivityDestroyed class com.firebase.ui.auth.KickoffActivity 42604145 
ui.lifecycle state: stopped screen: MainActivity
ui.lifecycle state: saveInstanceState screen: MainActivity
ui.lifecycle state: stopped screen: KickoffActivity
ui.lifecycle state: saveInstanceState screen: KickoffActivity
ui.lifecycle state: paused screen: AuthMethodPickerActivity
onActivityPaused class com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity 19992921 
ui.lifecycle state: created screen: EmailActivity
onActivityCreated class com.firebase.ui.auth.ui.email.EmailActivity 189888988 
ui.lifecycle state: started screen: EmailActivity

Stacktrace

android.content.ActivityNotFoundException: No Activity found to handle null
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2058)
    at android.app.Activity.startIntentSenderForResultInner(Activity.java:5473)
    at android.app.Activity.startIntentSenderForResult(Activity.java:5439)
    at androidx.activity.ComponentActivity.startIntentSenderForResult(ComponentActivity.java:602)
    at androidx.core.app.ActivityCompat.startIntentSenderForResult(ActivityCompat.java:274)
    at androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:200)
    at androidx.activity.result.ActivityResultRegistry$4.launch(ActivityResultRegistry.java:198)
    at androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:42)
    at androidx.fragment.app.FragmentManager.launchStartIntentSenderForResult(FragmentManager.java:3012)
    at androidx.fragment.app.Fragment.startIntentSenderForResult(Fragment.java:1448)
    at com.firebase.ui.auth.util.ui.FlowUtils.startIntentSenderForResult(FlowUtils.java:64)
    at com.firebase.ui.auth.util.ui.FlowUtils.unhandled(FlowUtils.java:42)
    at com.firebase.ui.auth.viewmodel.ResourceObserver.onChanged(ResourceObserver.java:76)
    at com.firebase.ui.auth.viewmodel.ResourceObserver.onChanged(ResourceObserver.java:19)
    at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
    at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:146)
    at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:468)
    at androidx.lifecycle.LiveData$LifecycleBoundObserver.onStateChanged(LiveData.java:425)
    at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
    at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)
    at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)
    at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
    at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
    at androidx.fragment.app.Fragment.performStart(Fragment.java:2998)
    at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:606)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:308)
    at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1632)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3109)
    at androidx.fragment.app.FragmentManager.dispatchStart(FragmentManager.java:3060)
    at androidx.fragment.app.FragmentController.dispatchStart(FragmentController.java:262)
    at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:482)
    at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1432)
    at android.app.Activity.performStart(Activity.java:7847)
    at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294)
    at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
    at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
edenman commented 3 years ago

Gonna update to 7.1.0 and see if that helps

edenman commented 3 years ago

This has now happened four times, all to the same user. Who of course, I can't communicate with because presumably they haven't successfully logged in yet.

And I can't update to 7.1.0 because of #1874, waiting for 7.1.1.

edenman commented 3 years ago

I'm happy to submit a PR for this, just let me know what approach you'd like to take: 1) Catch the ANFE in the FlowUtils.startIntentSenderForResult methods 2) Check for null Intent in FlowUtils.unhandled and no-op 3) Perform some initial validation on the PendingIntent to ensure it's valid? Not sure what this would look like 4) Something else?

samtstern commented 3 years ago

@edenman sorry for my slow response and thanks for the offer of a PR. Before we try to add a fix to catch this error I'd really like to find a way to reproduce it. Otherwise it could be covering up something larger.

edenman commented 3 years ago

Gotcha. How about a half-measure: catch the exception, add some more information about how we got in this state, then re-throw? I can't actually tell if you're able to grab that information early enough, though.

samtstern commented 3 years ago

@edenman sorry for the slow response, I'd be fine with that!

Also 7.1.1 is out now, let me know if that fixes #1874 for you. I haven't had anyone confirm that directly yet.

edenman commented 3 years ago

I poked around and I can't even figure out what could be causing this so I don't know what/where to add logging. Lmk if you have guidance or if you can just add it yourself?

samtstern commented 3 years ago

No worries I'll look into this one!

On Sun, Dec 6, 2020 at 11:44 AM Eric Denman notifications@github.com wrote:

I poked around and I can't even figure out what could be causing this so I don't know what/where to add logging. Lmk if you have guidance or if you can just add it yourself?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/firebase/FirebaseUI-Android/issues/1873#issuecomment-739552997, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACATB2SXSRBVNMBCIC26OTTSTPNKZANCNFSM4T75535Q .

syntech16 commented 3 years ago

Hi! A few weeks ago I was able to reproduce that same error with another app I installed. @edenman , if you want me to try yours and see if I can reproduce it, just drop me a line.

edenman commented 3 years ago

This is still happening in 7.1.1

zjamshidi commented 3 years ago

This is happening for my app, too:

Fatal Exception: android.content.ActivityNotFoundException: No Activity found to handle null
       at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2067)
       at android.app.Activity.startIntentSenderForResultInner(Activity.java:5583)
       at android.app.Activity.startIntentSenderForResult(Activity.java:5549)
       at androidx.fragment.app.FragmentActivity.startIntentSenderForResult(FragmentActivity.java:704)
       at androidx.core.app.ActivityCompat.startIntentSenderForResult(ActivityCompat.java:271)
       at androidx.fragment.app.FragmentActivity.startIntentSenderFromFragment(FragmentActivity.java:818)
       at androidx.fragment.app.FragmentActivity$HostCallbacks.onStartIntentSenderFromFragment(FragmentActivity.java:940)
       at androidx.fragment.app.Fragment.startIntentSenderForResult(Fragment.java:1291)
       at com.firebase.ui.auth.util.ui.FlowUtils.startIntentSenderForResult(FlowUtils.java:64)
       at com.firebase.ui.auth.util.ui.FlowUtils.unhandled(FlowUtils.java:42)
       at com.firebase.ui.auth.viewmodel.ResourceObserver.onChanged(ResourceObserver.java:76)
       at com.firebase.ui.auth.viewmodel.ResourceObserver.onChanged(ResourceObserver.java:19)
       at androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
       at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:144)
       at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:443)
       at androidx.lifecycle.LiveData$LifecycleBoundObserver.onStateChanged(LiveData.java:395)
       at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
       at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)
       at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)
       at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
       at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
       at androidx.fragment.app.FragmentViewLifecycleOwner.handleLifecycleEvent(FragmentViewLifecycleOwner.java:51)
       at androidx.fragment.app.Fragment.performStart(Fragment.java:2737)
       at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:365)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1194)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
       at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
       at androidx.fragment.app.FragmentManager.dispatchStart(FragmentManager.java:2583)
       at androidx.fragment.app.FragmentController.dispatchStart(FragmentController.java:258)
       at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:550)
       at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435)
       at android.app.Activity.performStart(Activity.java:8024)
       at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3457)
       at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
       at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7660)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

using: implementation platform('com.google.firebase:firebase-bom:26.3.0') implementation 'com.firebaseui:firebase-ui-auth:7.1.1'