Firebase 身份验证:来自此 Android 客户端应用程序 com.xxx 的请求被阻止
Posted
技术标签:
【中文标题】Firebase 身份验证:来自此 Android 客户端应用程序 com.xxx 的请求被阻止【英文标题】:Firebase Auth: Requests from this Android client application com.xxx are blocked 【发布时间】:2019-01-26 06:29:22 【问题描述】:我正在我的 android 应用中实施 Firebase AuthUI 的标准教程。但是,在测试时,我尝试在应用内使用 Google 登录进行登录,但出现以下异常:
com.google.firebase.FirebaseException: An internal error has occurred.
[ Requests from this Android client application com.xxx are blocked. ]
该应用程序显示“Google SmartLock”横幅,就好像它正在让我登录,但随后消失并且在 logcat 中我看到了上面的错误。
我验证了我用于调试和发布的 SHA-1 证书指纹都在 Firebase 控制台中。我已经在这个应用程序中使用它们一段时间了,所以我知道它们是正确的。
我已在 Firebase 身份验证控制台上启用了 Google 登录和电子邮件登录。我已经尝试过电子邮件/谷歌登录,并且两个过程都开始但失败并出现相同的异常。我还下载并使用了一个新的 google-services.json 文件——没有变化。
应用程序名称正确。他们为什么要阻止我?有没有人联系过 Firebase 支持?
这是来自 build.gradle 的 sn-p:
api 'com.android.support:support-v4:27.1.1'
api 'com.android.support:appcompat-v7:27.1.1'
api 'com.android.support.constraint:constraint-layout:1.1.2'
api 'com.google.firebase:firebase-storage:16.0.1'
api 'com.google.firebase:firebase-core:16.0.1'
api 'com.google.android.gms:play-services-maps:15.0.1'
api 'com.google.android.gms:play-services-location:15.0.1'
api 'com.google.android.gms:play-services-ads:15.0.1'
api 'com.google.code.findbugs:jsr305:3.0.2'
api 'com.google.apis:google-api-services-storage:v1-rev68-1.21.0'
implementation 'com.firebaseui:firebase-ui-storage:0.6.0'
implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
testImplementation 'junit:junit:4.12'
Logcat:
/com.x.x W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@13ca6fd
/com.x.x D/FA: Logging event (FE): user_engagement(_e), Bundle[firebase_event_origin(_o)=auto, engagement_time_msec(_et)=12629, firebase_screen_class(_sc)=PhotoActivity, firebase_screen_id(_si)=-1316627329056180637]
/com.x.x D/FA: Logging event (FE): screen_view(_vs), Bundle[firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=PhotoActivity, firebase_previous_id(_pi)=-1316627329056180637, firebase_screen_class(_sc)=KickoffActivity, firebase_screen_id(_si)=-1316627329056180636]
/com.x.x D/FA: Connected to remote service
/com.x.x D/FA: Logging event (FE): user_engagement(_e), Bundle[firebase_event_origin(_o)=auto, engagement_time_msec(_et)=1312, firebase_screen_class(_sc)=KickoffActivity, firebase_screen_id(_si)=-1316627329056180636]
/com.x.x D/FA: Logging event (FE): screen_view(_vs), Bundle[firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=KickoffActivity, firebase_previous_id(_pi)=-1316627329056180636, firebase_screen_class(_sc)=SingleSignInActivity, firebase_screen_id(_si)=-1316627329056180635]
/com.x.x D/FA: Logging event (FE): screen_view(_vs), Bundle[firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=SingleSignInActivity, firebase_previous_id(_pi)=-1316627329056180635, firebase_screen_class(_sc)=SignInHubActivity, firebase_screen_id(_si)=-1316627329056180634]
/com.x.x W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@13ca6fd
/com.x.x D/FA: Logging event (FE): screen_view(_vs), Bundle[firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=SignInHubActivity, firebase_previous_id(_pi)=-1316627329056180634, firebase_screen_class(_sc)=SingleSignInActivity, firebase_screen_id(_si)=-1316627329056180635]
E/Volley: [23564] BasicNetwork.performRequest: Unexpected response code 403 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?alt=proto&key=[key]
E/Volley: [23564] BasicNetwork.performRequest: Unexpected response code 403 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?alt=proto&key=[key]
I/AuthChimeraService: Error description received from server: Requests from this Android client application com.x.x are blocked.
/com.x.x E/AuthUI: A sign-in error occurred.
com.google.firebase.FirebaseException: An internal error has occurred. [ Requests from this Android client application com.x.x are blocked. ]
【问题讨论】:
你有没有从firebase
控制台启用googlesignIn
好问题。是的,我有。电子邮件和 Google 登录已启用。登录过程开始但失败。当我尝试使用电子邮件登录时,我在提交电子邮件/密码时遇到了同样的异常。
我已经使用Firebase
完成了很多项目,所以我认为这不是他们的东西,你能分享build.gradle
文件和firebase 控制台的代码,你可以在其中输入你的应用程序package name
我从 build.gradle 添加了包名和依赖项。当支持时,我的包名称确实有两个大写字母。过去,这不是 Firebase 的问题。
这是一种完全奇怪的行为,尝试从控制台生成新的 json 文件并将其替换为当前文件,然后检查它是否良好
【参考方案1】:
我使用的 Google Cloud API 密钥仅限于带有我的包名称的 android,但只提供了生产 SHA-1 证书指纹,而不是调试密钥。我添加了调试密钥的 SHA-1 证书以及包名称,以便生产和调试证书都出现在密钥的“应用程序限制”中并且它有效。显然被firebase“阻止”意味着您的API密钥可能受到不正确的限制。
【讨论】:
就我而言,已发布的应用程序出现了这个问题,我不得不去控制台并为应用程序限制设置“无”。即使我使用了发布版 SHA。 @ousanmaz 这个选项在哪里? @ousenmaz 如果您使用的是 app bundle,请参阅 ***.com/a/49464848/8014724。【参考方案2】:我今天刚遇到同样的问题,幸运的是解决了这个问题。我仍然不知道为什么会发生这种情况,但这是我为解决而采取的步骤:
-
在 Firebase 控制台设置中删除已添加的 SHA-1 签名证书指纹。
转到 android studio 并使用 Gradle 文件同步项目。
再次将 SHA-1 签名证书指纹添加到 Firebase 控制台设置。
以下是向 Firebase 添加 SHA-1 签名证书指纹的方法:CLICK HERE
【讨论】:
我没有发现第 2 步是必要的,我需要做的就是删除 SHA-1 证书并将其重新添加。它有效。很奇怪。 Firebase 是否会在签署证书时强制执行某种到期期限? 我不相信它会有所作为,因为我已经在 Firebase 中配置了有效的 SHA-1 密钥。但是我可以确认,至少对我而言,删除此密钥并再次添加它为我解决了这个问题。【参考方案3】:我注意到由于某种原因,我的 Google Credentials API 密钥限制没有包含我的 SHA-1 指纹。
要查找您的 API 密钥,请转到 console.cloud.google.com/apis/credentials?project=。 或者去 console.cloud.google.com -> 点击左上角的汉堡图标 -> APIs and Services -> Credentials
选择您正在使用的 API 密钥。 - 在“应用程序限制”下,选择“Android 应用程序”(例如,如果您正在构建 Android 应用程序) - 在“限制使用您的 Android 应用程序”下,单击“添加项目” - 输入您的包裹名称和您的 SHA-1 指纹
要了解如何找到您的 SHA-1 指纹,LINK
signingReport 任务可能在 Gradle 下(在右侧垂直带上)app -> 任务 -> android
【讨论】:
非常感谢!这对我有帮助 API 密钥限制!!!!!!!!!!!!问题解决了!谢谢【参考方案4】:对于可能遇到此问题的其他人,您可能在 Play 控制台上使用内部应用共享,并启用了 Google 签名。如果是这样,您可能忘记将他们的 debug SHA-1 密钥添加到您的 Firebase 控制台。
很难调试或找到答案,所以我希望我添加了所有正确的关键字来帮助下一个人。
【讨论】:
这对我有用!在 Google Play 控制台内部: 1. 转到“设置”>“应用完整性” 2.找到“应用签名密钥证书”>“SHA-1 证书指纹”【参考方案5】:如果您将应用发布到 google play 商店然后显示此错误:
[ Requests from this Android client application com.x.x are blocked. ]
这里有一个解决方案可以非常轻松地解决您的问题。
-
打开谷歌游戏控制台 -> https://play.google.com/apps/publish
转到您的特定应用,哪个应用显示错误。
那就去
Setup -> App signin
最后你得到了你的SHA-1 certificate fingerprint
要查找您的 SHA-1 证书指纹,请转至 console.cloud.google.com/apis/credentials?project。或前往console.cloud.google.com -> 点击top left -> APIs and Services -> Credentials
上的汉堡图标。并更改您的所有SHA-1 certificate fingerprint
。
【讨论】:
这解决了我的问题。 谢谢。你节省了我的时间。我一直在寻找解决方案,终于找到了。【参考方案6】:我遇到了这个问题,并左右寻找解决方案。事实证明,至少在我的情况下,您实际上需要进入 Google Cloud Platform 中的凭据屏幕,然后您会发现:
限制使用您的 Android 应用 添加您的软件包名称和 SHA-1 签名证书指纹以限制您的 Android 应用程序的使用
您可以在此处ADD NEW ITEM
,表示您的应用程序包及其 SHA-1 签名。然后你就不会再有这个问题了(假设其余的配置都完成了)。我的应用对 Android 应用的密钥进行了限制,这一步是必要的。
【讨论】:
这里有同样的问题。很高兴你明白了。【参考方案7】:我们的应用在生产环境中运行了好几个月,但在将 Firebase SDK 升级到最新版本后,我们最近(2021 年 7 月)开始遇到同样的错误。
我们在Firebase Phone Auth Docs中找到了解决方法,其中状态:
如果用户的设备安装了 Google Play 服务,并且 Firebase 身份验证可以通过 Android SafetyNet 验证该设备是否合法,则可以继续使用电话号码登录。
正如文档建议的那样,解决方案是转到 Android Device Verification API 并为我们在 Google Cloud 中的项目启用 API。
之前(不工作)
之后(工作)
进行此更改后,我们所有的电话号码登录/注册功能几乎立即重新开始工作。
【讨论】:
【参考方案8】:当我为我的项目更改平台时,我也出现了同样的问题。即使我将 SHA-1 密钥添加到 firebase 控制台,它也无法正常工作。在我用我的项目名称签入谷歌云平台(console.cloud.google.com)之后。我表明自动生成的 API 密钥不包含我的新 SHA-1 密钥。所以我通过添加项目的包名和 SHA 密钥手动更新它,它可以工作。
【讨论】:
【参考方案9】:在遵循大多数其他答案之后,我无法让它适用于 Google Play 商店或调试版本。我似乎检查了一切合乎逻辑的东西,但没有任何改变。
如果没有任何效果,我建议简单地创建一个新的 Firebase 项目,这取决于它给您带来的麻烦,它会更快。如果可行,至少立即使用新的 Firebase 项目进行测试。如果它适用于新的 Firebase 项目,那么您就知道它与您的代码无关,而是与您的 Firebase 项目配置相关。
【讨论】:
【参考方案10】:我尝试了此处描述的所有内容,但在浪费了许多小时后没有任何帮助。从应用 Google Play App Signing 添加 sha1 密钥没有帮助。
然后我关闭了“Android 密钥(由 Firebase 自动创建)”限制,一切又开始工作了。
仍然不知道如何保持密钥受限但 firebase 工作。
【讨论】:
【参考方案11】:就我而言:
如果您使用的是 Google Play App Signing,只需登录 Firebase 进入“项目设置”->“集成”,然后按一个按钮将 Google Play 与 firebase 关联,SHA-1 将自动添加。下载并更改您的新 google-services.json
如果您仍然遇到问题,请转到 Google Cloud API,点击左上角的汉堡图标 -> API 和服务 -> 凭据。选择您正在使用的 API 密钥。在限制下,选择“无”。
【讨论】:
【参考方案12】:在我的情况下,我遵循这些来遇到这个问题:
首先我删除了 SHA-1 和 SHA - 256 个密钥。 构建我的 Gradle。 添加了 FirebaseApp.initializeApp(this);在我的 BASEapp 中。 再次添加我的 SHA 密钥并运行我的应用程序。 问题已解决。【讨论】:
【参考方案13】:我通过将 google play 控制台的两个 SHA-1 放入 firebase 和 google cloud 控制台以及两者的调试 SHA-1 来修复此错误。在此希望对您有所帮助。
【讨论】:
以上是关于Firebase 身份验证:来自此 Android 客户端应用程序 com.xxx 的请求被阻止的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 总是返回“由于异常活动,我们已阻止来自此设备的所有请求。请稍后再试。”
Android.FirebaseUI-Android:由于异常活动,我们已阻止来自此设备的所有请求
具有客户端/应用身份验证而非用户身份验证的 Firebase Android 应用