Google登录始终在GoogleSignInResult上失败

我需要你的帮助……我不知道了!

我不明白为什么每次都失败了。

  • 我生成了ID客户端OAuth 2.0。
  • 我已经生成并将google-services.json移动到./app文件夹中。
  • 通过Google Cloud Console,所有Google API都已激活。

退房,如果有什么事伤害你……继续!

亲切的问候

build.gradle:

 apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "sign.in.gogoleplusconnect" minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.0' compile 'com.google.android.gms:play-services-auth:9.0.0' compile 'com.google.android.gms:play-services-identity:9.0.0' compile 'com.google.android.gms:play-services:9.0.0' } 

activity_main.xml中

      

MainActivity.java

 package sign.in.gogoleplusconnect; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private static final int RC_SIGN_IN = 9001; private GoogleSignInOptions gso; private GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("Logger", "onCreate:"); // Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); // Build a GoogleApiClient with access to the Google Sign-In API and the // options specified by gso. mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); // Customize sign-in button. The sign-in button can be displayed in // multiple sizes and color schemes. It can also be contextually // rendered based on the requested scopes. For example. a red button may // be displayed when Google+ scopes are requested, but a white button // may be displayed when only basic profile is requested. Try adding the // Scopes.PLUS_LOGIN scope to the GoogleSignInOptions to see the // difference. SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD); signInButton.setScopes(gso.getScopeArray()); signInButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: Log.d("Logger", "onClick:"); signIn(); break; } } private void signIn() { Log.d("Logger", "signIn:"); Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { Log.d("Logger", "onActivityResult:RC_SIGN_IN : " + RC_SIGN_IN); GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } } private void handleSignInResult(GoogleSignInResult result) { Log.d("Logger", "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { Log.d("Logger", "handleSignInResult : Success"); // Signed in successfully, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); Log.d("Logger", "" + acct.getDisplayName()); Log.d("Logger", "" + acct.getEmail()); Log.d("Logger", "" + acct.getPhotoUrl()); Log.d("Logger", "" + acct.getId()); } else { // Signed out, show unauthenticated UI. Log.d("Logger", "handleSignInResult : Fail"); } } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d("Logger", "onConnectionFailed : Fail"); } } 

Logcat.log

 07-15 16:06:27.817 21424-21424/sign.in.gogoleplusconnect D/Logger: onCreate: 07-15 16:06:30.053 21424-21424/sign.in.gogoleplusconnect D/Logger: onClick: 07-15 16:06:30.055 21424-21424/sign.in.gogoleplusconnect D/Logger: signIn: 07-15 16:06:32.872 21424-21424/sign.in.gogoleplusconnect D/Logger: onActivityResult:RC_SIGN_IN : 9001 07-15 16:06:32.879 21424-21424/sign.in.gogoleplusconnect D/Logger: handleSignInResult:false 07-15 16:06:32.879 21424-21424/sign.in.gogoleplusconnect D/Logger: handleSignInResult : Fail 

从您的代码中,替换

 gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); 

有了这个:

 gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken("web client id from console.developers.google.com for the app") .requestEmail() .build(); 

希望这有助于某人。 还有Firebase Signin变得更容易。 检查此链接 。 谢谢