我尝试在我的Android应用上迁移到firebase auth。包名称和SHA1当前与旧的应用引擎项目(我不想升级到firebase)相关联,因此我无法将SHA1指纹添加到我的新firebase项目中。应用程序引擎项目目前正在生产中,因此我无法删除Android客户端ID或删除项目。这里的文档https://support.google.com/firebase/answer/6401008?authuser=0表示我应该能够将旧应用引擎项目的客户端ID列入白名单。但是,当我这样做,然后尝试使用gobase使用firebase auth登录应用程序时出现以下错误"Developer error: this application is misconfigured. Check your SHA1 and package name in the Firebase console."
我还尝试了https://firebase.googleblog.com/2016/12/working-with-multiple-firebase-projects-in-an-android-app.html中的说明,其中涉及将GoogleSignInOptions
对象传入AuthUI构建器,其中包含来自相应项目的Web客户端ID,如下所示:
private void StartLoginActivity() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("<my-client-id>.apps.googleusercontent.com")
.requestEmail()
.build();
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().setSignInOptions(gso).build());
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN);
}
但是当我这样做时,我收到错误java.lang.IllegalArgumentException: two different server client ids provided
所以我的问题是,当SHA1与现有GCP项目相关联时,如何配置我的firebase项目以启用auth?
答案 0 :(得分:2)
我从firebase支持得到了以下响应,并且能够实现这一点:
Google登录FirebaseUI是通过google-services.json&gt;文件配置的。问题是,如果您使用来自其他&gt;项目的OAuth客户端ID,则将错误地配置default_web_client_id。它将&gt;指向新Firebase项目的自动生成的Web客户端ID;我们&gt;不要这样。
在https://developers.google.com/identity/sign-in/android/backend-&gt;身份验证的第1步中,我们调用#requestIdToken(getString(R.string.server_client_id))。在&gt; firebaseUI中,这也已完成,此资源是'default_web_client_id' - &gt;由google-services.json生成。这需要改变。
因此,要解决此问题,您需要使用项目&gt;#1中的Web OAuth客户端ID,您可以通过以下任一方式执行此操作:
更改google-services.json文件 - 您需要将client_id&gt;字段更改为项目#1中正确的Web客户端ID 您还需要将Web客户端&gt; OAuth从项目#1列入白名单(Auth&gt;登录提供商&gt; Google)到项目#2
不使用google-services.json,因此您可以自行设置default_web_client_id。我们为此制作了指南,请参阅here。
以下是我为实现这一目标而采用的流程:
转到GCP控制台&gt;选择旧项目&gt; Apis和服务&gt;凭证
创建凭据&gt; OAuth客户端ID
选择 Web应用程序
复制客户端ID
打开firebase控制台
在oauth_client中,应用程序中的每个oauth客户端ID都会有一个条目(仅供参考,这些可以在Apis和服务&gt;凭据下的GCP控制台上看到)。
删除整个oauth_client
代码并替换为
"oauth_client": [
{
"client_id": "<your_new_client_id>",
"client_type": 3
}
],
如果您需要任何其他oauth客户端,请确保列入白名单的客户端位于顶部,因为这似乎是默认设置。
保存文件&amp;复制到您的Android应用模块。
确保您具有以下依赖项:
Build&amp;运行您的项目
如果您收到此错误(没有更详细的信息):
BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?alt=proto&key=AIzaSyBJL6EO8vMEJpyWUCAKP8ZgH4LYR0Hrwpk
检查您的gradle dependendies是否设置为上述版本(或更高版本)
如果您收到此错误:
com.google.firebase.FirebaseException: An internal error has occurred. [ Invalid Idp Response:the Google id_token is not allowed to be used with this application. Its audience (OAuth 2.0 client ID) is <your-client-id>, which is not authorized to be used in the project with project_number: <your-project-number>. ]
尝试删除&amp;在firebase控制台上重新添加白名单客户端ID。