取消时出现Android Google登录错误

问题描述 投票:6回答:2

我有一些奇怪的问题,我无法解决。我有一个拥有Google登录功能的Android应用。该应用程序遵循MVP模式并使用片段而不是活动。登录部分来自:https://developers.google.com/identity/sign-in/android/

它一切正常,直到我尝试通过点击它以外的方式关闭登录对话框(您选择用户的位置)。我认为它应该给我一个状态代码12501(SIGN_IN_CANCELLED),但我得到代码13(错误)。我的假设错了吗?我应该忽略代码13,如果发生错误,不向用户显示任何错误吗?

以下是最相关的代码

活动:

public class SignInActivity extends AppCompatActivity implements SignInFragment.SignInListener {    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_in);

        // Add sign in fragment
        mSignInFragment = new SignInFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager
                .beginTransaction()
                .replace(R.id.sign_in_frame, mSignInFragment, TAG)
                .commit();
    }

    @Override
    public void startSignIn() {
        Intent signInIntent = mSignInFragment.getGoogleSignInClient().getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    @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);
            mSignInFragment.handleSignInResult(task);
        }
    }
}

分段:

public class SignInFragment extends DaggerFragment implements SignInContract.View, GoogleApiClient.OnConnectionFailedListener {

    private SignInFragment.SignInListener signInListener;

    public interface SignInListener {
        void startSignIn();
        void startMainActivity();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken( clientId )
                .build();

        mGoogleSignInClient = GoogleSignIn.getClient(getActivity(), gso);

        // Calling this to force user select dialog to appear everytime
        mGoogleSignInClient.signOut();

        signInButton.setOnClickListener(v -> {
            signInListener.startSignIn();
        }
    }

    protected void handleSignInResult(Task<GoogleSignInAccount> task) {
        try {
            GoogleSignInAccount acct = task.getResult(ApiException.class);
            String idToken = acct.getIdToken();
            presenter.deliverTokenToServer(idToken);

        } catch (ApiException e) {
            e.printStackTrace();
            Log.d(TAG, "handleSignInResult:" + e.getStatusCode());
            Snackbar snackbar = Snackbar.make(getView(), R.string.error_login_failed_try_again, Snackbar.LENGTH_LONG);
            snackbar.show();

        }
    }
}

在gradle文件中,我使用了'com.google.android.gms:play-services-auth:15.0.1'和'com.google.gms:google-services:4.0.1'

android google-authentication
2个回答
2
投票

我终于找到了。这是Google Play图书馆的回归。它已在play-services-auth:16.0.0中修复。这是一些details

implementation com.google.android.gms:play-services-auth:16.0.0

-1
投票

根据博客,这是当前Google SignIn库中的一个错误,这将在下一次更新中自动修复。但是,目前最新的库版本是:

com.google.android.gms:play-services-identity:15.0.1

参考:Google Play Gradles

© www.soinside.com 2019 - 2024. All rights reserved.