谷歌+;android 6发布后plus登录不起作用

谷歌+;android 6发布后plus登录不起作用,android,oauth-2.0,android-6.0-marshmallow,google-signin,Android,Oauth 2.0,Android 6.0 Marshmallow,Google Signin,因此,在android 6棉花糖发布之前,google+登录工作得非常好。发布后,我遇到了权限、onConnectionFailed等问题。。。有没有人有办法解决这个问题?我正在从fragment调用google登录方法。代码如下: 片段: @Override public void onConnected(Bundle bundle) { Log.d("GoogleApiClient", "onConnected"); mShouldResolve = false;

因此,在android 6棉花糖发布之前,google+登录工作得非常好。发布后,我遇到了权限、onConnectionFailed等问题。。。有没有人有办法解决这个问题?我正在从fragment调用google登录方法。代码如下:

片段:

 @Override
public void onConnected(Bundle bundle) {
    Log.d("GoogleApiClient", "onConnected");
    mShouldResolve = false;
    new RetrieveTokenTask().execute(Plus.AccountApi.getAccountName(mGoogleApiClient));
}

@Override
public void onConnectionSuspended(int i) {
    Log.d("GoogleApiClient", "onConnectionSuspended   " + String.valueOf(i));
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Log.d("GoogleApiClient", "onConnectionFailed");
    Log.d("GoogleApiCLient", connectionResult.toString());
    ViewUtils.hideProgressDialog();
    if (!mIsResolving && mShouldResolve) {
        if (connectionResult.hasResolution()) {
            try {
                connectionResult.startResolutionForResult(getActivity(), RC_SIGN_IN);
                mIsResolving = true;
            } catch (IntentSender.SendIntentException e) {
                Log.e("LoginFragment", "Could not resolve ConnectionResult.", e);
                mIsResolving = false;
                mGoogleApiClient.connect();
            }
        }
    }
}




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

    Log.i("RequestCode", String.valueOf(requestCode));
    Log.i("ResultCode", String.valueOf(resultCode));
    try {
        Log.i("Intent", data.getAction());
    } catch (Exception e) {
    }


    if (requestCode == RC_SIGN_IN) {
        // If the error resolution was not successful we should not resolve further.
        ViewUtils.showProgressDialog(getActivity(), getActivity().getResources().getString(R.string.loading_dialog_str));
        if (resultCode != getActivity().RESULT_OK) {
            mShouldResolve = false;
        }

        mIsResolving = false;
        mGoogleApiClient.connect();
        if (mGoogleApiClient.isConnected()) {
            new RetrieveTokenTask().execute(Plus.AccountApi.getAccountName(mGoogleApiClient));
        }

    } else {
        //facebook
        Log.d("Login", "FaceBook");
        mCallbackManagerFacebook.onActivityResult(requestCode, resultCode, data);
    }


}
private class RetrieveTokenTask extends AsyncTask<String, Void, String> {

    private static final String TAG = "RetrieveAccessToken";
    private static final int REQ_SIGN_IN_REQUIRED = 55664;

    @Override
    protected String doInBackground(String... params) {
        String accountName = params[0];
        String scopes = "oauth2:profile";
        String token = null;
        try {
            token = GoogleAuthUtil.getToken(getActivity(), accountName, scopes);
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
        } catch (UserRecoverableAuthException e) {
            startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
        } catch (GoogleAuthException e) {
            Log.e(TAG, e.getMessage());
        }
        return token;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Log.d("Token", "Token Value: " + s);
        if (s == null) {
            ViewUtils.hideProgressDialog();
            ViewUtils.showToastMessage(getActivity(), getActivity().getResources().getString(R.string.login_error));
        } else {
            loginGoogleUser(s);
        }


        if (mGoogleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            mGoogleApiClient.disconnect();
        }
    }
}

好的,那么,首先,您需要将google play服务的所有依赖项都更改为8.1.0,还需要将build.gradle更改为最新版本、目标sdk 23、comiled版本23等。因此,basicaly,请检查您的gradle。之后,您需要将MGooGleapClient更改为:

 mGoogleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(new Scope(Scopes.PROFILE))
            .addScope(new Scope(Scopes.EMAIL))
            .addScope(new Scope(Scopes.PLUS_LOGIN))
            .addScope(new Scope(Scopes.PLUS_ME))
            .build();
    mGoogleApiClient.connect();
最后,您需要包括sdk>=23所需的权限。要做到这一点,请创建

 private static String ACCOUNT_PERMISSIONS[] = new String[]{
        Manifest.permission.GET_ACCOUNTS
};
下面是一个关于如何获取sdk>=23权限的好教程:

 private static String ACCOUNT_PERMISSIONS[] = new String[]{
        Manifest.permission.GET_ACCOUNTS
};