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相关依赖,就必须完成该配置。
解决方法:
添加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临时绕过崩溃。(可选)移除未使用的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
相关产品推荐
相关产品推荐

