简体   繁体   English

从 Play 商店安装应用程序后尝试使用 google 登录时,出现“使用 Google 进行身份验证时出错:未知”异常。 查看详细信息

[英]Getting 'Error authenticating with Google: unknown' exception when trying to signin with google after installing app from play store. See details

I have integrated Google signin in my app.我在我的应用程序中集成了 Google 登录。

When I'm testing the app on my device by directly installing it from android studio, Google signin is working fine.当我通过直接从 android studio 安装来测试我的设备上的应用程序时,Google 登录工作正常。

But, after publishing a beta version of my app and then installing it from play store, when I'm trying to signin with Google, I'm getting the following error: ' Error authenticating with Google: unknown '.但是,在发布我的应用程序的 Beta 版并从 Play 商店安装它之后,当我尝试使用 Google 登录时,出现以下错误:“ Error authenticating with Google: unknown ”。

Here's my code:这是我的代码:

    // in onCreate()

    googleLoginButton = (SignInButton) findViewById(R.id.google_login_button);
            googleLoginButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                        mGoogleLoginClicked = true;
                        if (!mGoogleApiClient.isConnecting()) {
                            if (mGoogleConnectionResult != null) {
                                resolveSignInError();
                            } else if (mGoogleApiClient.isConnected()) {
                                getGoogleOAuthTokenAndLogin();
                            } else {
                        /* connect API now */
                                Log.d(TAG, "Trying to connect to Google API");
                                mGoogleApiClient.connect();
                            }
                        }

                }
            });
            /* Setup the Google API object to allow Google+ logins */
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(Plus.API)
                    .addScope(Plus.SCOPE_PLUS_LOGIN)
                    .addScope(Plus.SCOPE_PLUS_PROFILE)
                    .addScope(new Scope("https://www.googleapis.com/auth/userinfo.email"))
                    .build();


    // in onActivityResult()

    @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Map<String, String> options = new HashMap<String, String>();
            if (requestCode == RC_GOOGLE_LOGIN) {
                /* This was a request by the Google API */
                if (resultCode != RESULT_OK) {
                    mGoogleLoginClicked = false;
                }
                mGoogleIntentInProgress = false;
                if (!mGoogleApiClient.isConnecting()) {
                    mGoogleApiClient.connect();
                }
            } else {
                /* Otherwise, it's probably the request by the Facebook login button, keep track of the session */
                mFacebookCallbackManager.onActivityResult(requestCode, resultCode, data);
            }
        }



    // rest of the code:

    private void resolveSignInError() {
            if (mGoogleConnectionResult.hasResolution()) {
                try {
                    mGoogleIntentInProgress = true;
                    mGoogleConnectionResult.startResolutionForResult(this, RC_GOOGLE_LOGIN);
                } catch (IntentSender.SendIntentException e) {
                    // The intent was canceled before it was sent.  Return to the default
                    // state and attempt to connect to get an updated ConnectionResult.
                    mGoogleIntentInProgress = false;
                    mGoogleApiClient.connect();
                }
            }
        }

        private void getGoogleOAuthTokenAndLogin() {
            /* Get OAuth token in Background */
            AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
                String errorMessage = null;

                @Override
                protected String doInBackground(Void... params) {
                    String token = null;

                    try {
                        String scope = "oauth2:https://www.googleapis.com/auth/plus.login";
  // logcat showing error on this line -> token = GoogleAuthUtil.getToken(SignupScreenActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), scope);
                    } catch (IOException transientEx) {
                        /* Network or server error */
                        Log.e(TAG, "Error authenticating with Google: " + transientEx);
                        errorMessage = "Network error: " + transientEx.getMessage();
                    } catch (UserRecoverableAuthException e) {
                        Log.w(TAG, "Recoverable Google OAuth error: " + e.toString());
                        /* We probably need to ask for permissions, so start the intent if there is none pending */
                        if (!mGoogleIntentInProgress) {
                            mGoogleIntentInProgress = true;
                            Intent recover = e.getIntent();
                            startActivityForResult(recover, RC_GOOGLE_LOGIN);
                        }
                    } catch (GoogleAuthException authEx) {
                        /* The call is not ever expected to succeed assuming you have already verified that
                         * Google Play services is installed. */
                        Log.e(TAG, "Error authenticating with Google: " + authEx.getMessage(), authEx);
                        errorMessage = "Error authenticating with Google: " + authEx.getMessage();
                    }
                    return token;
                }

                @Override
                protected void onPostExecute(String token) {
                    mGoogleLoginClicked = false;
                    if (token != null) {
                        progressDialog = ProgressDialog.show(SignupScreenActivity.this, "",
                                "Logging in with google...", true);
                        progressDialog.show();
                        /* Successfully got OAuth token, now login with Google */
                        ref.authWithOAuthToken("google", token, new Firebase.AuthResultHandler() {
                            @Override
                            public void onAuthenticated(AuthData authData) {
                                Intent mainActivityIntent = new Intent(SignupScreenActivity.this, MainActivity.class);
                                mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                startActivity(mainActivityIntent);
                                progressDialog.hide();
                            }

                            @Override
                            public void onAuthenticationError(FirebaseError firebaseError) {
                                Toast.makeText(getBaseContext(), firebaseError.getMessage(), Toast.LENGTH_LONG).show();
                                progressDialog.hide();
                            }
                        });
                    } else if (errorMessage != null) {
                        Toast.makeText(getBaseContext(), errorMessage, Toast.LENGTH_LONG).show();
                    }
                }
            };
            task.execute();
        }

        @Override
        public void onConnected(final Bundle bundle) {
            /* Connected with Google API, use this to authenticate with Firebase */
            getGoogleOAuthTokenAndLogin();
        }


        @Override
        public void onConnectionFailed(ConnectionResult result) {
            if (!mGoogleIntentInProgress) {
                /* Store the ConnectionResult so that we can use it later when the user clicks on the Google+ login button */
                mGoogleConnectionResult = result;

                if (mGoogleLoginClicked) {
                    /* The user has already clicked login so we attempt to resolve all errors until the user is signed in,
                     * or they cancel. */
                    resolveSignInError();
                } else {
                    Log.e(TAG, result.toString());
                }
            }
        }

        @Override
        public void onConnectionSuspended(int i) {
            // ignore
        }

logcat details: logcat详细信息:

Error authenticating with Google: Unknown
com.google.android.gms.auth.GoogleAuthException: Unknown
     at com.google.android.gms.auth.GoogleAuthUtil$1.zzam(Unknown Source)
     at com.google.android.gms.auth.GoogleAuthUtil$1.zzan(Unknown Source)
     at com.google.android.gms.auth.GoogleAuthUtil.zza(Unknown Source)
     at com.google.android.gms.auth.GoogleAuthUtil.zza(Unknown Source)
     at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
     at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
     at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
     at com.abc.xyz.SignupScreenActivity$10.doInBackground(SignupScreenActivity.java:480)
     at com.abc.xyz.SignupScreenActivity$10.doInBackground(SignupScreenActivity.java:471)
     at android.os.AsyncTask$2.call(AsyncTask.java:288)
     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     at java.lang.Thread.run(Thread.java:818)

Here's build.gradle :这是build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.abc.xyz"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 4
        versionName "0.3"
        multiDexEnabled true
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:design:23.2.1'
    compile 'com.android.support:cardview-v7:23.2.1'
    compile 'com.firebase:firebase-client-android:2.3.1'
    compile 'com.facebook.android:facebook-android-sdk:4.1.0'
    compile 'com.google.android.gms:play-services-maps:8.3.0'
    compile 'com.google.android.gms:play-services-plus:8.3.0'
    compile 'com.android.support:support-v4:23.2.1'
}

I don't know what's going wrong here!我不知道这里出了什么问题!

Please let me know.请告诉我。

Make sure you have created new client id using release version of SHA1 fingerprint.确保您已使用 SHA1 指纹的发布版本创建了新的客户端 ID。

Open terminal (in Unix , in MAC ), ( cmd in Windows ) and cd to this (your java) path:打开终端(在Unix 中,在MAC 中),(在Windows 中为cmd )并cd到此(您的 java)路径:

C:\Program Files\Java\jdk1.6.0_43\bin>

Run this command:运行此命令:

keytool -list -v -keystore "your keystore path" -alias "keystore alias name" -storepass "keystore password" -keypass "keystore password"

As far as I remember, in order to generate an access key for Google APIs, you must provide some data about your app, including the key that are using to sign your APK.据我所知,为了生成 Google API 的访问密钥,您必须提供一些有关您的应用的数据,包括用于签署您的 APK 的密钥。 As Baijrao Shinde has pointed out in his answer, you should double check that you have two distinct client ID for running your application in debug mode (installing directly from your Android Studio using the debug key to sing the APK) and production mode (installing from Google Play using the production key to sign the APK).正如 Baijrao Shinde 在他的回答中指出的那样,您应该仔细检查您是否有两个不同的客户端 ID,用于在调试模式(直接从 Android Studio 使用调试密钥唱 APK)和生产模式(从 Android Studio 安装)下运行您的应用程序Google Play 使用生产密钥对 APK 进行签名)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我正在尝试编写Google Map应用程序代码,但是即使安装了Google Play商店服务后,我也收到以下错误消息: - I am trying to write a google map app code, but even after installing the google play store services i am getting the following error: 从Google Play安装应用时收到错误代码-505 - When installing app from google play getting error code -505 从 Google Play 安装应用程序时出错 - Getting error when installing app from Google Play 从Google Play商店安装应用后,应用崩溃 - App crashes after installing app from Google Play Store 尝试在 Google Play Store 上测试我的 Unity 游戏。 一切都上传了,但是当它进行审查时,它失败了,它给出了稳定性错误 - Trying to TestFlight my Unity Game on Google play Store. Everything uploads but when it goes for review, it fails and it gives be stability error 我在Google Play商店中有一个32位应用程序。 2019年8月1日之后会发生什么 - I have a 32 bit app on the google play store. What happens after August 1, 2019 在Google Play商店中更新后,Android应用将无法打开。 关于如何调试的任何提示? - Android app won't open after updating on Google Play Store. Any tips on how to debug? 从 Google Play 商店安装应用程序时的 onActivityResult 回调 - onActivityResult callback when installing an app from Google Play Store 将android应用发布到Google Play商店时遇到麻烦。 “完全阴影的APK” - Having trouble when publishing android app to google play store. “Fully Shadowed APK” 从谷歌播放商店下载应用程序后崩溃? - After Downloading app from google play store getting crashed?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM