首页 文章

即使SHA1正确,Google登录也会在Android上失败,代码为DEVELOPER_ERROR

提问于
浏览
0

我已经为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 回答

  • 0

    所以问题是我启用了Google Play App Signing . 我没有意识到这一点,因为我上传我的应用程序已经有一段时间了 . 我所要做的就是在我的Firebase控制台中包含由Google Play App Signing生成的SHA1,它运行正常 .

相关问题