Domanda

Ho seguito il Guida su come configurare Google + Accedi . Ho fatto ogni passo e fondamentalmente copia e incollato il codice.

Ecco lo scenario. Sviluppo su due computer diversi. Ho due diversi client-IDS nella mia console. Uno per il computer A e uno per il computer b.

Quando installo l'applicazione e lo avvia, tenterà di accedere e fallire con il seguente errore da LogCat. Se di nuovo fuori dall'app e rilancia, firmerà quindi bene. Quando fallisce, sembrerà cercare di lanciare un Activity ma il Activity non viene mai avviato. Ecco il logcat.

06-04 10:14:57.801  19948-19948/carbon.android.game.legions D/AccountFragment﹕ ResolveSignInError ErrorCode:4
06-04 10:14:57.801      602-823/? I/ActivityManager﹕ START u0 {cmp=com.google.android.gms/.plus.activity.AccountSignUpActivity (has extras)} from pid -1
06-04 10:14:57.811      178-646/? D/audio_hw_primary﹕ select_devices: out_snd_device(2: speaker) in_snd_device(0: )
06-04 10:14:57.811      178-646/? D/ACDB-LOADER﹕ ACDB -> send_afe_cal
06-04 10:14:57.821     602-2816/? I/ActivityManager﹕ START u0 {act=com.google.android.gms.common.account.CHOOSE_ACCOUNT pkg=com.google.android.gms cmp=com.google.android.gms/.common.account.AccountPickerActivity (has extras)} from pid 20027
06-04 10:14:57.941  20027-20031/? D/dalvikvm﹕ GC_CONCURRENT freed 601K, 7% free 9304K/9940K, paused 2ms+2ms, total 19ms
06-04 10:14:58.071      949-959/? W/GLSUser﹕ GoogleAccountDataService.getToken()
.

Cosa sto facendo male? Ho seguito la parola guida per la parola e fondamentalmente copia e incolla il codice. L'unica differenza è che sono all'interno di un Fragment e non un Activity. Ma ciò non dovrebbe importare.

Ecco il codice:

public class AccountFragment extends Fragment implements View.OnClickListener,
        ConnectionCallbacks,
        OnConnectionFailedListener {

    private static final int RC_SIGN_IN = 1524;

    private GoogleApiClient googleApiClient;
    private boolean intentInProgress;
    private boolean signInClicked;
    private ConnectionResult connectionResult;

    private SignInButton signInButton;

    public AccountFragment() {}

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.d(TAG, "The connection failed: " + connectionResult.getErrorCode());

        if (!this.intentInProgress) {
            this.connectionResult = connectionResult;

            if (this.signInClicked) {
                this.resolveSignInError();
            }
        }
    }

    @Override
    public void onStart() {
        super.onStart();

        this.googleApiClient.connect();
    }

    @Override
    public void onStop() {
        super.onStop();

        if (this.googleApiClient.isConnected()) {
            this.googleApiClient.disconnect();
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.googleApiClient = new GoogleApiClient.Builder(this.getActivity())
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(Plus.API)
                .addScope(Plus.SCOPE_PLUS_PROFILE)
                .build();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                if (!this.googleApiClient.isConnecting() && !this.googleApiClient.isConnected()) {
                    this.signInClicked = true;
                    this.resolveSignInError();
                } else {
                    Log.d(TAG, "OnClick else");
                }
                break;
            default:
                break;
        }
    }

    @Override
    public void onConnected(Bundle bundle) {
        this.signInClicked = false;
        Person currentPerson = Plus.PeopleApi.getCurrentPerson(this.googleApiClient);
        Log.d(TAG, "User connected: " + currentPerson.getDisplayName());
        Log.d(TAG, "User id: " + currentPerson.getId());
        Toast.makeText(this.getActivity(), "User connected: " + currentPerson.getDisplayName(), Toast.LENGTH_SHORT).show();
    }

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

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == RC_SIGN_IN) {

            if (resultCode != Activity.RESULT_OK) {
                this.signInClicked = false;
            }

            this.intentInProgress = false;

            if (!this.googleApiClient.isConnecting()) {
                this.googleApiClient.connect();
            }
        }
    }

    private void resolveSignInError() {
        if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getActivity()) != ConnectionResult.SUCCESS) {
            Log.e(TAG, "Google Play Services is not available.");
        }

        Log.d(TAG, "ResolveSignInError ErrorCode:" + this.connectionResult.getErrorCode());

        if (this.connectionResult.hasResolution()) {
            this.intentInProgress = true;
            try {
                this.connectionResult.startResolutionForResult(this.getActivity(), RC_SIGN_IN);
            } catch (SendIntentException e) {
                e.printStackTrace();
                this.intentInProgress = false;
                this.googleApiClient.connect();
            }
        }
    }
}
.

È stato utile?

Soluzione

Ho capito il mio problema.

C'erano un paio di problemi.

    .
  1. Con tutti i miei test, ho tentato di firmare tutto il tempo. E a volte ha avuto successo. In qualche modo, stavo rimanendo autenticati anche se la mia app non è stata effettuata. Ho aggiunto la possibilità di uscire e revoca l'accesso . Dopo revoca di accesso e tentando di accedere nuovamente, il Activity avrebbe lanciato per risolvere eventuali errori.
  2. Stava anche avendo il problema che viene discusso qui . Il mio host Activity stava consumando il mio onActivityResult(...) dal mio connectionResult.startResolutionForResult(...);. Quindi, dopo un processo e errore ho finalmente trovato una soluzione anche a tale problema. La domanda collegata aiutato ma non ha risolto completamente il problema. Si prega di vedere La mia risposta a quella domanda per come ho risolto il problema.
  3. Lezione, assicurarsi di stagni e revocando l'accesso durante il test. Se stai avendo questi problemi, prova revoca dell'accesso e quindi accedere indietro in.

Altri suggerimenti

Nel mio caso risolto il mio problema facendo il seguente passaggio, la sua vecchia que se altri hanno anche questo problema così

Segui questi steli nello sviluppo di Android Console

    .
  1. Apri la pagina delle credenziali.
  2. Fai clic su Aggiungi credenziali> ID client OAuth 2.0.
  3.  Inserire l'immagine Descrizione qui

    1. Seleziona Android. e riempire l'impronta digitale e il nome del pacchetto.
    2.  Inserire l'immagine Descrizione qui

      1. Fai clic su Crea.
      2. Poi ci sarà riuscito a cantare da Google.

        Spero che questo possa risolvere il tuo problema.!!!
        . Per favore msp me se si verifica un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top