You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Mobile Ads SDK初始化错误:Google登录Activity崩溃排查

App崩溃排查:Google Mobile Ads SDK初始化错误 + Firebase登录代码修复

一、核心崩溃原因:Google Mobile Ads SDK未正确初始化

从Logcat日志来看,崩溃的直接原因是AdMob/Ad Manager的App ID未在AndroidManifest.xml中配置,或者配置无效。即使当前只开发Firebase登录功能,只要项目引入了Google Mobile Ads相关依赖,就必须完成该配置。

解决方法:

  1. 添加AdMob App ID到Manifest
    在AndroidManifest.xml的<application>标签内部添加以下配置:

    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="你的AdMob App ID"/>
    

    注:如果还没有正式App ID,可使用测试ID ca-app-pub-3940256099942544~3347511713 临时绕过崩溃。

  2. (可选)移除未使用的Ads依赖
    如果项目不需要广告功能,直接在build.gradle(Module level)中移除Ads相关依赖,例如:

    // 移除该行或类似的依赖
    implementation 'com.google.android.gms:play-services-ads:21.0.0'
    

二、LoginActivity代码中的潜在问题修复

除了Ads的问题,登录代码还有一处逻辑错误会导致崩溃:

1. 修复One Tap登录的初始化顺序

你在调用oneTapClient.beginSignIn(signInReq)时,signInReq尚未初始化(构建代码在调用之后),会直接抛出空指针异常。调整代码顺序:

// 先构建signInReq
signInReq = BeginSignInRequest.builder()
    .setPasswordRequestOptions(
        BeginSignInRequest.PasswordRequestOptions.builder()
        .setSupported(true)
        .build())
    .setGoogleIdTokenRequestOptions(
        BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
            .setSupported(true)
            .setServerClientId(getString(R.string.default_web_client_id))
            .setFilterByAuthorizedAccounts(true)
            .build())
    .build()

// 再调用beginSignIn
oneTapClient = Identity.getSignInClient(this)
oneTapClient.beginSignIn(signInReq)
    .addOnSuccessListener(this) { result ->
        try {
            startIntentSenderForResult(
                result.pendingIntent.intentSender, REQ_ONE_TAP,
                null, 0, 0, 0, null
            )
        } catch (e: IntentSender.SendIntentException) {
            Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
        }
    }
    .addOnFailureListener(this) { e ->
        Log.d(TAG, e.localizedMessage as String)
    }

2. 实现Google登录按钮的点击事件

btnGoogleLogin按钮的点击事件为空,补充实现:

val googleButton: Button = findViewById(R.id.btnGoogleLogin)
googleButton.setOnClickListener {
    signIn() // 调用已定义的signIn方法
}

内容的提问来源于stack exchange,提问作者Andrew V Victorio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:25:22