Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;开发人员错误:此应用程序配置错误;Google使用白名单上的客户端id登录firebase_Android_Firebase_Google App Engine_Firebase Authentication - Fatal编程技术网

Android &引用;开发人员错误:此应用程序配置错误;Google使用白名单上的客户端id登录firebase

Android &引用;开发人员错误:此应用程序配置错误;Google使用白名单上的客户端id登录firebase,android,firebase,google-app-engine,firebase-authentication,Android,Firebase,Google App Engine,Firebase Authentication,我正在尝试在我的android应用程序上迁移到firebase auth。包名和SHA1当前与旧的应用程序引擎项目(我不想升级到firebase)关联,因此我无法将SHA1指纹添加到我的新firebase项目中。app engine项目目前正在生产中,因此我无法删除android客户端ID或删除该项目。这里的文档说,我应该能够将旧appengine项目的客户机id列为白名单。但是,当我执行此操作,然后尝试使用firebase auth通过google登录应用程序时,我收到以下错误“开发人员错误:

我正在尝试在我的android应用程序上迁移到firebase auth。包名和SHA1当前与旧的应用程序引擎项目(我不想升级到firebase)关联,因此我无法将SHA1指纹添加到我的新firebase项目中。app engine项目目前正在生产中,因此我无法删除android客户端ID或删除该项目。这里的文档说,我应该能够将旧appengine项目的客户机id列为白名单。但是,当我执行此操作,然后尝试使用firebase auth通过google登录应用程序时,我收到以下错误
“开发人员错误:此应用程序配置错误。请在firebase控制台中检查您的SHA1和包名。”

我也尝试过这里的说明,其中包括将
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);
}
private void-oginactivity(){
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestIdToken(“.apps.googleusercontent.com”)
.requestEmail()
.build();
列表提供程序=Arrays.asList(
新建AuthUI.IdpConfig.EmailBuilder().build(),
新的AuthUI.IdpConfig.GoogleBuilder().setSignInOptions(gso.build());
startActivityForResult(
AuthUI.getInstance()
.CreateSignInEntBuilder()
.setAvailableProviders(提供程序)
.build(),
RC_登录);
}
但是当我这样做时,我得到了错误
java.lang.IllegalArgumentException:提供了两个不同的服务器客户端ID


因此,我的问题是,当SHA1与现有GCP项目关联时,如何配置firebase项目以启用auth?

我从firebase支持部门得到了以下响应,并且能够使其正常工作:

通过Google-services.json>文件配置使用FirebaseUI的Google登录。问题是,如果您使用的是来自不同>项目的OAuth客户端ID,则默认的\u web\u客户端\u ID将配置不正确。它将>指向新Firebase项目的自动生成的web客户端id;我们不想要这个

在>auth的步骤1中,我们调用#requestIdToken(getString(R.string.server_client_id))。在>firebaseUI中,也会完成此操作,并且此资源是由google-services.json生成的“default_web_client_id”。这需要改变

因此,要解决这个问题,您需要使用project>#1中的web OAuth客户端ID,您可以通过以下方式之一来实现:

更改google-services.json文件-您需要将client_id>字段从project#1更改为正确的web客户端id 您还需要将web客户端>OAuth从project#1添加到project#2的白名单(Auth>登录提供商>Google)

不要使用google-services.json,这样您就可以自己设置默认的客户机id。我们为此制定了指南,请参见

以下是我实现这一目标的过程:

  • 转到GCP控制台>选择旧项目>API和服务>凭据

  • 创建凭据>OAuth客户端ID

  • 选择Web应用程序

    • 输入一个名称
    • 将Javascript源和授权重定向URL保留为空
  • 复制客户端id

  • 开放式火基控制台

  • 转到身份验证>登录方法>谷歌
  • 白名单新客户端id>添加>保存
  • 返回设置>将firebase添加到android应用程序
    • 添加您的android软件包名称
    • 将签名证书留空
  • 单击注册应用程序
  • 下载并打开google-services.json
  • 在oauth_客户端中,应用程序中的每个oauth客户端id都有一个条目(仅供参考,这些条目可在GCP控制台的API和服务>凭据下查看)

  • 删除整个
    oauth\u客户机
    标记并替换为
    
    “oauth_客户端”:[
    {
    “客户id”:“,
    “客户类型”:3
    }
    ],
    
    如果您需要任何其他oauth客户机,那么请确保白名单上的客户机位于顶部,因为这似乎是默认的

  • 保存文件并复制到您的android应用程序模块中

  • 确保您具有以下依赖项:

    • project root build.gradle
    • classpath'com.google.gms:googleservices:4.0.0'
    • 应用程序模块build.gradle
    • 编译'com.google.firebase:firebase核心:16.0.0'
    • 编译'com.firebaseui:firebaseui auth:4.0.0'
  • 构建并运行您的项目

  • 如果出现此错误(没有进一步的详细信息):
    
    BasicNetwork.performRequest:的意外响应代码400https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?alt=proto&key=AIzaSyBJL6EO8vMEJpyWUCAKP8ZgH4LYR0Hrwpk
    

    检查您的gradle Dependenties是否设置为上述版本(或更高版本)

    如果出现此错误:
    
    com.google.firebase.FirebaseException:发生内部错误。[无效Idp响应:不允许将Google id_令牌用于此应用程序。其访问群体(OAuth 2.0客户端id)为,未授权在项目编号为的项目中使用。]
    


    尝试在firebase控制台上删除并重新添加您的白名单客户端id。

    Lifesaver!消防基地的支援人员把我送到这里来的。如果您从FirebaseUI获得错误代码10,请提供快速提示:更改gradle配置中的某些内容(例如添加空行)、gradle同步、卸载应用程序、重建、运行。我完成了这些步骤,并让Google登录工作。我在谷歌云控制台中有一个现有的项目,它有相同的包名+SHA1。我现在正在尝试启用电话登录,似乎我需要将SHA1添加到firebase项目中