您指定的签名指纹已经被另一个Android OAuth2客户端使用。

44

之前我创建了一个示例项目(我们称其为“示例项目”),在Google APIs控制台中为Android应用程序创建了Oauth2客户端ID,同时添加了SHA1指纹和包名称(例如com.package.name)。

我的错误在于已经存在具有相同包名称的应用程序。现在,我需要在名为“有效项目”的Android应用程序中创建一个带有com.package.name包名称和之前添加的SHA1指纹Oauth2客户端ID。显然,当我尝试添加此指纹时,出现了错误。

The signing fingerprint you specified is already used by another Android OAuth2 client.

之后我想起了“示例项目”,并从该项目中删除了client id。问题是,我仍然无法为包名com.package.name添加此指纹。虽然client id已被删除,但我仍然遇到与上述相同的错误。

那么,我是否有可能在另一个项目中使用同一包名的指纹呢?


这个问题解决了吗?谢谢。 - Stan Smith
1
也遇到了同样的错误。必须删除先前使用相同包和指纹创建的clientId,才能成功创建新的clientId。我甚至从另一个Google账户创建了该clientId。 - Robert
2
@Robert 也遇到了这个问题... 我已经从一个 Google 开发者控制台中删除了我的应用程序,并在另一个 Google 开发帐户上使用相同的 SHA1 和包名创建了相同的应用程序... 但是 Google 仍然拒绝我保存凭据... - Sirop4ik
请按照此答案 https://dev59.com/-WAf5IYBdhLWcg3w52E_#60204749 进行操作。 - Binesh Kumar
我已经使用错误的SHA1密钥创建了一个Android OAuth客户端。 然后我尝试删除错误的OAuth客户端,但是已经过去12个小时了。 但是,当我尝试创建新的Android OAuth客户端时,仍然出现“您指定的签名指纹已被另一个Android OAuth2客户端使用”的提示。 是否还有其他密钥需要删除或只需删除oAuth客户端? - Pratik Stephen
9个回答

37

当Google Developers中存在一个与其他账户关联的现有的SIGNING CERTIFICATE FINGERPRINT (SHA1)时,会出现此错误。

解决方案是在旧/错误项目的console.developers.google.com中删除正在使用该SHA1的项目。

一旦设置了SHA1指纹,就无法更改它。请记住,删除项目需要7天才能完全删除。

另一个选择是删除debug.keystore并使用以下命令生成新的密钥库:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey
-storepass android -keypass android -keyalg RSA -validity 14000

请记得必须卸载该应用程序,否则您将会遇到[INSTALL_FAILED_UPDATE_INCOMPATIBLE]错误。


3
所以,如果我想要使用调试密钥库运行多个应用程序,则不可能吗?在这种情况下,我应该使用生产密钥库吗? - Hari Krishnan
2
不,您可以将“debug.keystore”用于多个应用程序。 - tread
5
每个应用程序都有不同的debug.keystore吗?否则所有应用程序都会生成相同的SHA1密钥,对吗?这让我有些困惑,请解释一下。 - Hari Krishnan
我没有看到删除整个客户端的选项,虽然我担心删除同一页上的API密钥会产生什么负面影响。即使使用不同的包名称重新启动我的项目,Gradle签名报告中仍会出现相同的无法使用的已删除SHA1。 - Androidcoder
1
无需等待7天,也无需卸载应用程序,只需前往https://console.developers.google.com/apis/credentials并删除相应的OAUTH2密钥,如此处所述:https://dev59.com/-WAf5IYBdhLWcg3w52E_#55618235。 - javaxian
显示剩余3条评论

11

您指定的签名指纹已被另一个 Android OAuth2 客户端使用。

我必须检查每个项目,尝试找到配置了与我尝试配置的 SHA1 指纹和包名称相同的另一个客户端 ID,但没有成功。

最后解决方案是删除我尝试编辑的客户端 ID,然后再使用 SHA1 指纹和包名称添加,这对我起了作用:

https://console.developers.google.com/apis/credentials

enter image description here


这个很好用 - 没有编辑build.gradle或删除firebase项目或等待几天...就像其他答案建议的那样。在这里分享,非常感谢。 - Gene Bo
3
这是正确的答案 - 既不需要等待几天,也不需要卸载应用程序,只需前往https://console.developers.google.com/apis/credentials并删除相应的OAUTH密钥。 - javaxian
我使用错误的SHA1密钥创建了一个OAuth客户端。 然后我尝试删除错误的OAuth客户端,至今已经过去12小时。 但是当我尝试创建一个新的OAuth客户端时,仍然会收到“您指定的签名指纹已被另一个Android OAuth2客户端使用”的错误信息。 是否还有其他密钥需要删除或只需删除oAuth客户端? - Pratik Stephen

7

虽然晚了但是还是值得的。我也犯了同样的错误,我在错误的账户中添加了一个项目到Firebase,然后我删除了它并尝试将其添加到另一个Firebase帐户中,但是我无法这样做,因为错误指示该项目已经注册。所以需要花费大约5到7天的时间来完全删除。

以下是我遵循的步骤来生成另一个SHA1。

  1. 进入我的电脑中的 .android 文件夹。路径为 C:\Users\shahz.android。
  2. 删除 debug.keystore 文件。
  3. 重新构建 Android 项目。
  4. 点击 signing report(右侧栏点击 gradle, app/task/android/siginingReport)

  5. 您将获得一个新的调试密钥和新的 SHA1。

  6. 注册您的应用程序。


谢谢,它正常工作了,你救了我的一天,兄弟。 - Mohammad Zeeshan

4

我曾经遇到过同样的问题,解决方法非常简单

进入Console.developer,您会看到一些与此包创建的自动生成密钥。删除该包并再次添加sha密钥。希望您能成功。请按照此链接操作:https://console.developers.google.com/apis/credentials


我使用错误的SHA1密钥创建了OAuth客户端。 然后我尝试删除错误的OAuth客户端,但是已经过去12个小时了。 但是当我尝试创建新的OAuth客户端时,仍然会收到“指定的签名指纹已被另一个Android OAuth2客户端使用”的消息。 是否还有其他密钥需要删除或只需删除oAuth客户端? - Pratik Stephen
从Firebase和这里删除 - Binesh Kumar

3

如果像我一样,为每个环境使用一个firebase项目,则下面的方法可能会有所帮助。

在你的构建gradle文件中,为每个环境创建新的应用程序ID:

productFlavors {
        dev {
            applicationId "se.abc.dev"
        }
        stag {
            applicationId "se.abc.stag"
        }
        prod
    }

在每个Firebase项目中,添加一个与相应应用程序ID相对应的新项目,并具有相同的指纹。记得下载新的Google服务JSON文件,因为应用程序ID已更改。包名称保持不变,因此上传到Google Play时不会出现问题。但是,我确保Prod flavor为空,因此包名称和应用程序ID将在Prod发布时保持一致,以避免麻烦。


1

如果有人因为某些原因想要通过两个或多个Firebase项目使用同一应用程序,并且因此出现了错误,那么我在这里就会解决这种特殊情况。在Module级别的build.gradle文件中添加一个构建变体(比如说staging)是在两个或多个不同的Firebase项目上运行相同应用程序的最简单方法。

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.mydomain.myapp"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 18
        versionName "2.8"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        staging {
            initWith debug
            applicationIdSuffix ".staging"
            versionNameSuffix = "-staging"
        }
    }
}

dependencies {
    [...]
}

// Firebase
apply plugin: 'com.google.gms.google-services'

在构建变体staging中,最重要的是这行代码:
applicationIdSuffix ".staging"

这将在构建时向您的应用程序ID注入一个“.staging”后缀,以便您自动拥有。
applicationId "com.mydomain.myapp.staging"

您需要将应用程序 ("com.mydomain.myapp.staging") 添加到 Firebase 的测试项目中,这样您就能够将相同的 "com.mydomain.myapp" SHA1 添加到该应用程序中,因为它具有不同的应用程序 ID。


1
我注意到,如果您的应用程序已在Play商店中列出,则可能不希望更改包名称,并且可能不希望替换生产密钥(因为您将被迫创建新列表)。
如果您绝对确定当前没有正在使用当前包名称/指纹对的活动项目,则最后一件要尝试的事情是:制作全新凭据。您将不得不在应用程序中替换凭据文件。
我没想到这会有所帮助,但确实有帮助。也许Google以某种方式缓存了查找?“此packagename/fingerprint/clientID查找是重复的,因此不要再次查找。”

1
今天遇到了这个问题。由于项目需要很长时间才能完全删除,最简单的方法是通过删除本地的debug.keystore来创建一个新的SHA1。在删除后运行任何应用程序时,它会自动生成。这在Android文档here中有记录。

-1
有时候这是因为你将应用与Google Cloud Platform项目链接,使用了像Google Signin这样的API。所以Firebase会显示OAUTH2问题。一次只能使用Firebase或gcp的Auth服务。
可能的解决方案:尝试删除Google Cloud Platform或在Android Studio中创建一个新的Android项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接