2015-10-20 42 views
2

因此,在android 6棉花糖发布之前,google +登录完美无缺。发布后,我有问题像权限,onConnectionFailed等...有没有人有解决方案如何解决这个问题?我调用谷歌登录片段的方法。下面是代码:Android + 6发布后Google + plus登录失效

片段:

@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(); 
     } 
    } 
} 

和活动结果:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    LoginFragment loginFragment = (LoginFragment) getSupportFragmentManager().findFragmentByTag("MyProfileFragment"); 
    if (loginFragment != null) { 
     loginFragment.onActivityResult(requestCode, resultCode, data); 
    } 
} 

回答

3

好了,所以,首先,你需要改变你所有的谷歌播放服务的依赖性到8.1.0,也build.gradle到最新的版本,有针对性的sdk 23,comiled版本23,等等。所以,基本上,检查你的gradle。在此之后,您需要将mGoogleApiClient更改为:

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: https://github.com/googlesamples/android-RuntimePermissions