Skip to content Skip to sidebar Skip to footer

Chrome Custom Tabs Redirect To Android App Will Close The App

I am trying to implement an OAuth2 flow with an Android Chrome Custom Tab but my app is always closed (no crash) when the Chrome Custom Tab is receiving the 302 with the location/s

Solution 1:

I've also observed my Android app unexpectedly background after server-side 302 redirection to a custom scheme, and observed expected handling from stand-alone Chrome and manually triggered redirection in the client.

I was able to "fix" the issue by calling the warmup function before loading the url that redirects.

In other words, this works:

voidlaunchTab(Context context, Uri uri){
    finalCustomTabsServiceConnectionconnection=newCustomTabsServiceConnection() {
        @OverridepublicvoidonCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient client) {
            final CustomTabsIntent.Builderbuilder=newCustomTabsIntent.Builder();
            finalCustomTabsIntentintent= builder.build();
            client.warmup(0L); // This prevents backgrounding after redirection
            intent.launchUrl(context, uri);
        }
        @OverridepublicvoidonServiceDisconnected(ComponentName name) {}
    };
    CustomTabsClient.bindCustomTabsService(context, "com.android.chrome", connection);
}

This doesn't work:

voidlaunchTab(Context context, Uri uri){
    final CustomTabsIntent.Builderbuilder=newCustomTabsIntent.Builder();
    finalCustomTabsIntentintent= builder.build();
    intent.launchUrl(context, uri);
}

The Chrome Custom Tab docs describe warming up as a best practice, but it also appears to help ensure expected behavior.

In terms of env, I'm testing on a Nexus 5X w Chrome 51. My chrome tab dependency in Gradle looks like this:

dependencies {
    compile'com.android.support:customtabs:24.0.0'

Solution 2:

If I used android:launchMode="singleInstance" there were multiple instances in the task manager so this was no option.

Starting the CustomTabsIntent with FLAG_ACTIVITY_NEW_TASK Flag did the trick.

CustomTabsIntent.Builderbuilder=newCustomTabsIntent.Builder();
CustomTabsIntentintent= builder.build();

intent.intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
intent.launchUrl(context, Uri.parse(url));

Solution 3:

It helped me to set the Activity that I use to start a CustomTab to singleInstance mode in the manifest file:

    <activity
        android:launchMode="singleInstance"
        android:name="com.example.SingleInstanceActivityToStartCustomTab"
    </activity>

And in the code I do as usual:

    CustomTabsIntent.Builderbuilder=newCustomTabsIntent.Builder();
    finalCustomTabsIntentcustomTabsIntent= builder.build();
    customTabsIntent.intent.setPackage(someChromePackage);
    customTabsIntent.launchUrl(singleInstanceModeActivity, someUriThatDoesRedirect);

I tried warming up Chrome and even calling customTabsIntent.launchUrl() with some delay after calling client.warmup(0l); and neither helped.

Solution 4:

I'm pretty sure this is the result of a bug in Chrome. I updated all of my devices (GS6, GS7, Nexus 7 and Nexus 9) to the latest version of Chrome and my app is no longer minimized when the redirect occurs.

I just discovered this today (11/3/2016) so I don't yet have any information about the specific bug or its subsequent resolution. This is just what I've noticed.

Hope that helps!

Post a Comment for "Chrome Custom Tabs Redirect To Android App Will Close The App"