Android 谷歌登录可以在模拟器中工作,但不能在手机中工作

Android 谷歌登录可以在模拟器中工作,但不能在手机中工作,android,firebase,firebase-authentication,google-signin,Android,Firebase,Firebase Authentication,Google Signin,我在使用Firebase实现Google登录时遇到了一个非常严重的问题。 我可以使用仿真器Android 7.0(为x86_64构建的SDK)登录, 但是如果我把我的项目上传到我的手机上(安卓6.0),我就不能用谷歌登录。 我唯一看到的是,应用程序关闭了。在极少数情况下,如果我快速双击“登录”按钮,它将登录,但不会获得进一步使用的凭据。 可能是什么问题 LoginActivity中的代码 @Override public void onActivityResult(int requestCode

我在使用Firebase实现Google登录时遇到了一个非常严重的问题。 我可以使用仿真器Android 7.0(为x86_64构建的SDK)登录, 但是如果我把我的项目上传到我的手机上(安卓6.0),我就不能用谷歌登录。 我唯一看到的是,应用程序关闭了。在极少数情况下,如果我快速双击“登录”按钮,它将登录,但不会获得进一步使用的凭据。 可能是什么问题

LoginActivity中的代码

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == FirebaseConstants.LOG_IN_REQUEST){

        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        Intent i = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(i);

    }
    if(requestCode == FirebaseConstants.LOG_OUT_REQUEST){
        TastyToast.makeText(this, "Logged out successfully", TastyToast.LENGTH_LONG, TastyToast.SUCCESS);
    }
}
以下是onCreate方法中的代码(单击按钮):

谷歌登录实例

    public class GoogleLogin extends Observable implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{

        private final GoogleApiClient googleApiClient;
        private final WeakReference<Activity> activityWeakReference;
        private static GoogleLogin googleLogin;

        public GoogleLogin(final Activity activity) {
            activityWeakReference = new WeakReference<>(activity);
            // Configure Google Sign In
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(activity.getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
            googleApiClient = new GoogleApiClient.Builder(activity)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();
        }

        @Override
        public void onConnected(@Nullable Bundle bundle) {
        }

        @Override
        public void onConnectionSuspended(int i) {

        }

        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        }

        public static GoogleLogin getInstance(Activity activity) {
            if (null == googleLogin) {
                googleLogin = new GoogleLogin(activity);
            }

            return googleLogin;
        }


        public void logIn(Activity activity){
            Context c = activityWeakReference.get().getApplicationContext();
            googleApiClient.connect();
            if(googleApiClient.isConnected()){
                Intent i = new Intent(c, MainActivity.class);
                googleApiClient.connect();
                activity.startActivity(i); // this wont start an activity
            }else if(!googleApiClient.isConnected()){
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                googleApiClient.connect();
// this wont start an activity either
                activity.startActivityForResult(signInIntent, FirebaseConstants.LOG_IN_REQUEST);



            }
        }

        public void signOut(final Activity activity){
            if(googleApiClient.isConnected()) {
                Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
                        new ResultCallback<Status>() {
                            @Override
                            public void onResult(Status status) {
                                Intent i = new Intent(activity, LoginActivity.class);
                                activity.startActivityForResult(i, FirebaseConstants.LOG_OUT_REQUEST);
                            }
                        });
            }
        }

        public void disconnect(Activity activity){
            activity.getApplicationContext();
            if(googleApiClient.isConnected()){
                googleApiClient.disconnect();
                Intent i = new Intent(activity, LoginActivity.class);
            }
        }


    }
compile 'com.google.firebase:firebase-messaging:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-auth:9.6.1'
compile 'com.google.android.gms:play-services-auth:9.6.1'
compile 'com.google.firebase:firebase-ads:9.6.1'
apply plugin: 'com.google.gms.google-services'
在构建的底部。gradle

    public class GoogleLogin extends Observable implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{

        private final GoogleApiClient googleApiClient;
        private final WeakReference<Activity> activityWeakReference;
        private static GoogleLogin googleLogin;

        public GoogleLogin(final Activity activity) {
            activityWeakReference = new WeakReference<>(activity);
            // Configure Google Sign In
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(activity.getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
            googleApiClient = new GoogleApiClient.Builder(activity)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();
        }

        @Override
        public void onConnected(@Nullable Bundle bundle) {
        }

        @Override
        public void onConnectionSuspended(int i) {

        }

        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        }

        public static GoogleLogin getInstance(Activity activity) {
            if (null == googleLogin) {
                googleLogin = new GoogleLogin(activity);
            }

            return googleLogin;
        }


        public void logIn(Activity activity){
            Context c = activityWeakReference.get().getApplicationContext();
            googleApiClient.connect();
            if(googleApiClient.isConnected()){
                Intent i = new Intent(c, MainActivity.class);
                googleApiClient.connect();
                activity.startActivity(i); // this wont start an activity
            }else if(!googleApiClient.isConnected()){
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                googleApiClient.connect();
// this wont start an activity either
                activity.startActivityForResult(signInIntent, FirebaseConstants.LOG_IN_REQUEST);



            }
        }

        public void signOut(final Activity activity){
            if(googleApiClient.isConnected()) {
                Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
                        new ResultCallback<Status>() {
                            @Override
                            public void onResult(Status status) {
                                Intent i = new Intent(activity, LoginActivity.class);
                                activity.startActivityForResult(i, FirebaseConstants.LOG_OUT_REQUEST);
                            }
                        });
            }
        }

        public void disconnect(Activity activity){
            activity.getApplicationContext();
            if(googleApiClient.isConnected()){
                googleApiClient.disconnect();
                Intent i = new Intent(activity, LoginActivity.class);
            }
        }


    }
compile 'com.google.firebase:firebase-messaging:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-auth:9.6.1'
compile 'com.google.android.gms:play-services-auth:9.6.1'
compile 'com.google.firebase:firebase-ads:9.6.1'
apply plugin: 'com.google.gms.google-services'

如果您的调试版本在使用Google登录登录Firebase时未引发任何错误,则可能是证书签名问题

步骤1(可选)

在所有catch块中创建Toast消息,以便查看错误代码。正常构建并签署应用程序;然后将其作为闭合或开放轨道释放以进行测试。联机搜索错误代码。(不要只依赖描述,搜索其他资源)

步骤2

检查您的发布apk/捆绑包的SHA-1证书指纹:

A) 进入android Studio中的Gradle/:app/Tasks/android/signingReport并生成报告。从版本变体复制SHA1指纹

B) 如果您的应用程序由Google Play签名,请转到Google Play控制台中的发布管理/应用程序签名,并从应用程序签名证书复制SHA-1证书指纹

然后转到Firebase控制台中的“项目设置”并添加新指纹,这样就可以同时获得调试和发布指纹

步骤3


下载google-services.json文件,并用刚下载的文件替换构建中现有的文件。构建并签署新版本。

您的代码在许多方面与中包含的代码不同。与调试方法相比,更新代码以匹配示例应用可能更容易。您找到解决方案了吗?我也面临同样的问题不幸的是没有我自己的登录系统:)