2015-07-02 20 views
5

Sono nuovo nello sviluppo di Android e spero di ottenere qualche consiglio per il problema che sto affrontando.Il pulsante di accesso di Google+ non può essere annullato

La mia app mi richiede di implementare un pulsante di accesso di Google +.

mio progresso

  • ho seguito le linee guida e completato tutte le procedure di configurazione necessari per un google + pulsante Accedi
  • sono in grado di utilizzare pulsante Accedi e recuperare le e-mail profilo

Il mio problema

  • Quando il google + segno pulsante viene premuto, i "selezionare Account" mostra di dialogo, che permette ad un utente di selezionare da più possibile account Gmail
  • Quando l'utente fa clic su un account e quindi fare clic sul pulsante confermare, tutto funziona bene
  • Ma, quando l'utente fa clic sul pulsante Annulla nella finestra di dialogo, la finestra di dialogo scompare e riappare. Anche se fai clic sul pulsante Indietro, la finestra di dialogo scompare e riappare.

Ciò impedisce all'utente di scegliere altre opzioni di accesso.

Mi chiedo cosa c'è di sbagliato nel mio codice, ogni aiuto sarebbe apprezzato. Grazie.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // facebook sign in 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    setContentView(R.layout.activity_sign_in); 
    facebookLoginSetup(findViewById(android.R.id.content).getRootView()); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API) 
      .addScope(Plus.SCOPE_PLUS_LOGIN) 
      .addScope(Plus.SCOPE_PLUS_PROFILE) 
      .build(); 

    SignInButton sign_in_button = (SignInButton) findViewById(R.id.sign_in_button); 
    setGooglePlusButtonText(sign_in_button, getString(R.string.google_login_button_label)); 

    findViewById(R.id.sign_in_button).setOnClickListener(this); 
    mProgressDialog = new ProgressDialog(this); 
    mProgressDialog.setMessage(getString(R.string.global_message_loading)); 
    mProgressDialog.setCancelable(false); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(mProgressDialog.isShowing()){ 
     mProgressDialog.dismiss(); 
    } 

    // google 
    if (requestCode == RC_SIGN_IN) { 
     if (resultCode != RESULT_OK) { 
      mSignInClicked = false; 
     } 

     mIntentInProgress = false; 
     if (!mGoogleApiClient.isConnecting()) { 
      mGoogleApiClient.reconnect(); 
     } 
    } else { 
     // facebook 
     // call registered call back method 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 
} 


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


@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.sign_in_button && !mGoogleApiClient.isConnecting()) { 
     if(!mProgressDialog.isShowing()){ 
      mProgressDialog.show(); 
     } 

     mSignInClicked = true; 
     mGoogleApiClient.connect(); 
    } 
} 


@Override 
public void onConnected(Bundle connectionHint) { 
    mSignInClicked = false; 
    if(mProgressDialog.isShowing()){ 
     mProgressDialog.dismiss(); 
    } 

    if (Plus.AccountApi.getAccountName(mGoogleApiClient) != null) { 
     String userEmail = Plus.AccountApi.getAccountName(mGoogleApiClient); 
     createUser(userEmail); 
    } 
} 


@Override 
public void onConnectionFailed(ConnectionResult result) { 

    if (!mIntentInProgress && result.hasResolution()) { 
     try { 
      Log.d(MainActivity.TAG, "onConnectionFailed keep retrying"); 
      mIntentInProgress = true; 
      startIntentSenderForResult(result.getResolution().getIntentSender(), 
        RC_SIGN_IN, null, 0, 0, 0); 
     } catch (IntentSender.SendIntentException e) { 
      // The intent was canceled before it was sent. Return to the default 
      // state and attempt to connect to get an updated ConnectionResult. 
      mIntentInProgress = false; 
     } 
    } 
} 


    // google custom button 
protected void setGooglePlusButtonText(SignInButton signInButton, String buttonText) { 
    for (int i = 0; i < signInButton.getChildCount(); i++) { 
     View v = signInButton.getChildAt(i); 

     if (v instanceof TextView) { 
      TextView tv = (TextView) v; 
      tv.setTextSize(15); 
      tv.setTypeface(null, Typeface.NORMAL); 
      tv.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); 
      tv.setText(buttonText); 
      return; 
     } 
    } 
} 
+0

Cosa succede se si commenta l'intero contenuto della onConnectionFailed? Può essere che l'annullamento dell'accesso venga conteggiato come un errore di connessione e attualmente la risposta dalla tua app ad essa è quella di riprovare. – Finnboy11

risposta

0

In onActivityResult metodo di controllo resultCode.

if(responseCode == RESULT_OK){ 

//User clicked sign in do your stuff 

}else if(responseCode == RESULT_CANCELED){ 

//User clicked cancel 

mIntentInProgress = true; 

} 

    //if (!mIntentInProgress && result.hasResolution()) { 

Ora onConnectionFailed solito eseguire startIntentSenderForResult

+0

Small response responseCode è resultCode – raviGameboy

0

Ho anche questo stesso problema, risolto con questo

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
        SharedPreferences.Editor editor = sp.edit(); 
        editor.putString(PREF_ACCOUNT_NAME, "cancel"); 
        editor.apply(); 
        this.finish(); 

Grazie ...

0

Ho avuto lo stesso problema . Per un'azione "annulla", (responseCode! = RESULT_OK) restituisce anche true, quindi lo prendo nel metodo onActivityResult (..). Ecco il codice:

protected void onActivityResult(int requestCode, int responseCode, Intent data) { 
    // TODO Auto-generated method stub 
    if (requestCode == RC_SIGN_IN) { 
     if (responseCode != RESULT_OK) { 
       mSignInClicked = false; 
     }else if (responseCode == RESULT_OK) { 
      if (!mGoogleApiClient.isConnected()) { 
       mGoogleApiClient.reconnect();     
      }   
     } 
     mIntentInProgress = false; 
    } else { 
     ParseFacebookUtils.onActivityResult(requestCode, responseCode, data); 
    } 

} 
Problemi correlati