Google Play Games 第一次登录失败,第二次成功

Google Play Games fails to sign-in at the first attemp, success at the second

我在 Google Play 游戏 API 中遇到一个非常愚蠢的问题,当用户加入时,他需要再次单击登录才能登录。

我在启动时有自动登录,所以当用户打开应用程序时,它会显示登录对话框,选择一个电子邮件,然后在没有任何消息的情况下关闭,之后用户必须点击登录再次登录。

因此,不知道为什么会发生这种情况,人们遇到的普遍问题是无法登录,但在第一次尝试时就失败了。

我的代码:

public class MainActivity extends FragmentActivity  implements
    View.OnClickListener,GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{ 

private GoogleApiClient mGoogleApiClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Games.API)
            .addScope(Games.SCOPE_GAMES)
            .build();

}

@Override
protected void onStart(){
    super.onStart();
    mGoogleApiClient.connect();
}


@Override
protected void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}


@Override
public void onConnected(@Nullable Bundle bundle) {

}


@Override
public void onConnectionSuspended(int i) {
    mGoogleApiClient.connect();
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    if (connectionResult.hasResolution()) {
        try {
            connectionResult.startResolutionForResult(this, 2);
        } catch (IntentSender.SendIntentException e) {
            mGoogleApiClient.connect();
        } catch (Exception e) {
            startActivityForResult(null, 3);
        }
    }

}

您必须在 onActivityResult() 方法中调用 mGoogleApiClient.connect()

@Override
protected void onActivityResult(int request, int response, Intent data) {
  super.onActivityResult(request, response, data);
  mGoogleApiClient.connect();
}

否则 connectionResult.startResolutionForResult 的结果不会更新 GoogleApiClient 状态。