openid / AppAuth-Android

Android client SDK for communicating with OAuth 2.0 and OpenID Connect providers.
https://openid.github.io/AppAuth-Android
Apache License 2.0
2.87k stars 888 forks source link

android.content.ActivityNotFoundException: When app opened #1052

Open dhruvsunking opened 7 months ago

dhruvsunking commented 7 months ago

Checklist:

Configuration

Issue Description

Get this exception on Crashlytics when app is opened

Caused by android.content.ActivityNotFoundException:
       at net.openid.appauth.AuthorizationService.prepareAuthorizationRequestIntent(AuthorizationService.java:555)
       at net.openid.appauth.AuthorizationService.getAuthorizationRequestIntent(AuthorizationService.java:390)
       at login.utils.LoginHelper.doAuth(LoginHelper.java:131)
       at login.utils.LoginHelper.startAuth(LoginHelper.java:112)
       at login.view.LoginHomeActivity.startAuth(LoginHomeActivity.kt:196)
       at login.view.LoginHomeActivity.initView(LoginHomeActivity.kt:118)
       at baseclass.BaseActivity.onCreate(BaseActivity.kt:42)
       at android.app.Activity.performCreate(Activity.java:8591)
       at android.app.Activity.performCreate(Activity.java:8570)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4150)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4325)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8757)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
CompileConnected commented 7 months ago

can you explain more? is it minify? if does, you might need to exclude the app auth library to be obsfucate by gradle

dhruvsunking commented 7 months ago

Sure. no it is not minified. Sometimes it works fine but sometime suddenly (prepareAuthorizationRequestIntent, getAuthorizationRequestIntent) these two started throwing exception of activity not found.

amit517 commented 7 months ago

Hi from Android 13 we are required to add category with the intent. If didn't have that with your intent, can you add the following and check if that helps.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { authIntent.addCategory(Intent.CATEGORY_DEFAULT) authIntent.addCategory(Intent.CATEGORY_BROWSABLE) }

Update: This doesn't work. It's still crashing.

amit517 commented 6 months ago

My user scenario is similar like this old comment

Got several crash report of that. User mostly with Samsung. OS Version 13, 14. And chrome is installed. image

JaFiOriflame commented 6 months ago

We have the same problem. We've implemented it recently. Successfully tested on multiple devices. However, after we've released it we have a lot of ActivityNotFoundException. Mostly Samsung devices and Android 13. Unfortunately, I don't have any device with this problem :-(

image

guillaume-tgl commented 5 months ago

I also had several users reporting this problem, all with Samsung devices with Android 13. And the problem goes away after restarting the device. It seems like there's a bug with intent handling on this version of Samsung-modified Android version. Seems related to this SO question: https://stackoverflow.com/questions/78341069/packagemanager-queryintentactivities-returns-empty-on-random-devices

W-quan commented 4 months ago
图片 图片 图片
uitstu commented 1 month ago
Screen Shot 2024-09-23 at 09 25 44

@guillaume-tgl not only Android 13, not only Samsung, hope you all fix this bug on next version

svenjacobs commented 1 month ago

Also seeing the same crashes in Firebase Crashlytics but can't reproduce it.

Also see issue #991 with some interesting information: It might be related to Samsung Internet Browser installed from the Galaxy Store.

wnetsimon commented 1 month ago

Is there any solution to this yet?

Some of our users face the same issue with Samsung (Android 13) devices - they suddenly get an ActivityNotFoundException in prepareAuthorizationRequestIntent, even though there are browsers installed on the device.

We cannot reproduce it on our side with Samsung Internet Browser installed from the Galaxy Store as default browser (and no other browser enabled).

rprunskas commented 1 month ago

As a workaround, I created an authentication WebView that opens when an ActivityNotFoundException is thrown. I use AuthorizationRequest to load URL in webview and I create AuthorizationResponse to return result. So handling result is the same implementation for webview and browser.

I haven't reproduced this error, but I believe it would work, because no need to open external browser when using internal webview.

SunnyBe commented 6 days ago

@rprunskas do you mind sharing a github gist for how you implemented your workaround?

SunnyBe commented 6 days ago

@guillaume-tgl did you find any fix or workaround, kindly share with me