MaikuB/flutter_appauth

"Failed to authorize: Null intent received" when using deeplink to bring app in front under android

Opened this issue · 0 comments

Hello everyone, Hello MaikuB,
I have a multi-step authentication process in the course of which the user does something in another app. To do this, I first call authoriseAndExchangeCode. During the authentication process, another app is called from the custom Android tab or the ASAuthenticationSession. To bring the custom app back into the foreground after the activities in the other app, I have defined another Android app link/deeplink/intent filter in the main activity. This deeplink is then called from the other app. After the return, the Android custom tab or the ASAuthentificationSession should still be visible. The problem is that under android the authentication is cancelled after the return and authorizeAndExchangeCode throws a PlatformException(null_intent, Failed to authorize: Null intent received, null, null). However, this flow works on iOS.

The following is an excerpt from the AndroidManifest.xml

        <activity
            android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:exported="true"
            android:hardwareAccelerated="true"
            android:launchMode="singleInstance"
            android:showWhenLocked="false"
            android:theme="@style/LaunchTheme"
            android:turnScreenOn="true"
            android:windowSoftInputMode="adjustResize">
...
        <!-- This activity is used for jump back-->
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="https" />
                <data android:host="my-host.tld"/>
                <data android:path="/launch-my-app"/>
            </intent-filter>
        </activity>
        <!-- This activity is later used for auth with AppAuth-->
        <activity
            android:name="net.openid.appauth.RedirectUriReceiverActivity"
            android:exported="true"
            tools:node="replace">
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="https" />
                <data android:host="my-other-host.tld"/>
                <data android:path="/auth"/>
            </intent-filter>
        </activity> 

The error seems to be due to the fact that onActivityResult(int requestCode, int resultCode, Intent intent) is called although the authentication has not yet been completed.

Does anyone have an idea what I can do or how I can fix this?