2015-07-02 21 views
5

Ich bin neu in Android-Entwicklung und hoffe, einige Tipps für das Problem, das ich vor mir habe.Google+ anmelden Schaltfläche kann nicht abgebrochen werden

Meine App erfordert, dass ich eine Schaltfläche google + anmelden.

Mein Fortschritt

  • folgte ich die Richtlinien und abgeschlossen, alle notwendigen Schritte zur Einrichtung eines Google + Zeichen in Schaltfläche
  • ich in der Lage bin Zeichen in Schaltfläche verwenden und abrufen Profil E-Mail

Mein Problem

  • Wenn die Google + Zeichen in Schaltfläche geklickt wird, die „wählen Sie Konto“ Dialog zeigt, die einen Benutzer von mehreren möglichen gmail auswählen können Konten
  • Wenn Benutzer ein Konto klicken und dann auf die Schaltfläche klicken bestätigen, alles in Ordnung
  • funktioniert Aber, wenn Benutzer im Dialogfeld auf Abbrechen klicken, verschwindet der Dialog und erscheint wieder. Auch wenn Sie auf den Zurück-Button klicken, verschwindet der Dialog und erscheint wieder.

Dies verhindert, dass der Benutzer andere Anmeldeoptionen wählen.

Ich frage mich, was ist falsch mit meinem Code, jede Hilfe wäre willkommen. Vielen Dank.

@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

Was passiert, wenn Sie den gesamten Inhalt der onConnectionFailed auskommentieren? Es kann sein, dass das Abbrechen der Anmeldung als Verbindungsfehler gewertet wird und derzeit die Antwort von Ihrer App darauf besteht, es erneut zu versuchen. – Finnboy11

Antwort

0

In onActivityResult Methode Check Result.

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()) { 

Jetzt onConnectionFailed wont ausführen startIntentSenderForResult

+0

Kleine Korrektur responseCode ist resultCode – raviGameboy

0

Ich habe auch das gleiche Problem, gelöst mit diesem

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

Dank ...

0

Ich hatte das gleiche Problem . Für eine "Abbrechen" -Aktion, (responseCode! = RESULT_OK) gibt auch true zurück, so dass ich es in der onActivityResult (..) -Methode abfange. Hier ist der Code:

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

} 
Verwandte Themen