2015-02-10 1 views
0

У меня возникло множество проблем с входом в Google API. Я видел много возможных реализаций, и ни один из них действительно не работает.Регистрация Google Google API в

Вот # 1 из here:

@Override 
public void onConnected(Bundle bundle) { 
    Log.d("MA", "onConnected"); 
    mSignInOut.setVisibility(View.VISIBLE); 
    mSignInOut.setText(getResources().getText(R.string.signOut)); 
    mSignInOut.setTextColor(getResources().getColor(R.color.signOutButton)); 
    mLoggedInMessage.setText(getResources().getText(R.string.loggedInMessage) + " " + getUsername() + "!"); 
} 



protected boolean isSignedIn() { 
    return (mGoogleApiClient != null && mGoogleApiClient.isConnected()); 
} 

public void signInOut() { 
    if(isSignedIn()) { 
     Log.d("MA", "signinout: signing out"); 
     mSignInClicked = false; 
     Games.signOut(mGoogleApiClient); 
     mGoogleApiClient.disconnect(); 
     onLoggedOut(); 
    } else { 
     Log.d("MA", "signinout: signing in"); 
     mSignInClicked = true; 
     mGoogleApiClient.connect(); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == RQC_SIGN_IN) { 
     mResolvingError = false; 
     if (resultCode == RESULT_OK) { 
      // Make sure the app is not already connected or attempting to connect 
      if (!mGoogleApiClient.isConnecting() && 
        !mGoogleApiClient.isConnected()) { 
       mGoogleApiClient.connect(); 
      } 
     } 
    } 
@Override 
public void onConnectionFailed(ConnectionResult result) { 
    if (mResolvingError) { 
     // Already attempting to resolve an error. 
     return; 
    } else if (result.hasResolution()) { 
     try { 
      mResolvingError = true; 
      result.startResolutionForResult(this, RQC_SIGN_IN); 
     } catch (IntentSender.SendIntentException e) { 
      // There was an error with the resolution intent. Try again. 
      mGoogleApiClient.connect(); 
     } 
    } else { 
     // Show dialog using GooglePlayServicesUtil.getErrorDialog() 
     showErrorDialog(result.getErrorCode()); 
     mResolvingError = true; 
    } 
} 

// The rest of this code is all about building the error dialog 

/* Creates a dialog for an error message */ 
private void showErrorDialog(int errorCode) { 
    // Create a fragment for the error dialog 
    ErrorDialogFragment dialogFragment = new ErrorDialogFragment(); 
    // Pass the error that should be displayed 
    Bundle args = new Bundle(); 
    args.putInt("DIALOG_ERROR", errorCode); 
    dialogFragment.setArguments(args); 
    dialogFragment.show(getSupportFragmentManager(), "errordialog"); 
} 

/* Called from ErrorDialogFragment when the dialog is dismissed. */ 
public void onDialogDismissed() { 
    mResolvingError = false; 
} 

/* A fragment to display an error dialog */ 
public static class ErrorDialogFragment extends DialogFragment { 
    public ErrorDialogFragment() { } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Get the error code and retrieve the appropriate dialog 
     int errorCode = this.getArguments().getInt("DIALOG_ERROR"); 
     return GooglePlayServicesUtil.getErrorDialog(errorCode, 
       this.getActivity(), RQC_SIGN_IN); 
    } 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     ((MainActivity)getActivity()).onDialogDismissed(); 
    } 
} 

Проблема здесь, когда я подписываю, и снова после того, как приложение запустить пользовательский интерфейс не меняется/onConnected не называется, но, когда я включаю чтобы он снова попытался подключиться, он немедленно вызывает onConnected. Он работал, когда я положил super.onActivityResult(requestCode, resultCode, data); в начало onActivityResult, но затем он соединяется и после успешного соединения он, кажется, снова пытается подключиться, но перед тем, как выбрать аккаунт, окно исчезнет. EDIT: Также не отображается диалоговое окно с ошибкой, когда что-то пошло не так.

номер 2 совсем то же самое, но с разными onActivityResult и onConnectionFailed методы, он получил от here:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == RQC_SIGN_IN) { 
     mSignInClicked = false; 
     mResolvingError = false; 
     Log.d("MA", "resultCode: " + resultCode); 
     if (resultCode == RESULT_OK) { 
      mGoogleApiClient.connect(); 
     } else { 
      Log.d("MA", "onActivityResult, resultCode != -1"); 
      BaseGameUtils.showActivityResultError(this, requestCode, resultCode, R.string.signin_other_error); 
     } 
    } 
@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // If the sign in button was clicked or if auto sign-in is enabled, 
    // launch the sign-in flow 
    Log.d("BFA", "onConnectionFailed, connectionresult: " + result.getErrorCode()); 
    if (mResolvingError) { 
     Log.d("BFA", "Already attempting to resolve an error."); 
     // Already attempting to resolve an error. 
     return; 
    } 
    if (mSignInClicked || mAutoLogin) { 
     mResolvingError = true; 
     mSignInClicked = false; 
     mAutoLogin = false; 
     if (!BaseGameUtils.resolveConnectionFailure(this, mGoogleApiClient, result, 
       RQC_SIGN_IN, getString(R.string.signin_other_error))) { 
      Log.d("MA", "resolveConnectionFailure false"); 
      mResolvingError = false; 
     } 
    } 
} 

При таком подходе я получаю сообщение об ошибке после выбора учетной записи, но получать авторизовались потом все-таки.

Кто-нибудь мне помогает?

ответ

0

Хорошо, я, наконец, нашел ошибку, конечно, там, где я бы поискал наконец.

Это было в создании Builder, я использовал enableAutoManage() и поэтому, по-видимому, дублировал действия, которые я хотел сделать в любом случае. Вырезали и работали, использовали подход, подобный # 2.