2014-11-20 23 views
6

cerco di lavorare con l'API di Google Drive su Android, in primo luogo con la demo:API Android di Google Drive "connessione non riuscita"

https://github.com/googledrive/android-quickstart

Tuttavia, ho questo errore che non riesco a risolvere.

collegamento GoogleApiClient fallita: ConnectionResult {statusCode = SIGN_IN_REQUIRED, risoluzione = {PendingIntent 421d40e8: [email protected]}}

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // Called whenever the API client fails to connect. 
    Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); 
    if (!result.hasResolution()) { 
     // show the localized error dialog. 
     GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); 
     return; 
    } 
    // The failure has a resolution. Resolve it. 
    // Called typically when the app is not yet authorized, and an 
    // authorization 
    // dialog is displayed to the user. 
    try { 
     result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
    } catch (SendIntentException e) { 
     Log.e(TAG, "Exception while starting resolution activity", e); 
     // There was an error with the resolution intent. Try again. 
     mGoogleApiClient.connect(); 
    } 
} 


@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    if (requestCode == REQUEST_CODE_RESOLUTION) { 

     if (resultCode == RESULT_OK) { 
      Log.i(TAG, "Error resolution success."); 

      // Make sure the app is not already connected or attempting to connect 
      if (!mGoogleApiClient.isConnecting() && 
        !mGoogleApiClient.isConnected()) { 
       mGoogleApiClient.connect(); 
      } 

     } else { 
      GooglePlayServicesUtil.getErrorDialog(requestCode, this, 0).show(); 
     } 

     break; 
    } 
} 
+1

Nel mio caso, questo errore è stato causato da qualcosa del pacchetto dell'app che non corrisponde a quello nella credenziale. È necessario assicurarsi che il nome del pacchetto e SHA1 devono corrispondere. La versione di debug in esecuzione su una macchina di sviluppo può avere un nome di pacchetto diverso e SHA1 da quella della versione di rilascio. – Hong

risposta

2

Here è l'informazioni per l'errore che stanno ricevendo Presumo che tu sia, ma devi accedere per accedere a Drive. Quando eseguo l'app di esempio, all'inizio mi chiede di scegliere un account. Forse non hai un account sincronizzato con il dispositivo che stai utilizzando? C'è un'opzione per "aggiungere account", ma forse il comportamento è diverso quando hai zero account. La documentazione suggerisce di continuare senza utilizzare l'API (semplicemente perché non è possibile, a meno che non si effettui l'accesso) o chiamare lo startResolutionForResult(Activity, int) per richiedere all'utente di accedere, ma probabilmente sarebbe più semplice a solo add the account to your device.

+0

Strano, senza cambiare nulla nel mio codice funziona sul mio tablet Sony ma non sul Samsung O.o – cham

+0

Sei connesso ad entrambi i dispositivi con lo stesso account? – Andy

+0

Sì con lo stesso account – cham

0

Non so se qualcuno ha ancora bisogno di questo, ma nel mio caso ho avuto due account Google quindi devo prima scegliere quale account voglio usare. Ho usato questo codice nel onConnectionFailed

if (!connectionResult.hasResolution()) 
    { 
     // show the localized error dialog. 
     GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), mContext, 0).show(); 
     return; 
    } 

    try 
    { 
     connectionResult.startResolutionForResult(mContext, 1); 
    } catch (IntentSender.SendIntentException e) 
    { 
     e.printStackTrace(); 
    } 
3

Ciò può essere dovuto a negligenza da parte dello sviluppatore (come è successo con me) - dettagli della SHA1 che fornisci su console è quella della chiave di produzione e si sta testando il debug modalità (i dettagli SHA1 sarebbero diversi). Il messaggio di errore API di Google Drive, tuttavia, potrebbe essere stato migliore!

1

È possibile fare riferimento la mia risposta qui https://stackoverflow.com/a/41658044/4448757 di connettersi con account Google, questo funziona perfettamente solo in apk firmato

poi dopo si può andare per Google Drive

IntentSender intentSender = Drive.DriveApi 
      .newOpenFileActivityBuilder() 
      .build(mGoogleApiClient); 
    try { 
     startIntentSenderForResult(intentSender, DRIVE_CHOOSER_REQUEST, null, 0, 0, 0); 
    } catch (IntentSender.SendIntentException e) { 
     e.printStackTrace(); 
    }