前段时间我在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
已删除,但我仍然遇到与上述相同的错误。
那么我是否有可能在另一个项目中将此指纹用于相同的包名称?
当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]
错误。
如果您像我一样使用每个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释放是相同的,以避免麻烦。
由于许多原因,有人可能希望通过两个或多个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。
今天进入这个问题。由于项目需要很长时间才能完全删除,因此最简单的方法是通过简单地删除本地debug.keystore来创建新的SHA1。删除后运行任何应用程序时会自动生成它。这在Android docs here中有记录。
我会注意到,如果您的应用程序列在Play商店中,您可能不想更改包名称,并且您可能不想更换生产密钥(因为您将被迫创建一个新的清单)。
如果您完全确定当前没有活动项目使用当前的包名/指纹对,那么最后要尝试一下:创建一个全新的凭证。您必须在应用程序中替换您的凭据文件。
我没想到这会有所帮助,但事实确实如此。也许谷歌以某种方式缓存查找? “这个packagename / fingerprint / clientID查找是重复的,所以不要再费心了。”