Google+ Accedi per Android non funziona, codice di errore 4
-
21-12-2019 - |
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();
}
}
}
}
. Soluzione
Ho capito il mio problema.
C'erano un paio di problemi.
- .
- 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. - Stava anche avendo il problema che viene discusso qui . Il mio host
Activity
stava consumando il mioonActivityResult(...)
dal mioconnectionResult.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.
Lezione, assicurarsi di stagni e revocando l'accesso durante il test. Se stai avendo questi problemi, prova
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
- .
- Apri la pagina delle credenziali.
- Fai clic su Aggiungi credenziali> ID client OAuth 2.0.