Android Google登录:未发布调试版本时,应用发布版本始终会显示“错误:12500”

时间:2018-10-11 10:01:16

标签: android google-signin google-authentication

因此,正如标题所述,每次使用发行版apk时,我始终以错误代码“ 12500”登录失败,但在调试apk上时,始终成功登录。 Google Play服务已更新至最新版本,还重新下载了google-services.json。在发行版APK上仍然无法通过错误代码“ 12500”登录。

我的活动:

public class ActivityLogin extends AppCompatActivity {

    @BindView(R.id.iv_google)ImageView ivGPlus;

    private GoogleSignInClient mGoogleSignInClient;
    private final int RC_SIGN_IN = 123;
    private Context context;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);

        prepareGoogle();
        initUI();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                GoogleSignInAccount account = task.getResult(ApiException.class);
            } catch (ApiException e) {
                e.printStackTrace();
            }
        }
    }

    private void initUI(){
        ivGPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signInGoogle();
            }
        });
    }

    //login google
    private void prepareGoogle(){
        mAuth = FirebaseAuth.getInstance();
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getResources().getString(R.string.default_web_client_id))
                .requestServerAuthCode(getResources().getString(R.string.default_web_client_id))
                .requestEmail()
                .build();
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
    }

    private void signInGoogle() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }
}

我也已经禁用了proguard:

android {
    compileSdkVersion 27
    buildToolsVersion '28.0.2'
    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 17
        versionName "1.1.9.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        jumboMode = true
    }
}

2 个答案:

答案 0 :(得分:2)

由于它可以在调试版本中运行,因此此错误主要是由于SHA密钥或程序包名称问题引起的。您说您拥有最新的google-services.json,所以我假设您在Firebase项目中包括了发行密钥库的SHA指纹?

否则,您将必须按照this answer中的说明获取指纹,然后将其添加到Firebase项目中,然后再次更新google-services.json

如果这已经完成,并且您在发布到Google Play商店的应用中遇到问题,则应检查是否已注册Google App Signing,因为它涉及两个不同的上载和签名密钥。

您必须包含签名密钥才能在用户设备上使用。如果您要侧面加载该应用程序进行测试,请在使用上传密钥创建发布apk之后,还必须包含该版本。

我可以根据您的情况提供更多详细信息。出现错误时,编辑问题并包括logcat的相关部分,将可以更轻松地提供准确的建议。

答案 1 :(得分:2)

接受的答案对我来说没有帮助。我到处都检查过SHA键,并且它们匹配。本地调试有效,本地发行版有效,但是将应用发布到Play商店后,所有版本在Google登录(Alfa,Beta版,正式版)中均出现12500错误。

所以我问Google一个稍微不同的问题,偶然发现github上有一个关于本机和Google登录反应的线程。Answer by HadrienPierart帮助我发现并解决了问题。

他在github上的帖子的图片如下: image with answer