android - 自动关闭 chrome 自定义标签

标签 android chrome-custom-tabs

我有一个用于打开手机浏览器的应用程序,用户将被重定向到我的网络应用程序,在某个用户操作之后,网络应用程序使用 Intent 过滤器重定向回应用程序

 <application>     
<activity
                android:name="com.xyz.sdk.SomeActivity"
                android:allowTaskReparenting="true"
                android:configChanges="keyboardHidden|orientation|keyboard|screenSize"
                android:launchMode="singleTask"
                android:noHistory="true"
                android:theme="@android:style/Theme.NoTitleBar">
                <intent-filter>
                    <data android:scheme="someString-${applicationId}" />
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                </intent-filter>
            </activity>
 </application>

最近我迁移到使用 Chrome 自定义选项卡而不是浏览器(出于安全考虑,Webview 不是一个选项)

不幸的是,当在 Chrome 自定义选项卡中重定向回应用程序时,Chrome 自定义选项卡不会自动关闭。即使我可以通过日志验证应用程序已收到响应,自定义选项卡仍保持打开状态并保持在顶部,因此用户无法看到应用程序上发生的事情,直到他关闭应用程序。

我发现的一个解决方法是在启动我的自定义选项卡时设置 NEW_TASK 标志,但这会使我的应用程序和自定义选项卡显示为两个单独的应用程序,这就是我首先离开浏览器的全部原因.

总结:我有应用程序 A,它打开了一个自定义选项卡,在自定义选项卡中打开的 Web 应用程序使用 Intent 过滤器重定向回应用程序 A,但 vustom 选项卡不会关闭并保持在顶部,直到用户手动关闭它.

我已经尝试为自定义标签 Intent 设置 NO_HISTORY 标志,但没有任何区别。

自定义标签代码:

   CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
                         .setShowTitle(true)
                         .setToolbarColor(getToolBarColor())
                         .setStartAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right)
                         .setExitAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right)
                         .build();
                 customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                 customTabsIntent.launchUrl(this, Uri.parse(url));
                 customTabsIntent.launchUrl(this, Uri.parse(url));

更新 我已经意识到,如果 intent 过滤器重定向回另一个应用程序,则自定义选项卡会成功关闭(前提是它是一个单一的 Activity 并且没有历史记录设置为 true) 但就我而言,我们需要重定向回调用自定义选项卡的同一 Activity 。

最佳答案

我也遇到了同样的问题,但就我而言,它现在可以正常工作了。

我使用 FLAG_ACTIVITY_NO_HISTORY 和 FLAG_ACTIVITY_CLEAR_TOP 启动了自定义选项卡。

customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

我的 Activity 的启动模式是“singleTop”。

<activity
    android:name=".SomeActivity"
    android:theme="@style/SomeTheme"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:noHistory="true"
    android:launchMode="singleTop" >
    <intent-filter>
        <data android:scheme="intent" />
        <data android:scheme="myFile" />
        <data android:scheme="myScheme" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

@bkant 的重要更新:

I was able to get this to work by changing the launch mode from 'singleTop' to either 'singleTask' or 'singleInstance'. In this mode, the redirect will come to the same Activity via 'onNewIntent'.

关于android - 自动关闭 chrome 自定义标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42530178/

相关文章:

android - Urban Airship 设备注册在应用数据清除后生成新的 APID

java - 使用 InetAddress 获取自己的 IP

android - 如何隐藏自定义选项卡操作栏

chromium-embedded - Chrome 自定义选项卡是否受到新的 Google Chromium 嵌入式框架限制的影响?

Android:捕获错误 "Unfortunately ' 应用程序已停止工作”

java - 如何向 Android 应用程序添加简单的代码

android - 如何为我的服务编写公共(public)文件以在 Android 上获取?

android - [Android]google chrome更新后,chrome自定义标签在后台自动显示

javascript - Native App 和 Chrome Custom Tab (CCT) 之间的通信

chrome-custom-tabs - 强制关闭 Chrome 自定义标签