"开发人员错误:此应用程序配置错误" Google使用列入白名单的客户端ID登录firebase

时间:2018-05-21 16:14:34

标签: android firebase google-app-engine firebase-authentication

我尝试在我的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?

1 个答案:

答案 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

以下是我为实现这一目标而采用的流程:

  1. 转到GCP控制台&gt;选择旧项目&gt; Apis和服务&gt;凭证

  2. 创建凭据&gt; OAuth客户端ID

  3. 选择 Web应用程序

    • 输入名称
    • 保留Javascript来源和授权重定向网址
  4. 复制客户端ID

  5. 打开firebase控制台

  6. 转到身份验证&gt;登录方法&gt;谷歌
  7. 将新客户端ID列入白名单&gt;添加&gt;保存
  8. 返回设置&gt;添加firebase到您的Android应用程序
    • 添加您的Android软件包名称
    • 将签名证书留空
  9. 点击注册应用
  10. 下载&amp;打开google-services.json
  11. 在oauth_client中,应用程序中的每个oauth客户端ID都会有一个条目(仅供参考,这些可以在Apis和服务&gt;凭据下的GCP控制台上看到)。

  12. 删除整个oauth_client代码并替换为 "oauth_client": [ { "client_id": "<your_new_client_id>", "client_type": 3 } ], 如果您需要任何其他oauth客户端,请确保列入白名单的客户端位于顶部,因为这似乎是默认设置。

  13. 保存文件&amp;复制到您的Android应用模块。

  14. 确保您具有以下依赖项:

    • 项目根build.gradle
    • classpath'com.google.gms:google-services:4.0.0'
    • app module build.gradle
    • 编译'com.google.firebase:firebase-core:16.0.0'
    • 编译'com.firebaseui:firebase-ui-auth:4.0.0'
  15. Build&amp;运行您的项目

  16. 如果您收到此错误(没有更详细的信息): 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。