You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Firebase实现Google登录后,对话框关闭时黑条问题求助

解决Firebase Google Sign In登录对话框关闭时的黑条问题

嘿,这个问题我之前帮同事排查过,那种快速滑过的黑条确实挺破坏用户体验的,大概率是Google Sign In的系统过渡动画和你的应用页面配置冲突了,给你几个亲测有效的解决方案:

方案1:禁用登录Intent的默认过渡动画

默认情况下,启动Google Sign In的Intent会触发系统自带的页面过渡动画,这很可能就是黑条的来源。你可以在启动登录Intent后直接禁用过渡动画:

// Kotlin示例,Java写法逻辑一致
val signInIntent = googleSignInClient.signInIntent
startActivityForResult(signInIntent, RC_SIGN_IN)
// 关键:禁用默认过渡动画
overridePendingTransition(0, 0)

这样登录对话框关闭时,就不会触发系统的滑入滑出动画,从根源上避免黑条出现。

方案2:检查应用主题的窗口配置

有时候应用主题里的窗口背景或动画设置会和Google Sign In的UI产生冲突。你可以去styles.xml(或themes.xml)里检查你的主题配置:

  • 确保窗口背景颜色和你的页面背景一致,不要用黑色:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowBackground">@color/your_app_main_background</item>
    <!-- 如果有自定义的窗口动画样式,先注释掉测试是否是它导致的问题 -->
    <!-- <item name="android:windowAnimationStyle">@style/CustomWindowAnim</item> -->
</style>

方案3:用Activity Result API替代旧的startActivityForResult

如果你用的是较新的Android版本,建议改用registerForActivityResult来处理登录回调,这样能更灵活地控制页面过渡:

val signInLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    when (result.resultCode) {
        Activity.RESULT_OK -> {
            // 处理登录成功逻辑
            // 可以设置自定义的平滑过渡动画
            requireActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out)
        }
        else -> {
            // 登录取消,回到原页面时禁用动画
            requireActivity().overridePendingTransition(0, 0)
        }
    }
}

// 启动登录流程
signInLauncher.launch(googleSignInClient.signInIntent)

方案4:更新Google Play Services依赖

旧版本的Google Play Services可能存在这类UI小bug,尝试把你的依赖更新到最新稳定版:

// 在Module级别的build.gradle中
implementation 'com.google.android.gms:play-services-auth:20.7.0' // 替换为当前最新版本

你可以先从方案1开始试,这个最简单也最容易见效,如果不行再依次尝试其他方案。

内容的提问来源于stack exchange,提问作者Jyoti Sharma

火山引擎 最新活动