谷歌+;android 6发布后plus登录不起作用
因此,在android 6棉花糖发布之前,google+登录工作得非常好。发布后,我遇到了权限、onConnectionFailed等问题。。。有没有人有办法解决这个问题?我正在从fragment调用google登录方法。代码如下: 片段:谷歌+;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;
@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
};