我已经为Android应用程序实施了Google登录Firebase . 我已经按照官方指南(https://firebase.google.com/docs/auth/android/google-signin),我已经使用调试和发布HA-1指纹更新了设置,并且我一直收到相同的错误 . 调试版本工作正常,但发布版本不起作用 .
我运行命令
keytool -exportcert -list -v -alias -keystore
对于我的 生产环境 密钥库,我在部署时使用它来签署我的.apk,我已将sha1添加到Applications的Firebase设置中,但仍然收到错误 .
这是进行身份验证的类
class FirebaseAuthenticator(private val activity: AppCompatActivity, private val onAuthCompleteListener: OnAuthCompleteListener): Authentication, FacebookCallback<LoginResult>, GoogleApiClient.OnConnectionFailedListener {
private val mGoogleApiClient: GoogleApiClient
private val callbackManager: CallbackManager = CallbackManager.Factory.create()
override var isPerformingLogin: Boolean = false
private val firebaseAuthCompleteListener = object: OnCompleteListener<AuthResult> {
override fun onComplete(task: Task<AuthResult>) {
if (task.isSuccessful) {
val user = FirebaseAuth.getInstance().currentUser!!
FirebaseDataAccess._instance.saveUser(FirebaseMapper.mapToUser(user), { exc, _ ->
isPerformingLogin = false
when(exc) {
null -> {
onAuthCompleteListener.onAuthComplete(null, FirebaseSession._instance)
}
else -> {
FirebaseSession._instance.signOut()
onAuthCompleteListener.onAuthComplete(exc, null)
}
}
})
} else {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(task.exception, null)
}
}
}
init {
LoginManager.getInstance().registerCallback(callbackManager, this)
val webId = activity.getString(R.string.default_web_client_id)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(webId)
.requestEmail()
.build()
mGoogleApiClient = GoogleApiClient.Builder(activity)
.enableAutoManage(activity /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build()
}
override fun loginWithFacebook() {
isPerformingLogin = true
LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile", "user_friends", "email"))
}
override fun loginWithGoogle() {
isPerformingLogin = true
val signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
activity.startActivityForResult(signInIntent, RC_SIGN_IN)
}
override fun loginWithEmail(email: String, password: String) {
isPerformingLogin = true
FirebaseAuth.getInstance().signInWithEmailAndPassword(email, password)
.addOnCompleteListener(activity, firebaseAuthCompleteListener)
}
override fun onSuccess(loginResult: LoginResult) {
val credential = FacebookAuthProvider.getCredential(loginResult.accessToken.token)
authWithCredential(credential)
}
override fun onError(error: FacebookException) {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(error, null)
}
override fun onCancel() {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(null, null)
}
override fun onConnectionFailed(connResult: ConnectionResult) {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(Exception(connResult.errorMessage), null);
}
override fun onActivityResultCallback(requestCode: Int, resultCode: Int, data: Intent) {
callbackManager.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result.isSuccess) {
// Google Sign In was successful, authenticate with Firebase
val credential = GoogleAuthProvider.getCredential(result.signInAccount!!.idToken, null)
authWithCredential(credential)
} else {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(Exception(result.status.toString()), null);
}
}
}
private fun authWithCredential(credential: AuthCredential) {
FirebaseAuth.getInstance().signInWithCredential(credential)
.addOnCompleteListener(activity, firebaseAuthCompleteListener)
}
companion object {
private val RC_SIGN_IN = 9001
}
}
这是我的应用程序的构建文件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'io.fabric'
android {
signingConfigs {
p2s_keystore {
keyAlias 'myalias'
keyPassword 'myKeyPassword'
storeFile file('/path to my keystore')
storePassword 'myStorePassword'
}
}
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.app.play2sell"
minSdkVersion 16
targetSdkVersion 25
versionCode 8
versionName "1.2.8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
signingConfig signingConfigs.p2s_keystore
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.p2s_keystore
debuggable true
}
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:design:26.1.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
compile 'com.google.firebase:firebase-database:11.2.0'
compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
compile 'com.google.android.gms:play-services:11.2.0'
compile 'com.google.firebase:firebase-auth:11.2.0'
compile 'com.google.android.gms:play-services-auth:11.2.0'
compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
transitive = true
}
testCompile 'junit:junit:4.12'
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
// FIREBASE
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android-extensions'
repositories {
mavenCentral()
}
我确信我在控制台上拥有正确的密钥库签名证书SHA1 . 我已经检查了数百次 . 我也确定我使用我用来生成保存在Firebase控制台上的SHA1的密钥库来签署我的应用程序 .
我还下载了我的android项目最新版本的google-services.json文件 .
有没有人知道为什么我在尝试使用Google登录时,在我的活动结果的状态代码中继续收到DEVELOPER_ERROR .
提前致谢
1 回答
所以问题是我启用了Google Play App Signing . 我没有意识到这一点,因为我上传我的应用程序已经有一段时间了 . 我所要做的就是在我的Firebase控制台中包含由Google Play App Signing生成的SHA1,它运行正常 .