您指定的签名指纹已被其他Android OAuth2客户端使用

问题描述 投票:16回答:6

前段时间我在Google API控制台中使用Oauth2 client id为Android应用程序创建了一个示例项目(让我们称之为“示例项目”)。我还添加了SHA1 fingerprint和包名(例如com.package.name)。

我的错误是已经存在具有相同包名的应用程序。现在我需要在“有效项目”中创建一个用于Android应用程序的Oauth2 client id,其中包名为com.package.name,之后我添加了SHA1 fingerprint。显然,当我尝试添加此指纹时,我收到了一个错误。

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

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

那么我是否有可能在另一个项目中将此指纹用于相同的包名称?

android google-api google-plus google-oauth oauth2client
6个回答
21
投票

当Google Developers上存在链接到其他帐户的现有SIGNING CERTIFICATE FINGERPRINT (SHA1)时,会发生此错误。

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

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

另一个选择是删除debug.keystore并生成一个新的:

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

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


2
投票

如果您像我一样使用每个env的每个firebase项目,则以下方法可能会有所帮助。

在构建gradle中,为每个env创建新的应用程序ID:

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

在每个firebase项目中,使用相同的指纹添加具有相应应用程序ID的新项目。请记住,因为应用程序ID已更改,所以请下载新的google服务json文件。包名称保持不变,因此上传到Google Play时不会出现问题。但是可以肯定的是,我将prod的味道留空了,所以包装名称和应用程序ID对于prod释放是相同的,以避免麻烦。


1
投票

由于许多原因,有人可能希望通过两个或多个firebase项目使用相同的应用程序,因此得到此错误我在这里确实解决了这个特定的情况。在两个或多个不同的firebase项目上运行相同应用程序的最简单的方法(假设生产和暂存)是在模块级别build.gradle文件中添加一个构建变体(让我们说分段),如下所示:

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。


0
投票

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


0
投票

我会注意到,如果您的应用程序列在Play商店中,您可能不想更改包名称,并且您可能不想更换生产密钥(因为您将被迫创建一个新的清单)。

如果您完全确定当前没有活动项目使用当前的包名/指纹对,那么最后要尝试一下:创建一个全新的凭证。您必须在应用程序中替换您的凭据文件。

我没想到这会有所帮助,但事实确实如此。也许谷歌以某种方式缓存查找? “这个packagename / fingerprint / clientID查找是重复的,所以不要再费心了。”


0
投票

您指定的签名指纹已被其他Android OAuth2客户端使用

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

最后,解决方案是删除我尝试编辑的客户端ID,并再次添加SHA1指纹和包名称,它对我有用。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.